Files
CRM-LeadRadar/deploy/docker-compose.prod.yml
yuriandClaude Opus 5.5 9749da5ae7 Lead Radar: исходный код
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 23:11:04 +04:00

93 lines
3.0 KiB
YAML

# Боевой стенд на VPS. Запускается скриптом ../deploy.sh; настройки — в /opt/leadradar/.env.
name: leadradar
services:
postgres:
image: postgres:16-alpine
container_name: leadradar-db
restart: unless-stopped
environment:
POSTGRES_USER: leadradar
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?задайте POSTGRES_PASSWORD}
POSTGRES_DB: leadradar
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U leadradar -d leadradar']
interval: 5s
timeout: 3s
retries: 30
networks: [internal]
api:
build: { context: .., dockerfile: deploy/Dockerfile, target: api }
container_name: leadradar-api
restart: unless-stopped
depends_on:
postgres: { condition: service_healthy }
environment:
DATABASE_URL: postgres://leadradar:${POSTGRES_PASSWORD}@postgres:5432/leadradar
API_PORT: 3100
APP_URL: ${APP_URL:?задайте APP_URL}
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:-}
TELEGRAM_BOT_USERNAME: ${TELEGRAM_BOT_USERNAME:-}
CLIENT_BOT_TOKEN: ${CLIENT_BOT_TOKEN:-}
CLIENT_BOT_USERNAME: ${CLIENT_BOT_USERNAME:-}
CROP_TOP_PERCENT: ${CROP_TOP_PERCENT:-8}
MEDIA_DIR: /app/data/media
OPENROUTER_API_KEY: ${OPENROUTER_API_KEY:-}
OPENROUTER_MODEL: ${OPENROUTER_MODEL:-}
LISTING_SOURCE: ${LISTING_SOURCE:-listam}
JINA_API_KEY: ${JINA_API_KEY:-}
volumes:
- media:/app/data/media
networks: [internal]
web:
build: { context: .., dockerfile: deploy/Dockerfile, target: web }
container_name: leadradar-web
restart: unless-stopped
depends_on: [api]
ports:
- '${WEB_PORT:-127.0.0.1:8090}:80'
networks: [internal, npm]
# Ежедневная резервная копия базы (ТЗ, раздел 9): хранится 14 последних.
backup:
image: postgres:16-alpine
container_name: leadradar-backup
restart: unless-stopped
depends_on:
postgres: { condition: service_healthy }
environment:
PGPASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ${BACKUP_DIR:-../../backups}:/backups
entrypoint:
- sh
- -c
- |
set -o pipefail
sleep 120
while true; do
f=/backups/leadradar-$$(date +%Y-%m-%d).sql.gz
if [ ! -s "$$f" ]; then
pg_dump -h postgres -U leadradar leadradar | gzip > "$$f.tmp" && mv "$$f.tmp" "$$f" && echo "копия: $$f"
ls -1t /backups/leadradar-*.sql.gz | tail -n +15 | xargs -r rm --
fi
sleep 3600
done
networks: [internal]
volumes:
pgdata:
# Обрезанные фото для страниц клиентов: можно удалить — соберутся заново.
media:
networks:
internal:
# Сеть Nginx Proxy Manager: через неё NPM видит контейнер leadradar-web.
npm:
external: true
name: ${NPM_NETWORK:-proxy}