pelmeni-shield-vpn/docker-compose.yml

60 lines
1.8 KiB
YAML

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