# 1 bis 8 Party – Web-Stack auf hocks.eu # Muster: Mieterportal-Stack (/opt/mieterportal + /opt/mp-mail) # TLS + Subdomain liefert der Nginx Proxy Manager (npm_default-Netz). # # Dienste: # onebis8-web nginx, statisches dist/ (Mobile-App), proxiet # POST /api/mail/send → onebis8-mail-api (Token aus app.env) # und /api/game/* → onebis8-api (Multiplayer-Spielräume) # onebis8-api Game-API: Spielräume, Ready-Start, geheime Rankings, # Punkteberechnung (reine Node-Standardbibliothek) # onebis8-mail Postfix-Relay (nur intern im Docker-Netz, kein -p) # onebis8-mail-api schlanke Mail-HTTP-API mit Outbox/Retry (Muster: mp-mail-api) # # Konfiguration: # app.env MAIL_API_TOKEN (Token für den nginx-Proxy, gitignored) # mail/mail.env Relay, Absender, Token (gitignored) services: onebis8-web: build: ./web image: onebis8-web:latest container_name: onebis8-web restart: unless-stopped volumes: - ./web/docker/templates/default.conf.template:/etc/nginx/templates/default.conf.template:ro # dist/ als Laufzeit-Mount: CI ersetzt die Dateien und nginx pickt sie # sofort auf – kein Image-Rebuild noetig (Build im Image bleibt Fallback) - ./web/dist:/usr/share/nginx/html:ro env_file: - app.env depends_on: - onebis8-mail-api - onebis8-api networks: - npm_default # Game-API fuer Multiplayer-Spielräume (jeder Spieler auf seinem Handy) onebis8-api: image: node:22-alpine container_name: onebis8-api restart: unless-stopped environment: PORT: "8080" DATA_DIR: /data command: ["node", "/app/server.js"] volumes: # Verzeichnis-Mount (kein Single-File!): Ersetzen der Datei im CI # wechselt den Inode – Directory-Mounts folgen, File-Mounts nicht. - ./game/api:/app:ro - onebis8-game-data:/data networks: - npm_default # Postfix-Relay (nur intern) onebis8-mail: build: ./mail/postfix image: onebis8-postfix:latest container_name: onebis8-mail restart: unless-stopped env_file: - mail/mail.env expose: - "25" networks: - npm_default # Kleine HTTP-API, über die die Webseite Mails an den Relay übergibt. onebis8-mail-api: image: python:3.12-alpine container_name: onebis8-mail-api restart: unless-stopped env_file: - mail/mail.env environment: RELAY_HOST: onebis8-mail RELAY_PORT: "25" PORT: "8080" ALLOWED_ORIGIN: https://1bis.hocks.eu DATA_DIR: /data command: ["python", "/app/server.py"] volumes: - ./mail/api/server.py:/app/server.py:ro - onebis8-mail-data:/data depends_on: - onebis8-mail networks: - npm_default networks: npm_default: external: true volumes: onebis8-mail-data: onebis8-game-data: