docker-compose.modular.yml 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. # ============================================
  2. # V2Ray + Nginx + Cloudflare - Modular Setup
  3. # ============================================
  4. # All configuration is read from the root .env file
  5. # This is a multi-protocol setup supporting VLESS-WS, VLESS-gRPC, and VMess-WS
  6. # ============================================
  7. # Shared network for all services
  8. networks:
  9. v2ray-network:
  10. driver: bridge
  11. # Shared volumes
  12. volumes:
  13. nginx-certs:
  14. driver: local
  15. nginx-html:
  16. driver: local
  17. acme-data:
  18. driver: local
  19. services:
  20. # ============================================
  21. # NGINX Service - Reverse Proxy
  22. # ============================================
  23. nginx:
  24. image: nginx:${NGINX_VERSION:-1.22}
  25. container_name: ${NGINX_CONTAINER_NAME:-nginx}
  26. restart: ${RESTART_POLICY:-always}
  27. ports:
  28. - "${HTTP_PORT:-80}:80"
  29. - "${HTTPS_PORT:-443}:443"
  30. volumes:
  31. - /var/run/docker.sock:/tmp/docker.sock:ro
  32. - ./configs:/etc/nginx/conf.d
  33. - nginx-certs:/etc/nginx/certs
  34. - ./vhost:/etc/nginx/vhost.d
  35. - nginx-html:/usr/share/nginx/html
  36. - ./logs/nginx:/var/log/nginx
  37. networks:
  38. - v2ray-network
  39. labels:
  40. com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
  41. healthcheck:
  42. test: ["CMD", "nginx", "-t"]
  43. interval: 30s
  44. timeout: 10s
  45. retries: 3
  46. # ============================================
  47. # Docker-Gen Service - Auto Config Generator
  48. # ============================================
  49. dockergen:
  50. image: jwilder/docker-gen:${DOCKER_GEN_VERSION:-0.9}
  51. container_name: ${DOCKERGEN_CONTAINER_NAME:-dockergen}
  52. restart: ${RESTART_POLICY:-always}
  53. command: >-
  54. -notify-sighup ${NGINX_CONTAINER_NAME:-nginx} -watch
  55. ${TEMPLATE_PATH:-/etc/docker-gen/templates/nginx.tmpl}
  56. ${OUTPUT_PATH:-/etc/nginx/conf.d/default.conf}
  57. volumes:
  58. - /var/run/docker.sock:/tmp/docker.sock:ro
  59. - ./configs/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl
  60. - ./configs:/etc/nginx/conf.d
  61. - nginx-certs:/etc/nginx/certs
  62. - ./vhost:/etc/nginx/vhost.d
  63. - nginx-html:/usr/share/nginx/html
  64. - ./logs/docker-gen:/var/log/docker-gen
  65. networks:
  66. - v2ray-network
  67. depends_on:
  68. - nginx
  69. labels:
  70. com.github.jrcs.letsencrypt_nginx_proxy_companion.docker_gen: "true"
  71. # ============================================
  72. # ACME Companion - SSL Certificate Manager
  73. # ============================================
  74. nginx-proxy-acme:
  75. image: nginxproxy/acme-companion:${ACME_VERSION:-2.2}
  76. container_name: ${ACME_CONTAINER_NAME:-nginx-proxy-acme}
  77. restart: ${RESTART_POLICY:-always}
  78. volumes:
  79. - /var/run/docker.sock:/var/run/docker.sock:ro
  80. - acme-data:/etc/acme.sh
  81. - ./configs:/etc/nginx/conf.d
  82. - nginx-certs:/etc/nginx/certs
  83. - ./vhost:/etc/nginx/vhost.d
  84. - nginx-html:/usr/share/nginx/html
  85. - ./logs/acme:/var/log/acme
  86. environment:
  87. - DEFAULT_EMAIL=${LETSENCRYPT_EMAIL:[email protected]}
  88. - NGINX_PROXY_CONTAINER=${NGINX_CONTAINER_NAME:-nginx}
  89. - NGINX_DOCKER_GEN_CONTAINER=${DOCKERGEN_CONTAINER_NAME:-dockergen}
  90. - ACME_CA_URI=${ACME_CA_URI:-https://acme-v02.api.letsencrypt.org/directory}
  91. - DEBUG=${DEBUG:-0}
  92. networks:
  93. - v2ray-network
  94. depends_on:
  95. - nginx
  96. - dockergen
  97. # ============================================
  98. # V2Ray Service - Multi-Protocol Proxy Server
  99. # ============================================
  100. v2ray:
  101. image: v2fly/v2fly-core:${V2RAY_VERSION:-v4.45.2}
  102. container_name: ${V2RAY_CONTAINER_NAME:-v2ray}
  103. restart: ${RESTART_POLICY:-always}
  104. environment:
  105. # V2Ray AEAD setting
  106. - v2ray.vmess.aead.forced=${V2RAY_VMESS_AEAD_FORCED:-false}
  107. # nginx-proxy configuration - VIRTUAL_HOST is the key for routing
  108. - VIRTUAL_HOST=${DOMAIN:-your-domain.com}
  109. - LETSENCRYPT_HOST=${DOMAIN:-your-domain.com}
  110. - LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL:[email protected]}
  111. # Use VLESS WS port as the default VIRTUAL_PORT
  112. - VIRTUAL_PORT=${VLESS_WS_PORT:-1310}
  113. volumes:
  114. - ./v2ray/config:/etc/v2ray:ro
  115. - ./logs/v2ray:/var/log/v2ray
  116. networks:
  117. - v2ray-network
  118. depends_on:
  119. - nginx