services: app: container_name: my-network-app build: context: .. dockerfile: deployment/Dockerfile.simple # при необходимости поменять на deployment/Dockerfile restart: unless-stopped ports: - "8000:8000" env_file: - ../.env environment: - STORAGE_PATH=/app/storage - DOCKER_SOCK_PATH=/var/run/docker.sock - LOG_PATH=/app/logs - NODE_PRIVATE_KEY_PATH=/app/keys/node_private_key - NODE_PUBLIC_KEY_PATH=/app/keys/node_public_key - API_HOST=0.0.0.0 - API_PORT=8000 - UVICORN_HOST=0.0.0.0 - UVICORN_PORT=8000 volumes: - ./uploader-bot/storage:/app/storage - /var/run/docker.sock:/var/run/docker.sock - ./uploader-bot/logs:/app/logs - ./uploader-bot/config/keys:/app/keys # - ./uploader-bot/bootstrap.json:/app/bootstrap.json:ro # раскомментируйте если используете файл и задайте BOOTSTRAP_CONFIG=/app/bootstrap.json command: > /bin/bash -lc ' set -e; mkdir -p /app/keys; if [ ! -f "/app/keys/node_private_key" ]; then echo "[init] Generating ed25519 keys..."; openssl genpkey -algorithm ed25519 -out /app/keys/node_private_key; openssl pkey -in /app/keys/node_private_key -pubout -out /app/keys/node_public_key; chmod 600 /app/keys/node_private_key; chmod 644 /app/keys/node_public_key; else echo "[init] Existing ed25519 keys detected, skipping generation."; fi; if [ -f "/app/keys/node_private_key" ] && [ ! -s "/app/keys/node_public_key.hex" ]; then openssl pkey -in /app/keys/node_private_key -pubout -outform DER | tail -c 32 | xxd -p -c 32 > /app/keys/node_public_key.hex || true; fi; exec uvicorn app.fastapi_main:app --host 0.0.0.0 --port 8000 ' depends_on: postgres: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl -fsS http://localhost:8000/health || exit 1"] interval: 30s timeout: 5s retries: 5 start_period: 20s networks: - my-network postgres: image: postgres:15-alpine container_name: my-network-postgres restart: unless-stopped env_file: - ../.env environment: - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data # - ./uploader-bot/init_db.sql:/docker-entrypoint-initdb.d/001_init.sql:ro - ./uploader-bot/deployment/scripts/init-db-production.sql:/docker-entrypoint-initdb.d/002_init_prod.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-myuser} -d ${POSTGRES_DB:-mynetwork} || exit 1"] interval: 10s timeout: 5s retries: 10 start_period: 20s networks: - my-network redis: image: redis:7-alpine container_name: my-network-redis restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 10 start_period: 10s networks: - my-network volumes: postgres_data: {} redis_data: {} networks: my-network: {}