# Прод на ishiki: hado живёт рядом с прокси sekai, порт только на loopback — # Caddy (network_mode: host) ходит в 127.0.0.1:8091, наружу порт закрыт (см. deploy/Caddyfile.snippet). # Один env на всё: core/.env — его читают и контейнеры (env_file), и сам compose (--env-file) для postgres. # Запуск: docker compose --env-file core/.env -f docker-compose.prod.yml up -d --build # # Tailscale — сайдкар: в тейлнете только этот стек (app/scheduler/worker сидят в его netns), # хост и остальные сервисы не затронуты. --shields-up: нода ничего не принимает из тейлнета, # только ходит наружу (в Home Assistant); входящее в hado идёт исключительно через Caddy. # Первый запуск без ключа: ссылка на логин — в `docker compose logs tailscale`. services: tailscale: image: tailscale/tailscale:stable hostname: hado restart: unless-stopped environment: TS_STATE_DIR: /var/lib/tailscale TS_USERSPACE: "false" TS_EXTRA_ARGS: --shields-up volumes: - ts_state:/var/lib/tailscale devices: - /dev/net/tun cap_add: - net_admin ports: - "127.0.0.1:8091:8080" # порт app: netns общий, публикует его владелец netns app: build: ./core image: hado-app restart: unless-stopped network_mode: service:tailscale env_file: ./core/.env environment: # serversideup: миграции и кеши при старте — только здесь, чтобы не гонять их из трёх контейнеров AUTORUN_ENABLED: "true" depends_on: tailscale: condition: service_started postgres: condition: service_healthy scheduler: image: hado-app restart: unless-stopped network_mode: service:tailscale command: ["php", "/var/www/html/artisan", "schedule:work"] healthcheck: { disable: true } # healthcheck образа стучится в nginx, которого тут нет env_file: ./core/.env depends_on: app: condition: service_healthy worker: image: hado-app restart: unless-stopped network_mode: service:tailscale command: ["php", "/var/www/html/artisan", "queue:work", "--tries=3", "--sleep=1"] healthcheck: { disable: true } env_file: ./core/.env depends_on: app: condition: service_healthy postgres: image: postgres:17 restart: unless-stopped environment: POSTGRES_DB: ${DB_DATABASE:-hado} POSTGRES_USER: ${DB_USERNAME:-hado} POSTGRES_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD in .env next to this file} volumes: - pg_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME:-hado} -d ${DB_DATABASE:-hado}"] interval: 5s timeout: 3s retries: 10 volumes: pg_data: ts_state: