Files
BarevClub/infra/prod/docker-compose.yml
2026-10-25 22:55:29 +04:00

106 lines
2.8 KiB
YAML

# Barev Club — продакшен на общем VPS.
# Наружу смотрит только barev-web (в сети proxy Nginx Proxy Manager), остальное — во внутренней сети.
name: barev
x-env: &env
env_file: .env
services:
barev-db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: barev
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: barev
TZ: Asia/Yerevan
volumes: [db:/var/lib/postgresql/data]
networks: [internal]
mem_limit: 256m
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U barev']
interval: 10s
retries: 10
barev-redis:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --save 60 1 --maxmemory 64mb --maxmemory-policy noeviction
volumes: [redis:/data]
networks: [internal]
mem_limit: 96m
# S3-совместимое хранилище для фотоотчётов и сканов (приватный бакет)
barev-s3:
image: chrislusf/seaweedfs:latest
restart: unless-stopped
command: server -dir=/data -s3 -s3.port=9000 -s3.config=/etc/seaweed/s3.json -master.volumeSizeLimitMB=64 -volume.max=10
volumes:
- s3:/data
- ./seaweed-s3.json:/etc/seaweed/s3.json:ro
# ключ шифрования SSE-S3 (s3.sse.kek): файлы шифруются при записи
- ./security.toml:/etc/seaweedfs/security.toml:ro
networks: [internal]
mem_limit: 192m
# API + воркер + оба бота
barev-app:
image: barev-app:latest
<<: *env
restart: unless-stopped
depends_on:
barev-db: { condition: service_healthy }
barev-redis: { condition: service_started }
barev-s3: { condition: service_started }
networks: [internal]
mem_limit: 512m
barev-landing:
image: barev-app:latest
<<: *env
restart: unless-stopped
working_dir: /landing
command: ['node', 'apps/landing/server.js']
environment:
PORT: '3000'
HOSTNAME: 0.0.0.0
networks: [internal]
mem_limit: 192m
barev-web:
image: barev-web:latest
restart: unless-stopped
depends_on: [barev-app, barev-landing]
networks: [internal, proxy]
mem_limit: 64m
# ежедневный бэкап БД, хранится 14 дней
barev-backup:
image: postgres:16-alpine
restart: unless-stopped
environment:
PGPASSWORD: ${DB_PASSWORD}
volumes: [backups:/backups]
networks: [internal]
mem_limit: 64m
entrypoint:
- sh
- -c
- |
while true; do
pg_dump -h barev-db -U barev -Fc barev > /backups/barev-$$(date +%F).dump && echo "backup ok"
find /backups -name '*.dump' -mtime +14 -delete
sleep 86400
done
networks:
internal: {}
proxy:
external: true
volumes:
db: {}
redis: {}
s3: {}
backups: {}