Classifica globale: API dei punteggi, schermata iniziale e nome memorizzato
- services/scores-api: microservizio (solo stdlib) con SQLite WAL, idempotenza per submission_id, limiti di frequenza e validazione; immagine Docker non-root. - nginx: reverse proxy su /api/zombie-fps/ (stessa origine del gioco, niente CORS). - scripts/leaderboard.gd: client HTTP con retry idempotente; su desktop la classifica resta disattivata senza --api=, cosi' i test non sporcano la classifica pubblica. - scripts/player_profile.gd: nome, id anonimo e miglior punteggio in user:// e in window.localStorage; il nome scelto non viene piu' richiesto; riparazione dei profili con la stringa "null". - scripts/start_screen.gd: menu con nome, GIOCA e classifica; la partita parte solo dal pulsante (via la rete di sicurezza sull'input, Invio nel campo non avvia). - scripts/main.gd, player.gd: avvio esplicito, segnale died, nota dell'invio. - tools: test_scores_api.py (42), test_leaderboard (14), test_player_profile (21), test_start_screen (10); suite esistenti adeguate all'avvio manuale. - docs/HIGHSCORES.md + docs/WEB-DEPLOY.md aggiornati.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
# Immagine minima: nessuna dipendenza pip, nessuna rete in fase di build.
|
||||
FROM python:3.12-alpine3.20
|
||||
|
||||
ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONUNBUFFERED=1 \
|
||||
DATABASE_PATH=/data/scores.db \
|
||||
PORT=8791
|
||||
|
||||
WORKDIR /app
|
||||
COPY app.py /app/app.py
|
||||
RUN adduser -D -u 10001 scores && mkdir -p /data && chown scores /data
|
||||
USER scores
|
||||
|
||||
EXPOSE 8791
|
||||
HEALTHCHECK --interval=15s --timeout=3s --retries=3 --start-period=5s \
|
||||
CMD python -c "import urllib.request;urllib.request.urlopen('http://127.0.0.1:8791/health',timeout=2)"
|
||||
|
||||
CMD ["python", "/app/app.py"]
|
||||
Reference in New Issue
Block a user