fix: app owns the netns; tailscale joins it as bare tailscaled — sidecar restarts no longer break the site
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BCrwHHnGCB5XH968Nxokqw
This commit is contained in:
@@ -3,47 +3,46 @@
|
|||||||
# Один env на всё: core/.env — его читают и контейнеры (env_file), и сам compose (--env-file) для postgres.
|
# Один env на всё: core/.env — его читают и контейнеры (env_file), и сам compose (--env-file) для postgres.
|
||||||
# Запуск: docker compose --env-file core/.env -f docker-compose.prod.yml up -d --build
|
# Запуск: docker compose --env-file core/.env -f docker-compose.prod.yml up -d --build
|
||||||
#
|
#
|
||||||
# Tailscale — сайдкар: в тейлнете только этот стек (app/scheduler/worker сидят в его netns),
|
# Tailscale — сайдкар в netns приложения: в тейлнете только этот стек, хост и остальные
|
||||||
# хост и остальные сервисы не затронуты. --shields-up: нода ничего не принимает из тейлнета,
|
# сервисы не затронуты. Владелец netns — app (самый стабильный), tailscale/scheduler/worker
|
||||||
# только ходит наружу (в Home Assistant); входящее в hado идёт исключительно через Caddy.
|
# садятся к нему: рестарт tailscale не роняет сайт. Контейнер крутит голый tailscaled,
|
||||||
# Первый запуск без ключа: ссылка на логин — в `docker compose logs tailscale`.
|
# логин — один раз руками: `docker compose exec tailscale tailscale up --shields-up --hostname=hado --accept-dns=false`
|
||||||
|
# (печатает ссылку, ждёт; состояние в volume, дальше поднимается сам).
|
||||||
|
# --shields-up: нода ничего не принимает из тейлнета, только ходит наружу (в Home Assistant).
|
||||||
services:
|
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:
|
tailscale:
|
||||||
image: tailscale/tailscale:stable
|
image: tailscale/tailscale:stable
|
||||||
hostname: hado
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
network_mode: service:app
|
||||||
TS_STATE_DIR: /var/lib/tailscale
|
command: ["tailscaled", "--state=/var/lib/tailscale/tailscaled.state", "--socket=/var/run/tailscale/tailscaled.sock"]
|
||||||
TS_USERSPACE: "false"
|
|
||||||
TS_EXTRA_ARGS: --shields-up
|
|
||||||
volumes:
|
volumes:
|
||||||
- ts_state:/var/lib/tailscale
|
- ts_state:/var/lib/tailscale
|
||||||
devices:
|
devices:
|
||||||
- /dev/net/tun
|
- /dev/net/tun
|
||||||
cap_add:
|
cap_add:
|
||||||
- net_admin
|
- 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:
|
depends_on:
|
||||||
tailscale:
|
app:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
postgres:
|
|
||||||
condition: service_healthy
|
|
||||||
|
|
||||||
scheduler:
|
scheduler:
|
||||||
image: hado-app
|
image: hado-app
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
network_mode: service:tailscale
|
network_mode: service:app
|
||||||
command: ["php", "/var/www/html/artisan", "schedule:work"]
|
command: ["php", "/var/www/html/artisan", "schedule:work"]
|
||||||
healthcheck: { disable: true } # healthcheck образа стучится в nginx, которого тут нет
|
healthcheck: { disable: true } # healthcheck образа стучится в nginx, которого тут нет
|
||||||
env_file: ./core/.env
|
env_file: ./core/.env
|
||||||
@@ -54,7 +53,7 @@ services:
|
|||||||
worker:
|
worker:
|
||||||
image: hado-app
|
image: hado-app
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
network_mode: service:tailscale
|
network_mode: service:app
|
||||||
command: ["php", "/var/www/html/artisan", "queue:work", "--tries=3", "--sleep=1"]
|
command: ["php", "/var/www/html/artisan", "queue:work", "--tries=3", "--sleep=1"]
|
||||||
healthcheck: { disable: true }
|
healthcheck: { disable: true }
|
||||||
env_file: ./core/.env
|
env_file: ./core/.env
|
||||||
|
|||||||
Reference in New Issue
Block a user