Files
soroban-abacus-flashcards/nas-deployment/docker-compose.yaml
Thomas Hallock c29501f666 fix: create arcade sessions on room join to enable config changes
Fixes "No active session found" error when adjusting game settings
before starting a game in arcade rooms.

**Problem:**
- Sessions were only created on START_GAME move
- SET_CONFIG moves require an active session in setup phase
- Users couldn't adjust settings until after starting game

**Solution:**
- Create session in setup phase when user joins room (if none exists)
- Initialize with room's game config from database
- Allows SET_CONFIG moves before game starts

**Changes:**
- socket-server.ts:72-100 - Auto-create session on join-arcade-session
- RoomMemoryPairsProvider.tsx:4 - Remove unused import
- nas-deployment/docker-compose.yaml:15 - Fix DB volume mount path

**Related:**
- Also fixes database persistence by correcting volume mount from
  ./data:/app/data to ./data:/app/apps/web/data

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-10 13:52:35 -05:00

82 lines
3.3 KiB
YAML

version: "3.8"
services:
# ────────────────────────────────────
# Soroban Abacus Flashcards Web App (apps/web)
# ────────────────────────────────────
soroban-abacus-flashcards:
image: ghcr.io/antialias/soroban-abacus-flashcards:latest
container_name: soroban-abacus-flashcards
restart: unless-stopped
env_file:
- .env
volumes:
- ./public:/app/public
- ./data:/app/apps/web/data
- ./uploads:/app/uploads
labels:
# ── Traefik Routers ───────────────────────────────────
# HTTPS router
- "traefik.enable=true"
- "traefik.http.routers.abaci.rule=Host(`abaci.one`)"
- "traefik.http.routers.abaci.entrypoints=websecure"
- "traefik.http.routers.abaci.tls=true"
- "traefik.http.routers.abaci.tls.certresolver=myresolver"
- "traefik.http.routers.abaci.middlewares=hsts@docker"
# HTTP → HTTPS redirect router
- "traefik.http.routers.abaci-http.rule=Host(`abaci.one`)"
- "traefik.http.routers.abaci-http.entrypoints=web"
- "traefik.http.routers.abaci-http.middlewares=redirect-https@docker"
# ── Abaci service definition
- "traefik.http.services.abaci.loadbalancer.server.port=3000"
# ── Shared middlewares
- "traefik.http.middlewares.redirect-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-https.redirectscheme.permanent=true"
- "traefik.http.middlewares.hsts.headers.stsSeconds=63072000"
- "traefik.http.middlewares.hsts.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.hsts.headers.stsPreload=true"
networks:
- webgateway
# ────────────────────────────────────
# DDNS Updater (Porkbun for abaci.one)
# ────────────────────────────────────
ddns-updater:
image: qmcgaw/ddns-updater:latest
container_name: ddns-updater
volumes:
- ./ddns-data/ddns-config.json:/updater/data/config.json
environment:
- TZ=America/Chicago
ports:
- "8000:8000" # optional web UI
restart: unless-stopped
networks:
- webgateway
# ────────────────────────────────────
# Watchtower (auto-update)
# ────────────────────────────────────
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 300 soroban-abacus-flashcards ddns-updater
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_ROLLING_RESTART=true
networks:
- webgateway
# ──────────────────────────────────────
# Networks & Volumes
# ──────────────────────────────────────
networks:
webgateway:
external: true # same network Traefik lives on