# Прод на 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 — сайдкар в netns приложения: в тейлнете только этот стек, хост и остальные # сервисы не затронуты. Владелец netns — app (самый стабильный), tailscale/scheduler/worker # садятся к нему: рестарт tailscale не роняет сайт. Контейнер крутит голый tailscaled, # логин — один раз руками: `docker compose exec tailscale tailscale up --shields-up --hostname=hado --accept-dns=false` # (печатает ссылку, ждёт; состояние в volume, дальше поднимается сам). # --shields-up: нода ничего не принимает из тейлнета, только ходит наружу (в Home Assistant). services: app: build: ./core image: hado-app restart: unless-stopped ports: - "127.0.0.1:8091:8080" env_file: ./core/.env environment: # serversideup: миграции и кеши при старте — только здесь, чтобы не гонять их из трёх контейнеров AUTORUN_ENABLED: "true" depends_on: postgres: condition: service_healthy tailscale: image: tailscale/tailscale:stable restart: unless-stopped network_mode: service:app command: ["tailscaled", "--state=/var/lib/tailscale/tailscaled.state", "--socket=/var/run/tailscale/tailscaled.sock"] volumes: - ts_state:/var/lib/tailscale devices: - /dev/net/tun cap_add: - net_admin depends_on: app: condition: service_started scheduler: image: hado-app restart: unless-stopped network_mode: service:app 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:app 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: