79 lines
2.2 KiB
YAML
79 lines
2.2 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. JPCHX Web App & Forum (Python Flask + SQLite)
|
|
jpchx-app:
|
|
build:
|
|
context: ./site
|
|
dockerfile: Dockerfile
|
|
container_name: jpchx-app
|
|
restart: always
|
|
volumes:
|
|
- ./site/data:/app/data
|
|
networks:
|
|
- shield_net
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# 3. 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
|
|
- ./site/static:/usr/share/nginx/html/static:ro
|
|
- ./certbot/www:/var/www/certbot:ro
|
|
- ./certbot/certs:/etc/letsencrypt:ro
|
|
networks:
|
|
- shield_net
|
|
depends_on:
|
|
- 3x-ui
|
|
- jpchx-app
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# 4. 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
|