diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 3558b5f..4fa5ddf 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -3,47 +3,46 @@ # Один 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`. +# 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 - hostname: hado restart: unless-stopped - environment: - TS_STATE_DIR: /var/lib/tailscale - TS_USERSPACE: "false" - TS_EXTRA_ARGS: --shields-up + 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 - 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: + app: condition: service_started - postgres: - condition: service_healthy scheduler: image: hado-app restart: unless-stopped - network_mode: service:tailscale + network_mode: service:app command: ["php", "/var/www/html/artisan", "schedule:work"] healthcheck: { disable: true } # healthcheck образа стучится в nginx, которого тут нет env_file: ./core/.env @@ -54,7 +53,7 @@ services: worker: image: hado-app restart: unless-stopped - network_mode: service:tailscale + network_mode: service:app command: ["php", "/var/www/html/artisan", "queue:work", "--tries=3", "--sleep=1"] healthcheck: { disable: true } env_file: ./core/.env