Compare commits

..

13 Commits

Author SHA1 Message Date
mirsal ce1c863b3a compose: Switch to host-mode port publishing by default
continuous-integration/drone/pr Build is failing
By default, swarm services use ingress mode port publishing, which is
not ideal for traefik (it breaks IPv6 ingress and there is no need to
load-balance traffic between multiple traefik instances or to route it
from multiple swarm nodes)

This commit switches traefik's port publishing mode to `host` for all of
its exposed ports as well as:

 * change traefik's update order to stop-first (there cannot be multiple
   containers exposing the same port when using host-mode publishing)
 * use `endpoint_mode: dnsrr` instead of the default `vip`
 * remove all overrides from `compose.host.yml`, leaving the file empty
   for backwards compatibility
 * allow overriding traefik's endpoint_mode back to vip through
   compose.no-host.yml

/!\ This is a breaking change

Closes: #52
2026-02-13 09:43:15 +00:00
p4u1 5f977f1cca chore: publish 3.10.0+v3.6.7 release
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2026-01-20 09:51:07 +01:00
decentral1se ee344cce5d Merge pull request 'docs: next release notes' (#80) from feat-release-notes-next into master
continuous-integration/drone/push Build is failing
Reviewed-on: #80
Reviewed-by: p4u1 <p4u1@noreply.git.coopcloud.tech>
2026-01-15 09:37:12 +00:00
decentral1se 27cc7efb72 Merge pull request 'chore(deps): update traefik docker tag to v3.6.7' (#83) from renovate/traefik-3.x into master
continuous-integration/drone/push Build is failing
Reviewed-on: #83
Reviewed-by: p4u1 <p4u1@noreply.git.coopcloud.tech>
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2026-01-15 09:35:16 +00:00
decentral1se 324933a9cc docs: next release notes
continuous-integration/drone/pr Build is failing
2026-01-15 10:34:40 +01:00
decentral1se dc3e50838f Merge pull request 'feat: Add onion service support' (#81) from add-onion-support into master
continuous-integration/drone/push Build is failing
Reviewed-on: #81
Reviewed-by: p4u1 <p4u1@noreply.git.coopcloud.tech>
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2026-01-15 09:33:28 +00:00
p4u1 d59f6e0302 Update .gitea/PULL_REQUEST_TEMPLATE.md
continuous-integration/drone/push Build is failing
2026-01-14 20:25:43 +00:00
renovate-bot c2cdfd80b6 chore(deps): update traefik docker tag to v3.6.7
continuous-integration/drone/pr Build is failing
2026-01-14 19:25:37 +00:00
vvaznis 139202fa9c update README.md
continuous-integration/drone/pr Build is failing
2026-01-14 13:19:50 -05:00
vvaznis de7989f3ca use 9052 for onion port
continuous-integration/drone/pr Build is failing
2026-01-13 12:13:12 -05:00
vvaznis d3bf1bce24 fix whitespace removal
continuous-integration/drone/pr Build is failing
2026-01-13 02:32:23 -05:00
vvaznis 1ce9d9ca72 add onion support 2026-01-13 02:13:06 -05:00
decentral1se a233438f80 Merge pull request 'Remove Default Timeout' (#79) from remove-default-timeout into master
continuous-integration/drone/push Build is failing
Reviewed-on: #79
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2026-01-03 14:32:02 +00:00
22 changed files with 165 additions and 75 deletions
+11 -2
View File
@@ -19,8 +19,14 @@ COMPOSE_FILE="compose.yml"
# General settings #
#####################################################################
## Host-mode networking
#COMPOSE_FILE="$COMPOSE_FILE:compose.host.yml"
## Ingress-mode port publishing for ports 80 and 443
##
## /!\ Using this prevents the use of any compose override adding
## published ports to the traefik_app service (almost all of them)
## and it prevents the use of IPv6 for ingress traffic.
## Do not uncomment unless you know exactly what you are doing
##
#COMPOSE_FILE="$COMPOSE_FILE:compose.no-host.yml"
## "Headless mode" (no domain configured)
#COMPOSE_FILE="$COMPOSE_FILE:compose.headless.yml"
@@ -185,3 +191,6 @@ COMPOSE_FILE="compose.yml"
#ANUBIS_OG_EXPIRY_TIME=1h
#ANUBIS_OG_CACHE_CONSIDER_HOST=true
#ANUBIS_SERVE_ROBOTS_TXT=true
## Enable onion service support
#ONION_ENABLED=1
+1
View File
@@ -1,5 +1,6 @@
---
name: "Traefik pull request template"
about: "Traefik pull request template"
---
<!--
+4
View File
@@ -68,4 +68,8 @@ After deploying these changes, go to each recipe that supports Anubis
and follow the process there. **Enabling Anubis here is not enough for
protection your apps.**
## Enabling onion service
Uncomment the line in the config setting `ONION_ENABLED=1`. This will create a new entrypoint on port 9052 which can be used to bypass forced SSL. For more details, see the [onion recipe](https://recipes.coopcloud.tech/onion).
[`abra`]: https://git.autonomic.zone/autonomic-cooperative/abra
+1 -1
View File
@@ -1,3 +1,3 @@
export TRAEFIK_YML_VERSION=v28
export TRAEFIK_YML_VERSION=v29
export FILE_PROVIDER_YML_VERSION=v11
export ENTRYPOINT_VERSION=v5
+4 -1
View File
@@ -4,4 +4,7 @@ services:
environment:
- COMPY_ENABLED
ports:
- "9999:9999"
- target: 9999
published: 9999
protocol: tcp
mode: host
+4 -1
View File
@@ -4,4 +4,7 @@ services:
environment:
- FOODSOFT_SMTP_ENABLED
ports:
- "2525:2525"
- target: 2525
published: 2525
protocol: tcp
mode: host
+4 -1
View File
@@ -4,4 +4,7 @@ services:
environment:
- GITEA_SSH_ENABLED
ports:
- "2222:2222"
- target: 2222
published: 2222
protocol: tcp
mode: host
-13
View File
@@ -1,15 +1,2 @@
---
version: "3.8"
services:
app:
deploy:
update_config:
order: stop-first
ports:
- target: 80
published: 80
mode: host
- target: 443
published: 443
mode: host
+4 -1
View File
@@ -4,4 +4,7 @@ services:
environment:
- IRC_ENABLED
ports:
- "6697:6697"
- target: 6697
published: 6697
protocol: tcp
mode: host
+4 -1
View File
@@ -4,4 +4,7 @@ services:
environment:
- MATRIX_FEDERATION_ENABLED
ports:
- "8448:8448"
- target: 8448
published: 8448
protocol: tcp
mode: host
+4 -1
View File
@@ -6,4 +6,7 @@ services:
environment:
- MINIO_CONSOLE_ENABLED
ports:
- "9001:9001"
- target: 9001
published: 9001
protocol: tcp
mode: host
+8 -3
View File
@@ -4,6 +4,11 @@ services:
environment:
- MUMBLE_ENABLED
ports:
- "64738:64738/udp"
# note (3wc): see https://github.com/docker/compose/issues/7627
- "64737-64739:64737-64739/tcp"
- target: 64738
published: 64738
protocol: udp
mode: host
- target: 64738
published: 64738
protocol: tcp
mode: host
+8 -2
View File
@@ -4,5 +4,11 @@ services:
environment:
- NEXTCLOUD_TALK_HPB_ENABLED
ports:
- "3478:3478/udp"
- "3478:3478/tcp"
- target: 3478
published: 3478
protocol: udp
mode: host
- target: 3478
published: 3478
protocol: tcp
mode: host
+16
View File
@@ -0,0 +1,16 @@
---
version: "3.8"
services:
app:
ports:
- target: 80
published: 80
protocol: tcp
mode: ingress
- target: 443
published: 443
protocol: tcp
mode: ingress
deploy:
endpoint_mode: vip
+4 -1
View File
@@ -4,4 +4,7 @@ services:
environment:
- PEERTUBE_RTMP_ENABLED
ports:
- "1935:1935"
- target: 1935
published: 1935
protocol: tcp
mode: host
+4 -1
View File
@@ -6,4 +6,7 @@ services:
environment:
- SMTP_ENABLED
ports:
- "587:587"
- target: 587
published: 587
protocol: tcp
mode: host
+4 -1
View File
@@ -4,4 +4,7 @@ services:
environment:
- SSB_MUXRPC_ENABLED
ports:
- "8008:8008"
- target: 8008
published: 8008
protocol: tcp
mode: host
+4 -1
View File
@@ -4,4 +4,7 @@ services:
environment:
- WEB_ALT_ENABLED
ports:
- "8000:8000"
- target: 8000
published: 8000
protocol: tcp
mode: host
+12 -5
View File
@@ -3,13 +3,19 @@ version: "3.8"
services:
app:
image: "traefik:v3.6.6"
image: "traefik:v3.6.7"
# Note(decentral1se): *please do not* add any additional ports here.
# Doing so could break new installs with port conflicts. Please use
# the usual `compose.$app.yml` approach for any additional ports
ports:
- "80:80"
- "443:443"
- target: 80
published: 80
protocol: tcp
mode: host
- target: 443
published: 443
protocol: tcp
mode: host
volumes:
- "letsencrypt:/etc/letsencrypt"
- "file-providers:/etc/traefik/file-providers"
@@ -37,9 +43,10 @@ services:
command: traefik
entrypoint: /custom-entrypoint.sh
deploy:
endpoint_mode: dnsrr
update_config:
failure_action: rollback
order: start-first
order: stop-first
labels:
- "traefik.enable=true"
- "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=web"
@@ -48,7 +55,7 @@ services:
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.${STACK_NAME}.service=api@internal"
- "traefik.http.routers.${STACK_NAME}.middlewares=security@file"
- "coop-cloud.${STACK_NAME}.version=3.9.0+v3.6.5"
- "coop-cloud.${STACK_NAME}.version=3.10.0+v3.6.7"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT}"
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
+10
View File
@@ -0,0 +1,10 @@
Short summary of the latest changes:
* Traefik has been upgraded with a patch release, no issues expected.
* "CurveP256" has been included to the TLS options.
* The default TIMEOUT value has been removed from the label directly.
* Anubis support is here, try out `compose.anubis.yml` and see the README.md for more.
* Onion services with Tor are not supported! See the README.md for more.
* There are now officially 3 recipe maintainers for Traefik!
All changes: https://git.coopcloud.tech/coop-cloud/traefik/compare/3.9.0+v3.6.5...master
+11
View File
@@ -0,0 +1,11 @@
Short summary of the latest changes:
* Exposed ports have been switched to host-mode port publishing by default
This adds support for IPv6 ingress, which means that after deploying this
change, DNS AAAA records can be made to point to the relevant IPv6
address and Traefik will handle public IPv6 ingress traffic (including ACME
HTTP-01 challenges)
/!\ This is a breaking change. It is still possible to revert ports 80 and
443 to ingress-mode (the previous default) but keep in mind that there
is no longer an easy way to publish additional ports in ingress mode.
+43 -39
View File
@@ -11,14 +11,14 @@ providers:
endpoint: "tcp://socket-proxy:2375"
exposedByDefault: false
network: proxy
{{ if eq (env "FILE_PROVIDER_DIRECTORY_ENABLED") "1" }}
{{- if eq (env "FILE_PROVIDER_DIRECTORY_ENABLED") "1" }}
file:
directory: /etc/traefik/file-providers
watch: true
{{ else }}
{{- else }}
file:
filename: /etc/traefik/file-provider.yml
{{ end }}
{{- end }}
api:
dashboard: {{ env "DASHBOARD_ENABLED" }}
@@ -42,86 +42,90 @@ entrypoints:
allowEncodedPercent: true
allowEncodedQuestionMark: true
allowEncodedHash: true
{{ if eq (env "GITEA_SSH_ENABLED") "1" }}
{{- if eq (env "GITEA_SSH_ENABLED") "1" }}
gitea-ssh:
address: ":2222"
{{ end }}
{{ if eq (env "P2PANDA_ENABLED") "1" }}
{{- end }}
{{- if eq (env "P2PANDA_ENABLED") "1" }}
p2panda-udp-v4:
address: ":2022/udp"
p2panda-udp-v6:
address: ":2023/udp"
{{ end }}
{{ if eq (env "GARAGE_RPC_ENABLED") "1" }}
{{- end }}
{{- if eq (env "GARAGE_RPC_ENABLED") "1" }}
garage-rpc:
address: ":3901"
{{ end }}
{{ if eq (env "FOODSOFT_SMTP_ENABLED") "1" }}
{{- end }}
{{- if eq (env "FOODSOFT_SMTP_ENABLED") "1" }}
foodsoft-smtp:
address: ":2525"
{{ end }}
{{ if eq (env "SMTP_ENABLED") "1" }}
{{- end }}
{{- if eq (env "SMTP_ENABLED") "1" }}
smtp-submission:
address: ":587"
{{ end }}
{{ if eq (env "PEERTUBE_RTMP_ENABLED") "1" }}
{{- end }}
{{- if eq (env "PEERTUBE_RTMP_ENABLED") "1" }}
peertube-rtmp:
address: ":1935"
{{ end }}
{{ if eq (env "WEB_ALT_ENABLED") "1" }}
{{- end }}
{{- if eq (env "WEB_ALT_ENABLED") "1" }}
web-alt:
address: ":8000"
{{ end }}
{{ if eq (env "SSB_MUXRPC_ENABLED") "1" }}
{{- end }}
{{- if eq (env "SSB_MUXRPC_ENABLED") "1" }}
ssb-muxrpc:
address: ":8008"
{{ end }}
{{ if eq (env "MSSQL_ENABLED") "1" }}
{{- end }}
{{- if eq (env "MSSQL_ENABLED") "1" }}
mssql:
address: ":1433"
{{ end }}
{{ if eq (env "MUMBLE_ENABLED") "1" }}
{{- end }}
{{- if eq (env "MUMBLE_ENABLED") "1" }}
mumble:
address: ":64738"
mumble-udp:
address: ":64738/udp"
{{ end }}
{{ if eq (env "COMPY_ENABLED") "1" }}
{{- end }}
{{- if eq (env "COMPY_ENABLED") "1" }}
compy:
address: ":9999"
{{ end }}
{{ if eq (env "IRC_ENABLED") "1" }}
{{- end }}
{{- if eq (env "IRC_ENABLED") "1" }}
irc:
address: ":6697"
{{ end }}
{{ if eq (env "METRICS_ENABLED") "1" }}
{{- end }}
{{- if eq (env "METRICS_ENABLED") "1" }}
metrics:
address: ":8082"
http:
middlewares:
- basicauth@file
{{ end }}
{{ if eq (env "MATRIX_FEDERATION_ENABLED") "1" }}
{{- end }}
{{- if eq (env "MATRIX_FEDERATION_ENABLED") "1" }}
matrix-federation:
address: ":9001"
{{ end }}
{{ if eq (env "NEXTCLOUD_TALK_HPB_ENABLED") "1" }}
{{- end }}
{{- if eq (env "NEXTCLOUD_TALK_HPB_ENABLED") "1" }}
nextcloud-talk-hpb:
address: ":3478"
nextcloud-talk-hpb-udp:
address: ":3478/udp"
{{ end }}
{{- end }}
{{- if eq (env "ONION_ENABLED") "1" }}
onion:
address: ":9052"
{{- end }}
ping:
entryPoint: web
{{ if eq (env "METRICS_ENABLED") "1" }}
{{- if eq (env "METRICS_ENABLED") "1" }}
metrics:
prometheus:
entryPoint: metrics
addRoutersLabels: true
addServicesLabels: true
{{ end }}
{{- end }}
certificatesResolvers:
staging:
@@ -131,23 +135,23 @@ certificatesResolvers:
caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
httpChallenge:
entryPoint: web
{{ if eq (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }}
{{- if eq (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }}
dnsChallenge:
provider: {{ (env "LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER") }}
resolvers:
- "1.1.1.1:53"
- "8.8.8.8:53"
{{ end }}
{{- end }}
production:
acme:
email: {{ env "LETS_ENCRYPT_EMAIL" }}
storage: /etc/letsencrypt/production-acme.json
httpChallenge:
entryPoint: web
{{ if eq (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }}
{{- if eq (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }}
dnsChallenge:
provider: {{ (env "LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER") }}
resolvers:
- "1.1.1.1:53"
- "9.9.9.9:53"
{{ end }}
{{- end }}