version: '3.8' services: postgres: image: postgres:15-alpine container_name: my-postgres restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-my_network} POSTGRES_USER: ${POSTGRES_USER:-my_network_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mynetwork_secure_pass_2024} POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C" volumes: - postgres_data:/var/lib/postgresql/data ports: - "5434:5432" networks: - my_network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-my_network_user} -d ${POSTGRES_DB:-my_network}"] interval: 10s timeout: 5s retries: 5 start_period: 30s redis: image: redis:7-alpine container_name: my-redis restart: unless-stopped command: > redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru volumes: - redis_data:/data ports: - "6380:6379" networks: - my_network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 5 start_period: 10s app: build: context: .. dockerfile: deployment/Dockerfile.simple container_name: my-uploader-app command: python start_my_network.py restart: unless-stopped depends_on: postgres: condition: service_healthy redis: condition: service_healthy environment: # Database with correct asyncpg driver DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-my_network_user}:${POSTGRES_PASSWORD:-mynetwork_secure_pass_2024}@postgres:5432/${POSTGRES_DB:-my_network} POSTGRES_HOST: postgres POSTGRES_PORT: 5432 POSTGRES_DB: ${POSTGRES_DB:-my_network} POSTGRES_USER: ${POSTGRES_USER:-my_network_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-mynetwork_secure_pass_2024} # Redis REDIS_URL: redis://redis:6379/0 REDIS_HOST: redis REDIS_PORT: 6379 # Application DEBUG: ${DEBUG:-true} LOG_LEVEL: ${LOG_LEVEL:-INFO} SECRET_KEY: ${SECRET_KEY:-my_network_secret_key_super_secure_2024_production} JWT_SECRET: ${JWT_SECRET_KEY:-jwt_secret_key_for_my_network_tokens_2024} ENCRYPTION_KEY: ${ENCRYPTION_KEY:-encryption_key_for_my_network_data_security_2024} # MY Network MY_NETWORK_NODE_ID: ${MY_NETWORK_NODE_ID:-node_001_local_dev} MY_NETWORK_PORT: ${MY_NETWORK_PORT:-15100} MY_NETWORK_HOST: ${MY_NETWORK_HOST:-0.0.0.0} MY_NETWORK_DOMAIN: ${MY_NETWORK_DOMAIN:-localhost:15100} # Telegram (dummy values) TELEGRAM_API_KEY: ${TELEGRAM_API_KEY:-1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijk} CLIENT_TELEGRAM_API_KEY: ${CLIENT_TELEGRAM_API_KEY:-1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijk} ports: - "15100:15100" volumes: - app_data:/app/data - app_logs:/app/logs networks: - my_network healthcheck: test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:15100/health')"] interval: 30s timeout: 10s retries: 3 start_period: 60s grafana: image: grafana/grafana:latest container_name: my-grafana restart: unless-stopped environment: GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-admin_grafana_pass_2024} GF_USERS_ALLOW_SIGN_UP: false volumes: - grafana_data:/var/lib/grafana ports: - "3001:3000" networks: - my_network volumes: postgres_data: driver: local redis_data: driver: local app_data: driver: local app_logs: driver: local grafana_data: driver: local networks: my_network: external: true name: deployment_uploader_network