services: xui: # 3x-ui для тестирования api. Панель: http://127.0.0.1:2053 (по умолчанию admin/admin) image: docker.local/ghcr.io/mhsanaei/3x-ui:latest environment: XRAY_VMESS_AEAD_FORCED: "false" XUI_ENABLE_FAIL2BAN: "false" ports: - "127.0.0.1:2053:2053" volumes: - ./docker-services-data/xui/db/:/etc/x-ui/ - ./docker-services-data/xui/cert/:/root/cert/ telegram: image: docker.local/aiogram/telegram-bot-api:10.3 environment: TELEGRAM_API_ID: $TG_APP_ID TELEGRAM_API_HASH: $TG_APP_HASH # --local: webhook на http и любой порт, в том числе на сайт на хосте TELEGRAM_LOCAL: "1" volumes: - telegram-bot-api-data:/var/lib/telegram-bot-api network_mode: host # ports: # - "127.0.0.1:8081:8081" # - "127.0.0.1:8082:8082" redis: image: docker.local/redis:8.8.3-alpine ports: - "127.0.0.1:6379:6379" volumes: - redis_data:/data rabbitmq: image: docker.local/rabbitmq:4.3.6-management-alpine # Данные лежат в mnesia/rabbit@, поэтому hostname и cookie фиксируем, # чтобы при переносе volume новый контейнер смог их прочитать hostname: $RABBITMQ_HOST environment: RABBITMQ_NODENAME: rabbit@$RABBITMQ_HOST RABBITMQ_ERLANG_COOKIE: $RABBITMQ_ERLANG_COOKIE RABBITMQ_DEFAULT_VHOST: $RABBITMQ_VHOST # guest пускают только с localhost контейнера, поэтому свой пользователь RABBITMQ_DEFAULT_USER: $RABBITMQ_USER RABBITMQ_DEFAULT_PASS: $RABBITMQ_PASSWORD ports: - "127.0.0.1:5672:5672" - "127.0.0.1:15672:15672" volumes: - rabbitmq_data:/var/lib/rabbitmq postgres: image: docker.local/postgres:16.15-alpine3.23 environment: POSTGRES_DB: $DB_NAME POSTGRES_USER: $DB_USER POSTGRES_PASSWORD: $DB_PASSWD ports: - "127.0.0.1:5432:5432" volumes: - postgres_data:/var/lib/postgresql/data # приложение: docker compose --profile app up -d --build. Без профиля поднимается только инфраструктура для разработки migrate: <<: &app build: . image: mypointvpn:latest profiles: [ app ] env_file: .env # адреса сервисов внутри сети compose поверх .env, который настроен на разработку с хоста environment: DJANGO_SETTINGS_MODULE: MyPointVPN.settings.docker DB_HOST: postgres DB_PORT: "5432" RABBITMQ_ADDRESS: rabbitmq:5672 TELEGRAM_API_URL: http://telegram:8081 # Bot API сервер ходит на webhook по имени сервиса сайта, домен не нужен TELEGRAM_WEBHOOK_URL: http://web:8000 ALLOWED_HOSTS: web,127.0.0.1,localhost volumes: # свой CA (SERVERUS_CERTIFICATES=local) и бэкапы - на хосте - ./extra/serverus/ca:/app/extra/serverus/ca - ./extra/backups:/app/extra/backups command: python manage.py migrate --noinput depends_on: [ postgres ] web: <<: *app # админка только с хоста: ssh -L 8000:127.0.0.1:8000 сервер ports: - "127.0.0.1:8000:8000" restart: unless-stopped depends_on: migrate: condition: service_completed_successfully rabbitmq: condition: service_started telegram: condition: service_started worker: <<: *app # check_points заново запускает ежедневные проверки точек: цепочки переживают потерю очереди command: sh -c "python manage.py check_points && exec python manage.py rundramatiq --processes 1 --threads 8" restart: unless-stopped # установка может идти до часа: даем задачам закончиться, иначе супервизор снимет их как прерванные stop_grace_period: 5m depends_on: migrate: condition: service_completed_successfully rabbitmq: condition: service_started volumes: telegram-bot-api-data: redis_data: rabbitmq_data: postgres_data: