name: ROSzetta services: postgres: image: timescale/timescaledb:2.16.1-pg16 restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-ROSzetta} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-ROSzetta} POSTGRES_DB: ${POSTGRES_DB:-ROSzetta} volumes: - pg_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER}"] interval: 5s timeout: 3s retries: 20 redis: image: redis:7-alpine restart: unless-stopped ports: - "6379:6379" minio: image: minio/minio:RELEASE.2024-09-22T00-33-43Z restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minio} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minio12345} volumes: - minio_data:/data ports: - "9000:9000" - "9001:9001" backend: build: context: ../backend restart: unless-stopped depends_on: postgres: condition: service_healthy redis: condition: service_started environment: APP_ENV: dev SECRET_KEY: ${SECRET_KEY:-please-change-this-32-bytes-secret-now} DATABASE_URL: postgresql+psycopg2://${POSTGRES_USER:-ROSzetta}:${POSTGRES_PASSWORD:-ROSzetta}@postgres:5432/${POSTGRES_DB:-ROSzetta} REDIS_URL: redis://redis:6379/0 S3_ENDPOINT: http://minio:9000 S3_ACCESS_KEY: ${MINIO_ROOT_USER:-minio} S3_SECRET_KEY: ${MINIO_ROOT_PASSWORD:-minio12345} S3_BUCKET: roszetta-backups BOOTSTRAP_ADMIN_EMAIL: ${BOOTSTRAP_ADMIN_EMAIL:-admin} BOOTSTRAP_ADMIN_PASSWORD: ${BOOTSTRAP_ADMIN_PASSWORD:-admin} CORS_ORIGINS: "http://localhost:5173,http://127.0.0.1:5173" # Push-доставка бэкапов (FTP-сервер контроллера) BACKUP_FTP_HOST: "0.0.0.0" BACKUP_FTP_PORT: "2121" BACKUP_PUSH_HOST: ${BACKUP_PUSH_HOST:-} ports: - "8000:8000" - "2121:2121" - "30000-30049:30000-30049" frontend: build: context: ../frontend restart: unless-stopped depends_on: - backend environment: VITE_API_URL: http://backend:8000 CHOKIDAR_USEPOLLING: "true" ports: - "80:5173" # Bind-mount исходников хоста в контейнер, чтобы Vite HMR подхватывал правки # без пересборки образа. Анонимный volume на node_modules защищает их от # перекрытия (внутри образа они уже установлены). volumes: - ../frontend:/app - /app/node_modules volumes: pg_data: minio_data: