first commit
This commit is contained in:
144
README.md
Normal file
144
README.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# NaughtyBulldogs — Streamer Rating App
|
||||
|
||||
## Rychlý start (Docker)
|
||||
|
||||
```bash
|
||||
# 1. Zkopíruj a edituj .env
|
||||
cp .env.example .env
|
||||
|
||||
# 2. Vygeneruj bcrypt hash admin hesla
|
||||
docker compose run --rm app php -r "echo password_hash('tve_heslo', PASSWORD_BCRYPT);"
|
||||
# Zkopíruj výstup do .env jako ADMIN_HASH=...
|
||||
|
||||
# 3. Spusť
|
||||
docker compose up -d
|
||||
|
||||
# App běží na http://localhost:8080
|
||||
```
|
||||
|
||||
Při prvním startu entrypoint automaticky:
|
||||
- Počká na PostgreSQL (healthcheck)
|
||||
- Vytvoří tabulky a naseeduje všechny streamery ze schema.sql
|
||||
- Spustí Apache
|
||||
|
||||
```bash
|
||||
# Logy
|
||||
docker compose logs -f app
|
||||
|
||||
# Restart
|
||||
docker compose restart app
|
||||
|
||||
# Stop + smazání dat
|
||||
docker compose down -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Stack
|
||||
- **Frontend**: Vanilla JS (single HTML file, no build step)
|
||||
- **Backend**: PHP 8.1+
|
||||
- **Database**: PostgreSQL 14+
|
||||
|
||||
## Struktura souborů
|
||||
|
||||
```
|
||||
/
|
||||
├── public/
|
||||
│ └── index.html ← celý frontend
|
||||
├── api/
|
||||
│ ├── db.php ← PDO připojení + helpers (nepřístupné zvenčí)
|
||||
│ ├── auth.php ← login / logout / session check
|
||||
│ ├── streamers.php ← CRUD streamerů + hodnocení
|
||||
│ └── live.php ← live refresh (Twitch + Kick API)
|
||||
├── config.php ← credentials (NIKDY do gitu!)
|
||||
├── schema.sql ← PostgreSQL schéma + seed data
|
||||
├── .htaccess ← routing + security headers
|
||||
└── .gitignore
|
||||
```
|
||||
|
||||
## Instalace
|
||||
|
||||
### 1. PostgreSQL databáze
|
||||
|
||||
```bash
|
||||
# Vytvoř databázi a uživatele
|
||||
psql -U postgres
|
||||
CREATE DATABASE streamers_db;
|
||||
CREATE USER streamers_user WITH ENCRYPTED PASSWORD 'silne_heslo';
|
||||
GRANT ALL PRIVILEGES ON DATABASE streamers_db TO streamers_user;
|
||||
\q
|
||||
|
||||
# Aplikuj schema
|
||||
psql -U streamers_user -d streamers_db -f schema.sql
|
||||
```
|
||||
|
||||
### 2. config.php
|
||||
|
||||
```bash
|
||||
cp config.php config.php
|
||||
# Edituj hodnoty:
|
||||
# - DB_HOST, DB_NAME, DB_USER, DB_PASS
|
||||
# - ADMIN_HASH — vygeneruj: php -r "echo password_hash('tve_heslo', PASSWORD_BCRYPT);"
|
||||
# - SESSION_SECRET — náhodný string min 32 znaků
|
||||
# - TWITCH_CLIENT_ID + TWITCH_CLIENT_SECRET (z https://dev.twitch.tv/console/apps)
|
||||
# - ALLOWED_ORIGIN — tvá doména
|
||||
```
|
||||
|
||||
### 3. Twitch API credentials
|
||||
|
||||
1. Jdi na https://dev.twitch.tv/console/apps
|
||||
2. Vytvoř novou aplikaci
|
||||
3. OAuth Redirect URL: `https://tvadomena.cz`
|
||||
4. Zkopíruj **Client ID** a **Client Secret** do `config.php`
|
||||
|
||||
### 4. Nahrání na server
|
||||
|
||||
```bash
|
||||
# Nahraj všechny soubory kromě config.php (ten edituj přímo na serveru)
|
||||
rsync -av --exclude='config.php' ./ user@server:/var/www/streamers/
|
||||
|
||||
# Na serveru edituj config.php
|
||||
ssh user@server
|
||||
nano /var/www/streamers/config.php
|
||||
```
|
||||
|
||||
### 5. PHP session nastavení
|
||||
|
||||
Ujisti se, že server má `session.cookie_httponly = On` a `session.cookie_secure = On` (pro HTTPS).
|
||||
|
||||
## API endpoints
|
||||
|
||||
| Method | URL | Auth | Popis |
|
||||
|--------|-----|------|-------|
|
||||
| GET | `/api/streamers` | — | Veřejný seznam (jen ohodnocení) |
|
||||
| GET | `/api/streamers?all=1` | Admin | Všichni streamers |
|
||||
| POST | `/api/streamers` | — | Navrhnout streamera (divák) |
|
||||
| POST | `/api/streamers?admin=1` | Admin | Přidat streamera |
|
||||
| PUT | `/api/streamers?id=N` | Admin | Uložit hodnocení |
|
||||
| DELETE | `/api/streamers?id=N` | Admin | Smazat streamera |
|
||||
| GET | `/api/auth?action=check` | — | Zkontrolovat session |
|
||||
| POST | `/api/auth?action=login` | — | Přihlásit admin |
|
||||
| POST | `/api/auth?action=logout` | Admin | Odhlásit |
|
||||
| GET | `/api/live` | Admin | Refresh live statusů |
|
||||
|
||||
## Live refresh
|
||||
|
||||
- Twitch: Helix API, batch po 100 streamerech — Přesný, spolehlivý
|
||||
- Kick: veřejný endpoint `kick.com/api/v2/channels/{name}` — funguje bez auth, ale může se změnit
|
||||
- Cache: výsledky jsou cachované 120s (nastavitelné v `config.php` jako `LIVE_CACHE_TTL`)
|
||||
- Refresh se spouští ručně tlačítkem v admin panelu (nebo cron job)
|
||||
|
||||
### Volitelný cron pro automatický refresh
|
||||
|
||||
```bash
|
||||
# Každé 3 minuty refreshuj live statusy (potřebuje admin session — doporučeno CLI script)
|
||||
*/3 * * * * curl -s -b "PHPSESSID=..." https://tvadomena.cz/api/live > /dev/null
|
||||
```
|
||||
|
||||
## .gitignore
|
||||
|
||||
```
|
||||
config.php
|
||||
/tmp/
|
||||
*.log
|
||||
```
|
||||
Reference in New Issue
Block a user