Refactor environment configuration and update Docker Compose settings

This commit is contained in:
Nicola
2026-06-25 08:23:29 +02:00
parent e36364b3d9
commit c1f62f507f
3 changed files with 27 additions and 60 deletions
+4 -16
View File
@@ -1,23 +1,11 @@
# Tennis Roots Configurazione Docker # Tennis Roots Configurazione
# Copia questo file in .env e personalizza i valori # Copia questo file in .env e personalizza i valori
# Dominio pubblico per il servizio (obbligatorio) # Dominio pubblico (obbligatorio)
DOMAIN=tennis.ricordatiilatte.it DOMAIN=tennis.example.com
# Nome del container # Nome del container
CONTAINER_NAME=tennis-roots CONTAINER_NAME=tennis-roots
# Rete Traefik esterna # Porta interna del server
TRAEFIK_NETWORK=traefik-public
# Certificato SSL
CERT_RESOLVER=letsencrypt
# Entrypoint Traefik
ENTRYPOINT=https
# Porta interna del server Express
INTERNAL_PORT=3000 INTERNAL_PORT=3000
# (Opzionale) Porta esterna per debug diretto senza Traefik
# HOST_PORT=3000
+20 -41
View File
@@ -20,17 +20,6 @@ Overlay per streaming tennis (OBS) con controller remoto via WebSocket.
## Quick Start ## Quick Start
```bash
# Clona / entra nel progetto
cd tennis-roots
# Avvia tutto con uno script
chmod +x start.sh
./start.sh
```
Oppure manualmente:
```bash ```bash
cd server cd server
npm install npm install
@@ -134,46 +123,37 @@ npm run dev # node --watch
## Deploy su VPS (Docker + Traefik) ## Deploy su VPS (Docker + Traefik)
Il progetto include `Dockerfile` e `docker-compose.yml` pronti per il deploy
su un'infrastruttura con **Traefik** come reverse proxy.
### Prerequisiti ### Prerequisiti
- Docker e Docker Compose installati - Docker e Docker Compose
- Rete `traefik-public` già esistente (`docker network create traefik-public`) - Rete `traefik-public` già esistente (`docker network create traefik-public`)
- Dominio configurato (es. `tennis.ricordatiilatte.it`)
### Procedura ### Procedura
```bash ```bash
# Clona il progetto sulla VPS git clone <url> stream-overlay
git clone <url> tennis-roots cd stream-overlay
cd tennis-roots cp .env.example .env
# imposta DOMAIN con il tuo dominio
# Avvia
docker compose up -d docker compose up -d
# Log
docker compose logs -f
``` ```
### Accessi ### Accessi
| Risorsa | URL | | Risorsa | URL |
|---------|-----| |---------|-----|
| Controller | `https://tennis.ricordatiilatte.it/controller/` | | Controller | `https://<tuo-dominio>/controller/` |
| Scoreboard | `https://tennis.ricordatiilatte.it/overlay/scoreboard.html` | | Scoreboard | `https://<tuo-dominio>/overlay/scoreboard.html` |
| Match Info | `https://tennis.ricordatiilatte.it/overlay/match-info.html` | | Match Info | `https://<tuo-dominio>/overlay/match-info.html` |
| Clock | `https://tennis.ricordatiilatte.it/overlay/clock.html` | | Clock | `https://<tuo-dominio>/overlay/clock.html` |
| Server Ind. | `https://tennis.ricordatiilatte.it/overlay/server-indicator.html` | | Server Ind. | `https://<tuo-dominio>/overlay/server-indicator.html` |
| API stato | `https://tennis.ricordatiilatte.it/api/state` | | API stato | `https://<tuo-dominio>/api/state` |
| WebSocket | `wss://tennis.ricordatiilatte.it/ws` | | WebSocket | `wss://<tuo-dominio>/ws` |
### Note ### Note
- Il server è stateless (stato in memoria). Un restart azzera il match. - Il server è stateless (stato in memoria). Un restart azzera il match.
- Il WebSocket funziona nativamente con Traefik (upgrade HTTP → WS automatico). - Il WebSocket funziona nativamente con Traefik (upgrade HTTP → WS automatico).
- Se vuoi un dominio diverso, cambia il valore di `Host(...)` in `docker-compose.yml`.
## Regole punteggio implementate ## Regole punteggio implementate
@@ -186,22 +166,21 @@ docker compose logs -f
## Struttura file ## Struttura file
``` ```
tennis-roots/ stream-overlay/
├── server/ ├── server/
│ ├── package.json │ ├── package.json
│ ├── index.js # Server Express + WebSocket │ ├── Dockerfile
│ └── node_modules/ │ └── index.js
├── overlay/ ├── overlay/
│ ├── common.js # Client WebSocket condiviso │ ├── common.js
│ ├── scoreboard.html │ ├── scoreboard.html
│ ├── match-info.html │ ├── match-info.html
│ ├── clock.html │ ├── clock.html
│ └── server-indicator.html │ └── server-indicator.html
├── controller/ ├── controller/
│ └── index.html # Pannello di controllo │ └── index.html
├── server/ ├── docker-compose.yml
│ ├── Dockerfile # Immagine container ├── .env.example
│ └── ... ├── .gitignore
├── docker-compose.yml # Deploy con Traefik
└── README.md └── README.md
``` ```
+3 -3
View File
@@ -8,10 +8,10 @@ services:
security_opt: security_opt:
- no-new-privileges:true - no-new-privileges:true
networks: networks:
- ${TRAEFIK_NETWORK:-traefik-public} - traefik-public
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.docker.network=${TRAEFIK_NETWORK:-traefik-public}" - "traefik.docker.network=traefik-public"
- "traefik.http.routers.tennis-roots.rule=Host(`${DOMAIN:-tennis.localhost}`)" - "traefik.http.routers.tennis-roots.rule=Host(`${DOMAIN:-tennis.localhost}`)"
- "traefik.http.routers.tennis-roots.entrypoints=${ENTRYPOINT:-https}" - "traefik.http.routers.tennis-roots.entrypoints=${ENTRYPOINT:-https}"
- "traefik.http.routers.tennis-roots.tls=true" - "traefik.http.routers.tennis-roots.tls=true"
@@ -23,5 +23,5 @@ services:
- "traefik.http.middlewares.tennis-roots-headers.headers.customresponseheaders.X-Robots-Tag=noindex" - "traefik.http.middlewares.tennis-roots-headers.headers.customresponseheaders.X-Robots-Tag=noindex"
networks: networks:
${TRAEFIK_NETWORK:-traefik-public}: traefik-public:
external: true external: true