/
/
/
1# ==============================================================================
2# Nginx Proxy Manager Docker Compose Configuration
3# ==============================================================================
4#
5# Description: Docker Compose configuration for Nginx Proxy Manager
6# Generated by Ansible - DO NOT EDIT MANUALLY
7# Template: nginx-proxy-compose.yml.j2
8#
9# ==============================================================================
10
11version: '{{ docker_compose_version }}'
12
13services:
14 # ========================================================================
15 # NGINX PROXY MANAGER
16 # ========================================================================
17 {{ nginx_proxy_service_name }}:
18 image: {{ nginx_proxy_image }}:{{ nginx_proxy_image_tag }}
19 container_name: {{ nginx_proxy_container_name }}
20
21 # Network configuration
22 networks:
23 {{ connectivity_network_name }}:
24 ipv4_address: {{ connectivity_subnet | regex_replace('/24$', '') }}.30
25
26 # Port mapping
27 ports:
28 - "{{ nginx_proxy_admin_port }}:81/tcp" # Admin interface
29 - "{{ nginx_proxy_http_port }}:80/tcp" # HTTP traffic
30 - "{{ nginx_proxy_https_port }}:443/tcp" # HTTPS traffic
31
32 # Environment variables
33 environment:
34 - DB_MYSQL_HOST={{ nginx_proxy_db_container_name }}
35 - DB_MYSQL_PORT=3306
36 - DB_MYSQL_USER={{ nginx_proxy_db_user }}
37 - DB_MYSQL_PASSWORD={{ nginx_proxy_db_password }}
38 - DB_MYSQL_NAME={{ nginx_proxy_db_name }}
39 - DISABLE_IPV6={{ 'true' if not pihole_ipv6_enabled else 'false' }}
40
41 # Volume mounts
42 volumes:
43 - {{ docker_base_path }}/nginx-proxy/data:/data
44 - {{ docker_base_path }}/nginx-proxy/letsencrypt:/etc/letsencrypt
45 - {{ docker_base_path }}/nginx-proxy/logs:/var/log/nginx
46
47 # Restart policy
48 restart: {{ default_restart_policy }}
49
50 # Depends on database
51 depends_on:
52 - {{ nginx_proxy_db_service_name }}
53
54 # Health check
55 healthcheck:
56 test: ["CMD", "curl", "-f", "http://localhost:81"]
57 interval: 30s
58 timeout: 10s
59 retries: 3
60 start_period: 60s
61
62 # Logging configuration
63 logging:
64 driver: {{ log_driver }}
65 options:
66 max-size: {{ log_max_size }}
67 max-file: "{{ log_max_file }}"
68
69 # Labels for monitoring
70 labels:
71 - "com.centurylinklabs.watchtower.enable=true"
72 - "traefik.enable=false"
73
74 # ========================================================================
75 # MARIADB DATABASE
76 # ========================================================================
77 {{ nginx_proxy_db_service_name }}:
78 image: {{ nginx_proxy_db_image }}:{{ nginx_proxy_db_image_tag }}
79 container_name: {{ nginx_proxy_db_container_name }}
80
81 # Network configuration
82 networks:
83 {{ connectivity_network_name }}:
84 ipv4_address: {{ connectivity_subnet | regex_replace('/24$', '') }}.31
85
86 # Environment variables
87 environment:
88 - MYSQL_ROOT_PASSWORD={{ nginx_proxy_db_root_password }}
89 - MYSQL_DATABASE={{ nginx_proxy_db_name }}
90 - MYSQL_USER={{ nginx_proxy_db_user }}
91 - MYSQL_PASSWORD={{ nginx_proxy_db_password }}
92 - MYSQL_CHARSET=utf8mb4
93 - MYSQL_COLLATION=utf8mb4_unicode_ci
94
95 # Volume mounts
96 volumes:
97 - {{ docker_base_path }}/nginx-proxy/mysql:/var/lib/mysql
98
99 # Restart policy
100 restart: {{ database_restart_policy }}
101
102 # Security options
103 security_opt:
104 - no-new-privileges:true
105
106 # Health check
107 healthcheck:
108 test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
109 interval: 30s
110 timeout: 10s
111 retries: 5
112 start_period: 60s
113
114 # Logging configuration
115 logging:
116 driver: {{ log_driver }}
117 options:
118 max-size: {{ log_max_size }}
119 max-file: "{{ log_max_file }}"
120
121 # Resource limits
122 deploy:
123 resources:
124 limits:
125 memory: 256M
126 cpus: '0.5'
127 reservations:
128 memory: 128M
129 cpus: '0.25'
130
131 # ========================================================================
132 # NGINX PROXY HELPER (optional)
133 # ========================================================================
134 nginx-proxy-helper:
135 image: alpine:latest
136 container_name: nginx-proxy-helper
137
138 networks:
139 {{ connectivity_network_name }}:
140
141 volumes:
142 - {{ docker_base_path }}/nginx-proxy/scripts:/scripts
143 - {{ docker_base_path }}/nginx-proxy/data:/data:ro
144
145 command: >
146 sh -c "
147 echo 'Nginx Proxy Helper started' &&
148 while true; do
149 /scripts/nginx-helper.sh &&
150 sleep 300
151 done
152 "
153
154 restart: unless-stopped
155
156 deploy:
157 resources:
158 limits:
159 memory: 32M
160 cpus: '0.1'
161
162networks:
163 {{ connectivity_network_name }}:
164 driver: bridge
165 ipam:
166 config:
167 - subnet: {{ connectivity_subnet }}
168
169# ==============================================================================
170# END OF NGINX PROXY MANAGER DOCKER COMPOSE CONFIGURATION
171# ==============================================================================