diff --git a/README.md b/README.md index 9d771617..8f027273 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ - 🎁 **ΠŸΡ€ΠΎΠΌΠΎ-систСма** - ΠΊΠΎΠ΄Ρ‹ Π½Π° дСньги, Π΄Π½ΠΈ подписки, Ρ‚Ρ€ΠΈΠ°Π»-ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ - 3 Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΠΎΠΊΠ°Π·Π° ссылки подписки: 1) Π‘ Π³Π°ΠΉΠ΄ΠΎΠΌ ΠΏΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ прямо Π² Π±ΠΎΡ‚Π΅(тянущий Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ссылок Π½Π° скачку ΠΈΠ· app-config.json) 2) ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ссылки подписки Π² ΠΌΠΈΠ½ΠΈΠ°ΠΏΠ΅ 3) Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ сабпСйдТа maposia - кастомно ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ссылку ΠΌΠΎΠΆΠ½ΠΎ - Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠ΅ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ фиксированной(ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ шаг Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΡ€ΠΈ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠΈ/настройки подписки ΡŽΠ·Π΅Ρ€Π°) +- Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‚ΡŒ доступныС Π΄Π½ΠΈ для ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ подписки ΠΈ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΄Π»Π΅Π½ΠΈΠΈ ### πŸ’ͺ **Enterprise Π³ΠΎΡ‚ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ** - πŸ—οΈ **БоврСмСнная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°** - AsyncIO, PostgreSQL, Redis @@ -428,7 +429,6 @@ bedolaga_bot/ ``` project/ β”œβ”€β”€ docker-compose.yml # πŸš€ ΠŸΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ -β”œβ”€β”€ docker-compose.local.yml # 🏠 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° β”œβ”€β”€ .env # βš™οΈ ΠšΠΎΠ½Ρ„ΠΈΠ³ └── .env.example # πŸ“ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ``` @@ -439,66 +439,45 @@ project/ πŸ“„ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ docker-compose.yml ```yaml -version: '3.8' - services: - # πŸ—„οΈ PostgreSQL Database postgres: image: postgres:15-alpine - container_name: bedolaga_postgres + container_name: remnawave_bot_db restart: unless-stopped environment: - POSTGRES_DB: ${POSTGRES_DB:-bedolaga_bot} - POSTGRES_USER: ${POSTGRES_USER:-bedolaga_user} + POSTGRES_DB: ${POSTGRES_DB:-remnawave_bot} + POSTGRES_USER: ${POSTGRES_USER:-remnawave_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secure_password_123} - POSTGRES_INITDB_ARGS: "--encoding=UTF8 --lc-collate=C --lc-ctype=C" + POSTGRES_INITDB_ARGS: "--encoding=UTF8" volumes: - postgres_data:/var/lib/postgresql/data - - ./init-scripts:/docker-entrypoint-initdb.d:ro - ports: - - "${POSTGRES_PORT:-5432}:5432" networks: - - bedolaga_network + - bot_network healthcheck: - test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-bedolaga_user} -d ${POSTGRES_DB:-bedolaga_bot}"] - interval: 10s + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-remnawave_user} -d ${POSTGRES_DB:-remnawave_bot}"] + interval: 30s timeout: 5s retries: 5 start_period: 30s - logging: - driver: "json-file" - options: - max-size: "10m" - max-file: "3" - # ⚑ Redis Cache redis: image: redis:7-alpine - container_name: bedolaga_redis + container_name: remnawave_bot_redis restart: unless-stopped - command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-redis_password_123} + command: redis-server --appendonly yes volumes: - redis_data:/data - ports: - - "${REDIS_PORT:-6379}:6379" networks: - - bedolaga_network + - bot_network healthcheck: - test: ["CMD", "redis-cli", "--no-auth-warning", "-a", "${REDIS_PASSWORD:-redis_password_123}", "ping"] - interval: 10s - timeout: 5s + test: ["CMD", "redis-cli", "ping"] + interval: 30s + timeout: 10s retries: 3 - start_period: 10s - logging: - driver: "json-file" - options: - max-size: "5m" - max-file: "3" - # πŸ€– Telegram Bot bot: image: fr1ngg/remnawave-bedolaga-telegram-bot:latest - container_name: bedolaga_bot + container_name: remnawave_bot restart: unless-stopped depends_on: postgres: @@ -508,108 +487,35 @@ services: env_file: - .env environment: - DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-bedolaga_user}:${POSTGRES_PASSWORD:-secure_password_123}@postgres:5432/${POSTGRES_DB:-bedolaga_bot} - REDIS_URL: redis://:${REDIS_PASSWORD:-redis_password_123}@redis:6379/0 - LOG_LEVEL: ${LOG_LEVEL:-INFO} - DEBUG: ${DEBUG:-false} - HEALTH_CHECK_ENABLED: "true" + DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-remnawave_user}:${POSTGRES_PASSWORD:-secure_password_123}@postgres:5432/${POSTGRES_DB:-remnawave_bot} + REDIS_URL: redis://redis:6379/0 volumes: - ./logs:/app/logs - ./data:/app/data - - ./backups:/app/backups - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ports: - - "${WEBHOOK_PORT:-8081}:8081" + - "${TRIBUTE_WEBHOOK_PORT:-8081}:8081" + - "${YOOKASSA_WEBHOOK_PORT:-8082}:8082" networks: - - bedolaga_network + - bot_network healthcheck: - test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:8081/health', timeout=5)"] + test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8081/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s - logging: - driver: "json-file" - options: - max-size: "50m" - max-file: "5" - labels: - - "traefik.enable=true" - - "traefik.http.routers.bedolaga-webhook.rule=Host(`${WEBHOOK_DOMAIN:-localhost}`) && PathPrefix(`/tribute-webhook`)" - - "traefik.http.services.bedolaga-webhook.loadbalancer.server.port=8081" - # πŸ“Š Monitoring (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) - prometheus: - image: prom/prometheus:latest - container_name: bedolaga_prometheus - restart: unless-stopped - command: - - '--config.file=/etc/prometheus/prometheus.yml' - - '--storage.tsdb.path=/prometheus' - - '--web.console.libraries=/etc/prometheus/console_libraries' - - '--web.console.templates=/etc/prometheus/consoles' - - '--storage.tsdb.retention.time=200h' - - '--web.enable-lifecycle' - volumes: - - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml - - prometheus_data:/prometheus - ports: - - "9090:9090" - networks: - - bedolaga_network - profiles: - - monitoring - - # πŸ“ˆ Grafana (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) - grafana: - image: grafana/grafana:latest - container_name: bedolaga_grafana - restart: unless-stopped - environment: - GF_SECURITY_ADMIN_USER: ${GRAFANA_USER:-admin} - GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-admin123} - volumes: - - grafana_data:/var/lib/grafana - - ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards - - ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources - ports: - - "3000:3000" - networks: - - bedolaga_network - profiles: - - monitoring - -# πŸ“¦ Volumes volumes: postgres_data: - driver: local - driver_opts: - type: none - o: bind - device: ./volumes/postgres redis_data: - driver: local - driver_opts: - type: none - o: bind - device: ./volumes/redis - prometheus_data: - driver: local - grafana_data: - driver: local -# 🌐 Networks networks: - bedolaga_network: + bot_network: driver: bridge ipam: - driver: default config: - subnet: 172.20.0.0/16 - gateway: 172.20.0.1 - driver_opts: - com.docker.network.bridge.name: br-bedolaga ``` @@ -620,8 +526,6 @@ networks: πŸ“„ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ dev ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ```yaml -version: '3.8' - services: # πŸ—„οΈ PostgreSQL для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ postgres-dev: