Add a second public site to the same process: a 5x5 card of the 25 largest Russian datacenters where a cell is crossed out once an incident with a public source is recorded (Yandex Sasovo and Kaluga drone strikes on 2026-10-08/09 are seeded). config.ru dispatches by Host, so it rides the existing container, DB and bucket instead of a new deploy. The card is localized ru/en/uk with per-locale columns falling back to ru. Content is managed from /admin/bingo on asxp.io, reusing AdminAuth and CSRF. Photos go to the existing bucket under bingo/ and are proxied by the app, so the bucket stays private and storage needs no change. The seed data was fact-checked against operator sites and press on 2026-10-10; several entries in the original list were wrong or vague. Assisted-by: Claude:opus-5
33 lines
1.2 KiB
YAML
33 lines
1.2 KiB
YAML
services:
|
|
asxpio:
|
|
# Image will be dynamically updated during deployment
|
|
# Format: registry.example.com/user/asxpio:sha_tag
|
|
build: .
|
|
image: asxpio:latest
|
|
container_name: asxpio
|
|
restart: unless-stopped
|
|
env_file: .env
|
|
networks:
|
|
- traefik
|
|
- storage
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.asxpio.rule=Host(`asxp.io`) || Host(`www.asxp.io`)"
|
|
- "traefik.http.routers.asxpio.entrypoints=websecure"
|
|
- "traefik.http.routers.asxpio.tls=true"
|
|
- "traefik.http.routers.asxpio.tls.certresolver=letsencrypt"
|
|
- "traefik.http.routers.asxpio.service=asxpio"
|
|
- "traefik.http.services.asxpio.loadbalancer.server.port=3000"
|
|
# Datacenter bingo: same container, routed by Host in config.ru.
|
|
# BINGO_HOST is interpolated from /opt/asxpio/.env (written by deploy).
|
|
- "traefik.http.routers.asxpio-bingo.rule=Host(`${BINGO_HOST}`)"
|
|
- "traefik.http.routers.asxpio-bingo.entrypoints=websecure"
|
|
- "traefik.http.routers.asxpio-bingo.tls=true"
|
|
- "traefik.http.routers.asxpio-bingo.tls.certresolver=letsencrypt"
|
|
- "traefik.http.routers.asxpio-bingo.service=asxpio"
|
|
|
|
networks:
|
|
traefik:
|
|
external: true
|
|
storage:
|
|
external: true
|