145 lines
4.0 KiB
Markdown
145 lines
4.0 KiB
Markdown
# 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
|
|
```
|