|
1 | 1 | # Traefik Reverse Proxy Setup for docker-mailserver |
2 | 2 | # This compose file extends the main docker-compose.yml and adds Traefik as reverse proxy |
| 3 | +# Copy the file to docker-compose.override.yml in the root folder of the project. |
| 4 | +# It'll be automatically picked up by the `bin/production.sh` wrapper script. |
| 5 | + |
3 | 6 | services: |
4 | 7 | # Include all services from main docker-compose.yml |
5 | | - ssl: |
6 | | - extends: |
7 | | - file: ../../../../docker-compose.yml |
8 | | - service: ssl |
9 | | - db: |
10 | | - extends: |
11 | | - file: ../../../../docker-compose.yml |
12 | | - service: db |
13 | | - redis: |
14 | | - extends: |
15 | | - file: ../../../../docker-compose.yml |
16 | | - service: redis |
17 | | - unbound: |
18 | | - extends: |
19 | | - file: ../../../../docker-compose.yml |
20 | | - service: unbound |
21 | | - filter: |
22 | | - extends: |
23 | | - file: ../../../../docker-compose.yml |
24 | | - service: filter |
25 | | - fetchmail: |
26 | | - extends: |
27 | | - file: ../../../../docker-compose.yml |
28 | | - service: fetchmail |
29 | 8 | # Traefik reverse proxy |
30 | 9 | traefik: |
31 | | - image: traefik:v3.0 |
32 | | - container_name: traefik |
| 10 | + image: traefik |
33 | 11 | restart: unless-stopped |
34 | 12 | command: |
35 | | - # API and dashboard |
36 | | - - --api.dashboard=false |
37 | | - - --api.insecure=false |
38 | 13 | # Entry points |
39 | 14 | - --entrypoints.web.address=:80 |
40 | 15 | - --entrypoints.websecure.address=:443 |
41 | 16 | # Let's Encrypt configuration |
42 | | - - --certificatesresolvers.letsencrypt.acme.tlschallenge=true |
43 | | - |
44 | | - - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json |
| 17 | + # - --certificatesresolvers.letsencrypt.acme.tlschallenge=true |
| 18 | + |
| 19 | + # - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json |
45 | 20 | # Docker provider |
46 | 21 | - --providers.docker=true |
47 | 22 | - --providers.docker.exposedbydefault=false |
48 | 23 | # Logging |
49 | | - - --log.level=INFO |
50 | | - - --accesslog=true |
51 | | - # Security headers |
52 | | - - --entrypoints.web.http.redirections.entrypoint.to=websecure |
53 | | - - --entrypoints.web.http.redirections.entrypoint.scheme=https |
54 | | - - --entrypoints.web.http.redirections.entrypoint.permanent=true |
| 24 | + - --log.level=DEBUG |
55 | 25 | ports: |
56 | 26 | - "80:80" |
57 | 27 | - "443:443" |
58 | 28 | volumes: |
59 | 29 | - /var/run/docker.sock:/var/run/docker.sock:ro |
60 | 30 | - traefik-letsencrypt:/letsencrypt |
61 | | - networks: |
62 | | - - default |
63 | | - - traefik |
64 | | - labels: |
65 | | - # Enable Traefik for itself (dashboard) |
66 | | - - traefik.enable=true |
67 | 31 | # Override web service to add Traefik labels |
68 | 32 | web: |
69 | | - extends: |
70 | | - file: ../../../../docker-compose.yml |
71 | | - service: web |
| 33 | + ports: [] |
72 | 34 | labels: |
73 | 35 | # Enable Traefik for web service |
74 | 36 | - traefik.enable=true |
75 | 37 | # HTTP router (redirects to HTTPS) |
76 | 38 | - traefik.http.routers.mail-web-http.rule=Host(`mail.example.org`) |
77 | 39 | - traefik.http.routers.mail-web-http.entrypoints=web |
78 | | - - traefik.http.routers.mail-web-http.middlewares=redirect-to-https |
79 | | - # HTTPS router |
80 | | - - traefik.http.routers.mail-web.rule=Host(`mail.example.org`) |
81 | | - - traefik.http.routers.mail-web.entrypoints=websecure |
82 | | - - traefik.http.routers.mail-web.tls.certresolver=letsencrypt |
| 40 | + - traefik.http.routers.mail-web-http.service=mail-web |
| 41 | + # # HTTPS router |
| 42 | + # - traefik.http.routers.mail-web.rule=Host(`mail.example.org`) |
| 43 | + # - traefik.http.routers.mail-web.entrypoints=websecure |
| 44 | + # - traefik.http.routers.mail-web-http.service=mail-web |
| 45 | + # - traefik.http.routers.mail-web.tls.certresolver=letsencrypt |
83 | 46 | # Service configuration |
84 | | - - traefik.http.services.mail-web.loadbalancer.server.port=80 |
85 | | - networks: |
86 | | - - default |
87 | | - - traefik |
88 | | - # Override MTA service to expose ports for direct SMTP access |
89 | | - mta: |
90 | | - extends: |
91 | | - file: ../../../../docker-compose.yml |
92 | | - service: mta |
93 | | - ports: |
94 | | - - "25:25" # SMTP |
95 | | - - "587:587" # SMTP submission |
96 | | - networks: |
97 | | - - default |
98 | | - # Override MDA service to expose ports for direct IMAP access |
99 | | - mda: |
100 | | - extends: |
101 | | - file: ../../../../docker-compose.yml |
102 | | - service: mda |
103 | | - ports: |
104 | | - - "143:143" # IMAP |
105 | | - - "993:993" # IMAPS |
106 | | - networks: |
107 | | - - default |
108 | | -# Define networks |
109 | | -networks: |
110 | | - traefik: |
111 | | - external: false |
112 | | -# Define volumes |
| 47 | + - traefik.http.services.mail-web.loadbalancer.server.port=8080 |
| 48 | + |
113 | 49 | volumes: |
114 | 50 | traefik-letsencrypt: |
115 | | - external: false |
116 | | - # Inherit volumes from main docker-compose.yml |
117 | | - data-db: |
118 | | - data-mail: |
119 | | - data-tls: |
120 | | - data-filter: |
121 | | - data-redis: |
0 commit comments