version: "3.8" services: # 1. 3X-UI: Xray-core движок + скрытая веб-панель 3x-ui: image: ghcr.io/mhsanaei/3x-ui:latest container_name: 3x-ui-shield restart: always environment: - XRAY_VMESS_AEAD_FORCED=false volumes: - ./3x-ui:/etc/x-ui/ - ./certbot/certs:/root/cert/ ports: - "443:443" # Xray VLESS (единственный открытый защищенный порт) - "127.0.0.1:2053:2053" # Панель 3X-UI СТРОГО на localhost (доступ через SSH-туннель!) networks: - shield_net logging: driver: "json-file" options: max-size: "10m" max-file: "3" # 2. Nginx Decoy: сайт клуба любителей пельменей + скрытый шлюз подписок nginx-decoy: image: nginx:alpine container_name: nginx-decoy restart: always ports: - "80:80" # HTTP для ACME certbot и редиректа на HTTPS volumes: - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/site:/usr/share/nginx/html:ro - ./certbot/www:/var/www/certbot:ro networks: - shield_net depends_on: - 3x-ui logging: driver: "json-file" options: max-size: "10m" max-file: "3" # 3. Certbot: автоматический выпуск и продление SSL Let's Encrypt certbot: image: certbot/certbot:latest container_name: certbot-ssl volumes: - ./certbot/certs:/etc/letsencrypt/ - ./certbot/www:/var/www/certbot/ entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12d & wait $${!}; done;'" networks: - shield_net networks: shield_net: name: shield_net driver: bridge