services: frontend: build: context: . dockerfile: Dockerfile_frontend container_name: frontend restart: unless-stopped environment: STREAMLIT_SERVER_PORT: 8501 STREAMLIT_SERVER_ADDRESS: 0.0.0.0 STREAMLIT_BROWSER_GATHER_USAGE_STATS: false PYTHONPATH: /frontend USERS_URL: http://api_users:8090 FEEDER_URL: http://api:8000 ports: - "8501:8501" depends_on: database: condition: service_healthy networks: - feeder_network - users_network volumes: - ./frontend:/frontend command: streamlit run app.py --server.port=8501 --server.address=0.0.0.0 # Base de datos MariaDB database: image: mariadb:10.11 container_name: feeder_db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: YOUR-DB-PASSWORD MYSQL_DATABASE: feeder MYSQL_USER: feeder_user MYSQL_PASSWORD: feeder_password MARIADB_AUTO_UPGRADE: 1 ports: - "3306:3305" volumes: - db_data:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql networks: - feeder_network healthcheck: test: ["CMD", "healthcheck.sh", "--connect"] interval: 10s timeout: 5s retries: 5 start_period: 30s # API Feeder api: build: context: . dockerfile: Dockerfile container_name: feeder_api restart: unless-stopped env_file: - .env.docker environment: # valores explícitos siguen teniendo prioridad DATABASE_URL: mariadb+pymysql://root:YOUR-DB-PASSWORD@database:3306/feeder TELEGRAM_API_ID: YOUR-TELEGRAM-API-ID TELEGRAM_API_HASH: YOUR-TELEGRAM-API-HASH TELEGRAM_TELEPHONE: YOUR-TELEGRAM-PHONE-NUMBER API_URL: http://api:8000 PYTHONPATH: /app SECRET_KEY: YOUR-SECRET-KEY ##Misma que para users ports: - "8000:8000" depends_on: database: condition: service_healthy networks: - feeder_network volumes: - ./app:/app entrypoint: ["/entrypoint.sh"] command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload #Database usuarios database_users: image: mariadb:10.11 container_name: users_db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: YOUR-OTHER-DB-PASSWORD MYSQL_DATABASE: users MYSQL_USER: users MYSQL_PASSWORD: users_password MYSQL_TCP_PORT: 3307 MARIADB_AUTO_UPGRADE: 1 ports: - "3307:3307" volumes: - db_data_users:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql networks: - users_network healthcheck: test: ["CMD", "healthcheck.sh", "--connect"] interval: 10s timeout: 5s retries: 5 start_period: 30s # API Usuarios api_users: build: context: . dockerfile: Dockerfile_users container_name: users_api restart: unless-stopped environment: SECRET_KEY: YOUR-SECRET-KEY ##Misma que para feeder. DATABASE_URL: mariadb+pymysql://root:YOUR-OTHER-DB-PASSWORD@database_users:3307/users API_URL: http://api_users:8090 ADMIN_EMAIL: YOUR-ADMIN-EMAIL ADMIN_PASSWORD: YOUR-ADMIN-PASSWORD FRONT_END_URL: http://frontend:8501 ports: - "8090:8090" depends_on: database_users: condition: service_healthy networks: - users_network volumes: - ./usuarios:/usuarios command: uvicorn main:app --host 0.0.0.0 --port 8090 --reload nginx: image: nginx:latest container_name: nginx_proxy restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/ssl:/etc/nginx/ssl:ro networks: - feeder_network - users_network depends_on: - frontend - api - api_users backup: build: context: /backup_service # directorio con Dockerfile + main.py dockerfile: Dockerfile container_name: tip_backup restart: unless-stopped environment: SECRET_KEY: YOUR-SECRET-KEY # misma que feeder y api_users # URLs completas de las bases de datos (para mysqldump) FEEDER_DATABASE_URL: mariadb+pymysql://root:YOUR-DB-PASSWORD@database:3306/feeder USERS_DATABASE_URL: mariadb+pymysql://root:YOUR-OTHER-DB-PASSWORD@database_users:3307/users # Rutas internas del contenedor (no cambiar salvo que redefinas los volúmenes) PATH_NGINX_CONF: /config/nginx/nginx.conf PATH_DOCKER_COMPOSE: /config/docker-compose.yml PATH_SSL_DIR: /config/ssl PATH_TELEGRAM_SESSIONS: /config/telegram_sessions BACKUP_DIR: /backups ports: - "8099:8099" volumes: # ── Archivos de configuración ────────────────────────────────────────── # nginx.conf real (no el _example) - ./nginx/nginx.conf:/config/nginx/nginx.conf:ro # docker-compose.yml real (no el _example) - ./docker-compose.yml:/config/docker-compose.yml:ro # Certificados SSL - ./nginx/ssl:/config/ssl:ro # Sesiones de Telegram generadas por el feeder - ./app/telegram_sessions:/config/telegram_sessions:ro # Directorio local donde el servicio puede guardar backups históricos (opcional) - ./backups:/backups depends_on: database: condition: service_healthy database_users: condition: service_healthy volumes: db_data: db_data_orquestador: db_data_users: networks: feeder_network: driver: bridge #orquestador_network: # driver: bridge users_network: driver: bridge