services: publisher: build: . container_name: vesti-publisher restart: unless-stopped ports: - "127.0.0.1:8410:8410" # только локально (внутри bigbox) env_file: - ../../.env # VESTI_BOT_TOKEN, TG_PROXY, VESTI_BOT_CHANNELS (корень /opt/vesti) environment: - PUBLISHER_PORT=8410 # в контейнере 127.0.0.1 — это сам контейнер; туннель SOCKS5 живёт на хосте - TG_PROXY=socks5://host.docker.internal:1080 extra_hosts: - "host.docker.internal:host-gateway" volumes: # медиа для карточек: веб шлёт media/ (media_path из БД). # Физически файлы лежат в /opt/vesti/media/media/ (вложенный каталог, см. download_media в краулере). # Монтируем именно внутренний каталог, чтобы Path('media/') в контейнере (от WORKDIR /srv/publisher) попал в файл. - ../../media/media:/srv/publisher/media:ro healthcheck: test: ["CMD", "python", "-c", "import urllib.request;urllib.request.urlopen('http://127.0.0.1:8410/healthz',timeout=4)"] interval: 30s timeout: 5s retries: 3 start_period: 10s