Compare commits

...

136 Commits

Author SHA1 Message Date
7e688c9094 feat: support UDP proxy of port 2022 and 2023 for P2Panda apps (#70)
# Support P2P communication between P2Panda Apps

Apps built with the set of [P2Panda](https://p2panda.org/) libraries perform P2P communication over two UDP ports. The default ports for these are 2022 and 2023.

There aren't really a lot (any?) P2Panda web apps out there, most are desktop or mobile apps.

So, this change is being specifically request by the [LoRes Tech](https://lores.tech/) project in order to support our [LoRes Node](https://github.com/local-resilience-tech/lores-node/) app. We have a recipe drafted for this [here](https://codeberg.org/lores/lores-node-coop-cloud-recipe) and we will push that to the catalogue once this change is in.

It seems better to make this kiwix change as general as possible, which is why we called the flag `P2PANDA_ENABLED` rather than `LORES_NODE_ENABLED`. In practice if there was a larger ecosystem of such apps, we'd probably need to make the actual port numbers configurable.

Reviewed-on: coop-cloud/traefik#70
Reviewed-by: p4u1 <p4u1@noreply.git.coopcloud.tech>
Co-authored-by: Jade Ambrose <jade@noreply.git.coopcloud.tech>
Co-committed-by: Jade Ambrose <jade@noreply.git.coopcloud.tech>
2025-12-22 12:37:50 +00:00
88502ecda4 Merge pull request 'chore: Configure Renovate' (#64) from renovate/configure into master
Reviewed-on: coop-cloud/traefik#64
2025-11-20 18:24:11 +00:00
c42914f72a Add renovate.json 2025-11-20 17:50:32 +00:00
268316cc83 Merge pull request 'add MAINTAINERS.md' (#61) from maintainers into master
Reviewed-on: coop-cloud/traefik#61
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2025-11-20 17:07:42 +00:00
7dc902e82b chore: publish 3.7.0+v3.6.2 release 2025-11-20 18:01:44 +01:00
72bc0912f7 Merge pull request 'docs: Adds section on how to configure basic auth' (#62) from basic-auth-docs into master
Reviewed-on: coop-cloud/traefik#62
2025-11-20 16:55:53 +00:00
5b4bcbf1b8 Merge pull request 'chore: upgrade to v3.6.2, enables NODES=1 and PING=1 on socket-proxy' (#63) from upgrade-v3.6.2 into master
Reviewed-on: coop-cloud/traefik#63
Reviewed-by: p4u1 <p4u1@noreply.git.coopcloud.tech>
2025-11-20 16:55:26 +00:00
5be795b033 Update README.md 2025-11-20 16:42:15 +00:00
7d7481f3ee chore: upgrade to v3.6.2, enables NODES=1 and PING=1 on socket-proxy 2025-11-19 20:44:19 +01:00
92554180a8 chore: publish 3.6.3+v3.4.5 release 2025-11-13 22:24:18 -08:00
1052601523 pump up TRAEFIK_YML_VERSION version 2025-11-14 05:46:15 +00:00
3ae4d8f889 Update MAINTENANCE.md 2025-11-06 09:54:08 +00:00
07d47e087b docs: Adds section on how to configure basic auth 2025-11-05 15:31:06 +01:00
a01ec10d15 update 2025-11-04 18:54:51 +01:00
4ea14d260a add MAINTAINERS.md 2025-10-31 17:13:56 +01:00
3wc
1a48b9bac8 docs: Fix CI/CD badge link
[ci skip]
2025-10-30 09:45:46 -04:00
7ede5f7cc6 chore: publish 3.6.2+v3.4.5 release 2025-10-27 13:32:31 -04:00
8b06144f54 fix: bump entrypoint version var 2025-10-27 13:25:34 -04:00
6c6b5c66ca chore: publish 3.6.1+v3.4.5 release 2025-10-22 23:02:24 -04:00
993ed9cf09 Garage support .env addition 2025-10-22 21:09:23 -04:00
1c2302b288 Merge branch 'master' into HEAD 2025-10-22 21:03:58 -04:00
27d5c092de add support for Garage RPC port 2025-10-22 21:01:02 -04:00
88e1a67146 chore: publish 3.6.0+v3.4.5 release 2025-08-28 18:01:23 -04:00
7e7422a593 Expose LOG_MAX_AGE
Reviewed-on: coop-cloud/traefik#55
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2025-08-28 18:05:27 +00:00
304915a396 Set default LOG_MAX_AGE 2025-08-27 11:50:13 -04:00
a3ab012d55 revert f2e746344e
revert chore: publish 3.5.1+v3.4.5 release
2025-08-13 19:17:11 +00:00
f2e746344e chore: publish 3.5.1+v3.4.5 release 2025-08-13 19:10:53 +00:00
1ec509eee8 Fixed azure secret variable 2025-08-13 19:05:05 +00:00
52c2cbf7ec chore: publish 3.5.0+v3.4.5 release 2025-08-13 05:27:39 -07:00
b8303290de Merge pull request 'feat: add azure DNS-01 challenge support' (#56) from ripclap/traefik:master into master
Reviewed-on: coop-cloud/traefik#56
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2025-08-12 19:16:42 +00:00
445feab87c Revert "Updated TRAEFIK_YML_VERSION"
This reverts commit 2db1a03d94.
2025-08-12 09:44:59 -07:00
b8aa102a01 azure: update code to align with established conventions 2025-08-12 01:21:56 -07:00
2db1a03d94 Updated TRAEFIK_YML_VERSION 2025-08-11 17:37:22 -07:00
c7e510fbad Added Azure DNS 01-Challenge support 2025-08-12 00:20:57 +00:00
f7087646b1 Added Azure DNS 01-Challenge support 2025-08-12 00:20:11 +00:00
8d7f9bd6a2 traefik_yml_version 2025-08-08 22:17:46 -04:00
01c5b2a3a4 Update to Traefik v3 2025-08-06 18:13:11 -04:00
810e1b0502 chore: publish 3.4.2+v3.4.5 release 2025-07-28 14:33:50 +02:00
270af60ba4 chore: publish 3.4.1+v3.4.5 release 2025-07-25 18:14:45 -04:00
27dfc1ae2c chore: publish 3.4.0+v3.4.4 release 2025-07-23 23:14:01 -04:00
2ff2c0d59e Merge pull request 'update to traefik v3' (#54) from sixsmith/traefik:v3-update-only into master
Reviewed-on: coop-cloud/traefik#54
2025-07-23 00:06:45 +00:00
60ec1191a8 v3: update Traefik 2025-07-15 15:57:41 -07:00
ff351d4c7f fix drone 2025-07-01 20:02:30 +02:00
4a5cfddb4c chore: publish 3.3.0+v2.11.26 release 2025-07-01 19:40:44 +02:00
3wc
ed8646001c chore: publish 3.2.0+v2.11.25 release 2025-06-20 10:38:14 +01:00
3wc
45b168789e Merge branch 'master' into feature/irc 2025-06-20 10:37:27 +01:00
3wc
7835b585fd chore: publish 3.1.1+v2.11.25 release 2025-06-11 18:23:53 +01:00
830559895e chore: publish 3.1.0+v2.11.24 release 2025-04-22 15:28:32 +02:00
ac53e9debe chore: publish 3.0.0+v2.11.22 with release note 2025-04-22 09:27:08 +02:00
acb4c6960a feat: Switch to endpoint-mode dnsrr instead of vip
The default docker swarm endpoint mode (vip) introduces unnecessary
indirection in the communication between services, namely the
docker-proxy and a dynamic haproxy endpoint container. This commit
switches the socket-proxy service to endpoint_mode: dnsrr by default and
the traefik service when using host-mode port publishing.

I would strongly recommend considering switching to host-mode port
publishing by default, especially as most coop-cloud deployments are
single-server.

See: toolshed/organising#648

Thanks to @mirsal. Rebased and merged from the following commit.
abbb3255f8
2025-04-22 09:04:43 +02:00
22578d1e8e chore: publish 2.10.0+v2.11.22 release 2025-04-01 16:00:35 +02:00
55ad530fb7 chore: publish 2.9.1+v2.11.14 release 2025-02-21 18:42:22 +01:00
54fe45da2f Revert max log max log retention 2025-02-21 18:40:16 +01:00
e21dbc655a fix default values and breaking configuration for LOG_MAX_AGE change 2025-02-20 14:42:13 -05:00
b9d825b5c5 publish new version 2025-02-19 17:21:22 -05:00
74b3ee6716 chore: publish 3.1.0+v2.11.14 release 2025-02-19 17:20:04 -05:00
14d5d79520 Merge pull request 'Expose max log retention in traefik.yml' (#51) from sixsmith/traefik:master into master
Reviewed-on: coop-cloud/traefik#51
Reviewed-by: marlon <marlon@riseup.net>
2025-02-19 22:15:04 +00:00
7185e6ab43 Configure max log retention 2025-02-19 16:09:01 -05:00
3wc
8fbcab6bea Initial support for IRC, port 6697 2025-02-06 13:54:28 -05:00
85d0c159b0 Update .drone.yml 2025-01-08 10:09:13 -08:00
6294944952 chore: publish 2.9.0+v2.11.14 release 2024-12-03 19:33:59 +01:00
abbb3255f8 Switch to endpoint-mode dnsrr instead of vip
The default docker swarm endpoint mode (vip) introduces unnecessary
indirection in the communication between services, namely the
docker-proxy and a dynamic haproxy endpoint container. This commit
switches the socket-proxy service to endpoint_mode: dnsrr by default and
the traefik service when using host-mode port publishing.

I would strongly recommend considering switching to host-mode port
publishing by default, especially as most coop-cloud deployments are
single-server.

See: toolshed/organising#648
2024-11-27 16:42:35 +00:00
b5824c89f1 fix drone runner 2024-10-24 13:33:04 +02:00
9c924f5d67 fix drone runner 2024-10-24 13:30:35 +02:00
ed0945f59f add backupbot label 2024-10-24 13:12:51 +02:00
0fac81d4e2 Merge pull request 'Update to handle gandiv5 personal access tokens' (#49) from gabi/traefik:gandiv5 into master
Reviewed-on: coop-cloud/traefik#49
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2024-10-21 07:52:38 +00:00
c8894b7ee7 Update secret length to follow length guidelines. 2024-10-18 23:19:30 -07:00
e65bffe337 Update to handle gandiv5 personal access tokens 2024-10-03 19:40:34 -04:00
8cce1b7ff7 chore: publish 2.8.0+v2.11.10 release 2024-09-23 16:03:26 +02:00
b9cbc9ba92 Revert to 2.7.0+v2.11.8 2024-09-03 13:09:37 +02:00
d5f36255fe chore: publish 4.1.2+v3.1.2 release 2024-08-26 18:20:13 +01:00
b836d441f5 chore: publish 4.1.1+v3.1.1 release 2024-08-26 18:19:51 +01:00
8de23fd652 chore: publish 4.1.0+v3.1.0 release 2024-08-26 18:19:14 +01:00
6133be7830 chore: publish 4.0.4+v3.0.4 release 2024-08-26 18:17:28 +01:00
5803d05532 chore: publish 4.0.3+v3.0.3 release 2024-08-26 18:16:57 +01:00
0ace5037db chore: publish 4.0.2+v3.0.2 release 2024-08-26 18:16:26 +01:00
9e2d000d12 chore: publish 4.0.1+v3.0.1 release 2024-08-26 18:15:51 +01:00
d4f1c6b45c chore: publish 4.0.0+v3.0.0 release 2024-08-26 18:14:56 +01:00
ca989e903c chore: publish 2.7.0+v2.11.8 release 2024-08-07 16:08:18 +02:00
50cdb20a39 docker soket via socket proxy (#48)
Mounting the the docker socket directly is not recommended, because it is a security issue. Instead access it via a tcp socket proxy.

See https://doc.traefik.io/traefik/providers/docker/#docker-api-access

Reviewed-on: coop-cloud/traefik#48
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
Co-authored-by: p4u1 <p4u1_f4u1@riseup.net>
Co-committed-by: p4u1 <p4u1_f4u1@riseup.net>
2024-07-06 18:28:26 +00:00
60b79b447a add alakazam matrix federation integration 2024-06-04 15:22:25 +02:00
f1b52916df Merge pull request 'fix: the command is "secret"' (#47) from fauno/traefik:master into master
Reviewed-on: coop-cloud/traefik#47
2024-06-01 20:07:19 +00:00
f
35d435b4f6 fix: the command is "secret" 2024-06-01 13:54:50 -03:00
b7ea50d6aa chore: publish 2.6.3+v2.11.2 release 2024-04-14 21:38:48 +01:00
af33ec8510 chore: publish 2.6.2+v2.11.1 release 2024-04-14 21:36:25 +01:00
685d32baf1 Merge pull request 'Add preliminary DigitalOcean DNS support' (#36) from digitalocean-dns into master
Reviewed-on: coop-cloud/traefik#36
2024-04-06 18:00:38 +00:00
3wc
e76d61be00 Add preliminary DigitalOcean DNS support 2024-04-06 15:00:06 -03:00
3wc
daec338066 Another Drone fix? 2024-04-06 14:53:41 -03:00
3wc
e92e76ac88 Fix Drone CI 2024-04-06 14:52:55 -03:00
3wc
70d10587bc chore: publish 2.6.1+v2.11.0 release 2024-04-06 14:36:21 -03:00
3wc
bdf84fcefd Reinstate missing HTTP->HTTPS redirect 2024-04-06 14:35:53 -03:00
3wc
2db2f71a80 chore: publish 2.6.0+v2.11.0 release 2024-04-01 22:56:20 -03:00
3wc
c558e1dbdb Ditch DISABLE_HTTPS_REDIRECT 2024-04-01 22:53:56 -03:00
3wc
edc29f9594 Add "web-alt" entrypoint (mostly for Icecast) 2024-04-01 19:49:23 -03:00
3wc
f7f77dc942 Add support for unencrypted HTTP apps (please don't use this 😢) 2024-03-30 17:59:48 -03:00
ecc12b2b68 chore: publish 2.5.0+v2.11.0 release 2024-02-16 16:41:57 +01:00
a0e70f33be Merge pull request 'Add support for externally-sourced wildcard certificates' (#45) from wolcen/traefik:master into master
Reviewed-on: coop-cloud/traefik#45
Reviewed-by: decentral1se <decentral1se@noreply.git.coopcloud.tech>
2024-01-12 20:48:03 +00:00
e3c1df83fa chore(security): update traefik to 2.10.7
Addresses two CVE fixes from 2.10.6
2024-01-11 21:47:59 -05:00
998190f684 feat: add distinct version for wildcard key secret 2024-01-11 21:47:50 -05:00
cd92c909ba docs: correct secret insertion examples 2024-01-11 21:47:04 -05:00
64351c27d1 fix: deprecation warning - handled by redirect under web already 2024-01-11 21:47:04 -05:00
f4b05fd87f Bump file revisions for wildcard support 2024-01-11 21:45:32 -05:00
3c5333ba71 feat: add support for wildcard certs via secrets 2024-01-11 21:45:05 -05:00
3wc
5f2fd0bf37 chore: publish 2.4.3+v2.10.5 release 2023-10-16 13:16:09 +01:00
3wc
ac3a47fe8c chore: publish 2.4.2+v2.10.4 release 2023-07-25 17:19:22 +01:00
1e02f358ed chore: publish 2.4.1+v2.10.3 release 2023-07-10 09:51:42 +02:00
6cdcc25384 chore: publish 2.4.0+v2.10.1 release 2023-05-25 13:40:08 +02:00
d2b7b671f5 feat: use host mode port networking 2023-05-25 13:34:35 +02:00
c9d80df34d feat: enable public facing metrics 2023-05-25 13:34:34 +02:00
aaa34c1ea8 chore: publish 2.3.1+v2.10.2 release 2023-05-24 11:36:27 +02:00
6dee438492 fix: increase config version 2023-05-24 11:33:31 +02:00
ff668b2266 chore: publish 2.3.0+v2.10.2 release 2023-05-24 11:31:20 +02:00
e2c16be2ff feat: adds basic auth middleware 2023-05-10 15:35:52 +02:00
3wc
892f3c3124 chore: publish 2.2.0+v2.10.2 release 2023-04-27 16:12:25 -04:00
3wc
4205f4911e Bump TRAEFIK_YML_VERSION 2023-04-27 16:12:03 -04:00
3wc
13eb4a782d chore: publish 2.2.0+v2.10.1 release 2023-04-27 15:58:01 -04:00
b00a65a890 feat: routing bare metal 2023-04-20 21:19:47 +02:00
a213094d46 add timeout label 2023-04-18 18:36:09 +02:00
8bb3adba81 add auto update and timeout env 2023-04-18 18:26:15 +02:00
a7bff09db6 chore: publish 2.1.0+v2.9.9 release 2023-04-04 18:26:39 +02:00
3wc
6167d41588 Add DNS challenge / wildcard instructions to README.md
[ci skip]
2023-03-06 20:58:19 -05:00
31330d967b chore: publish 2.0.4+v2.9.6 release 2023-02-13 17:09:40 +01:00
f23357c9cd fix: remove invalid tls label
See coop-cloud/organising#412
2023-02-13 11:16:07 +01:00
3wc
b6bb286282 Switch to self-hosted stack-ssh-deploy image [mass update] 2023-01-21 11:49:56 -08:00
3wc
14a34c7b7f Fix CI by adding networks: [mass update] 2023-01-20 11:58:41 -08:00
3wc
39bfdb4c82 Automatically generate catalogue on release [mass update]
Re: coop-cloud/recipes-catalogue-json#4
2023-01-20 10:27:12 -08:00
3wc
1d43c68274 Update abra syntax in examples (finally) [mass update] 2023-01-19 16:02:28 -08:00
f1cfb814dd chore: publish 2.0.3+v2.9.6 release 2023-01-18 13:48:37 -08:00
ece8807959 chore: publish 2.0.2+v2.9.5 release 2022-12-02 11:09:17 +01:00
3wc
a1e75e8c8b Revert to traefik.example.com templating 2022-11-16 20:35:34 -08:00
b62cb273ef Merge pull request 'Up versions to latest stable and one ping less to Google' (#38) from javielico/traefik:master into master
Reviewed-on: coop-cloud/traefik#38
2022-11-11 19:32:15 +00:00
5f25a272cb One ping less to Google, swap for Quad9 2022-11-11 17:02:09 +00:00
4c7a272838 Up version to 2.9.4 2022-11-11 16:59:00 +00:00
3wc
2e68186042 chore: publish 2.0.0+v2.9.1 release 2022-10-18 17:09:44 -04:00
3wc
975d8e01a4 Use $STACK_NAME for default router name..
..instead of hard-coded `traefik`
2022-10-18 17:06:11 -04:00
fcff3a2d6a syntax
minor
2022-10-13 16:51:46 +00:00
32 changed files with 398 additions and 39 deletions

View File

@ -3,10 +3,12 @@ kind: pipeline
name: deploy to swarm-test.autonomic.zone name: deploy to swarm-test.autonomic.zone
steps: steps:
- name: deployment - name: deployment
image: decentral1se/stack-ssh-deploy:latest image: git.coopcloud.tech/coop-cloud/stack-ssh-deploy:latest
settings: settings:
host: swarm-test.autonomic.zone host: swarm-test.autonomic.zone
stack: traefik stack: traefik
networks:
- proxy
deploy_key: deploy_key:
from_secret: drone_ssh_swarm_test from_secret: drone_ssh_swarm_test
environment: environment:
@ -14,19 +16,25 @@ steps:
STACK_NAME: traefik STACK_NAME: traefik
LETS_ENCRYPT_ENV: production LETS_ENCRYPT_ENV: production
LETS_ENCRYPT_EMAIL: helo@autonomic.zone LETS_ENCRYPT_EMAIL: helo@autonomic.zone
TRAEFIK_YML_VERSION: v4 TRAEFIK_YML_VERSION: v26
FILE_PROVIDER_YML_VERSION: v3 FILE_PROVIDER_YML_VERSION: v10
ENTRYPOINT_VERSION: v1 ENTRYPOINT_VERSION: v4
trigger: trigger:
branch: branch:
- master - master
--- ---
kind: pipeline kind: pipeline
name: recipe release name: generate recipe catalogue
steps: steps:
- name: release a new version - name: release a new version
image: thecoopcloud/drone-abra:latest image: plugins/downstream
settings: settings:
command: recipe traefik release server: https://build.coopcloud.tech
deploy_key: token:
from_secret: abra_bot_deploy_key from_secret: drone_abra-bot_token
fork: true
repositories:
- toolshed/auto-recipes-catalogue-json
trigger:
event: tag

View File

@ -1,12 +1,16 @@
TYPE=traefik TYPE=traefik
TIMEOUT=300
ENABLE_AUTO_UPDATE=true
ENABLE_BACKUPS=true
DOMAIN={{ .Domain }} DOMAIN=traefik.example.com
LETS_ENCRYPT_ENV=production LETS_ENCRYPT_ENV=production
LETS_ENCRYPT_EMAIL=certs@example.com LETS_ENCRYPT_EMAIL=certs@example.com
# DASHBOARD_ENABLED=true # DASHBOARD_ENABLED=true
# WARN, INFO etc. # WARN, INFO etc.
LOG_LEVEL=WARN LOG_LEVEL=WARN
LOG_MAX_AGE=1
# This is here so later lines can extend it; you likely don't wanna edit # This is here so later lines can extend it; you likely don't wanna edit
COMPOSE_FILE="compose.yml" COMPOSE_FILE="compose.yml"
@ -40,12 +44,47 @@ COMPOSE_FILE="compose.yml"
## Gandi, https://gandi.net ## Gandi, https://gandi.net
## note(3wc): only "V5" (new) API is supported, so far ## note(3wc): only "V5" (new) API is supported, so far
#COMPOSE_FILE="$COMPOSE_FILE:compose.gandi.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.gandi-api-key.yml"
#GANDI_ENABLED=1 #GANDI_API_KEY_ENABLED=1
#SECRET_GANDIV5_API_KEY_VERSION=v1 #SECRET_GANDIV5_API_KEY_VERSION=v1
## Gandi, https://gandi.net
## note: uses GandiV5 Personal Access Token
#COMPOSE_FILE="$COMPOSE_FILE:compose.gandi-personal-access-token.yml"
#GANDI_PERSONAL_ACCESS_TOKEN_ENABLED=1
#SECRET_GANDIV5_PERSONAL_ACCESS_TOKEN_VERSION=v1
## DigitalOcean, https://digitalocean.com
#COMPOSE_FILE="$COMPOSE_FILE:compose.digitalocean.yml"
#DIGITALOCEAN_ENABLED=1
#SECRET_DIGITALOCEAN_AUTH_TOKEN_VERSION=v1
## Azure, https://azure.com
## To insert your Azure client secret:
## abra app secret insert {myapp.example.coop} azure_secret v1 "<CLIENT_SECRET>"
#COMPOSE_FILE="$COMPOSE_FILE:compose.azure.yml"
#AZURE_ENABLED=1
#AZURE_TENANT_ID=
#AZURE_CLIENT_ID=
#AZURE_SUBSCRIPTION_ID=
#AZURE_RESOURCE_GROUP=
#SECRET_AZURE_SECRET_VERSION=v1
##################################################################### #####################################################################
# Keycloak log-in # # Manual wildcard certificate insertion #
#####################################################################
# Set wildcards = 1, and uncomment compose_file to enable.
# Create your certs elsewhere and add them like:
# abra app secret insert {myapp.example.coop} ssl_cert v1 "$(cat /path/to/fullchain.pem)"
# abra app secret insert {myapp.example.coop} ssl_key v1 "$(cat /path/to/privkey.pem)"
#WILDCARDS_ENABLED=1
#SECRET_WILDCARD_CERT_VERSION=v1
#SECRET_WILDCARD_KEY_VERSION=v1
#COMPOSE_FILE="$COMPOSE_FILE:compose.wildcard.yml"
#####################################################################
# Authentication #
##################################################################### #####################################################################
## Enable Keycloak ## Enable Keycloak
@ -55,14 +94,27 @@ COMPOSE_FILE="compose.yml"
#KEYCLOAK_MIDDLEWARE_2_ENABLED=1 #KEYCLOAK_MIDDLEWARE_2_ENABLED=1
#KEYCLOAK_TFA_SERVICE_2=traefik-forward-auth_app #KEYCLOAK_TFA_SERVICE_2=traefik-forward-auth_app
## BASIC_AUTH
## Use httpasswd to generate the secret
#COMPOSE_FILE="$COMPOSE_FILE:compose.basicauth.yml"
#BASIC_AUTH=1
#SECRET_USERSFILE_VERSION=v1
##################################################################### #####################################################################
# Prometheus metrics # # Prometheus metrics #
##################################################################### #####################################################################
## Enable prometheus metrics collection ## Enable prometheus metrics collection
## used used by the coop-cloud monitoring stack ## used used by the coop-cloud monitoring stack
#COMPOSE_FILE="$COMPOSE_FILE:compose.metrics.yml"
#METRICS_ENABLED=1 #METRICS_ENABLED=1
#####################################################################
# File provider directory configuration #
# (Route bare metal and non-docker services on the machine!) #
#####################################################################
#FILE_PROVIDER_DIRECTORY_ENABLED=1
##################################################################### #####################################################################
# Additional services # # Additional services #
##################################################################### #####################################################################
@ -79,6 +131,10 @@ COMPOSE_FILE="compose.yml"
# COMPOSE_FILE="$COMPOSE_FILE:compose.gitea.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.gitea.yml"
# GITEA_SSH_ENABLED=1 # GITEA_SSH_ENABLED=1
## P2Panda UDP
# COMPOSE_FILE="$COMPOSE_FILE:compose.p2panda.yml"
# P2PANDA_ENABLED=1
## Foodsoft SMTP ## Foodsoft SMTP
# COMPOSE_FILE="$COMPOSE_FILE:compose.foodsoft.yml" # COMPOSE_FILE="$COMPOSE_FILE:compose.foodsoft.yml"
# FOODSOFT_SMTP_ENABLED=1 # FOODSOFT_SMTP_ENABLED=1
@ -102,3 +158,16 @@ COMPOSE_FILE="compose.yml"
## Matrix ## Matrix
#COMPOSE_FILE="$COMPOSE_FILE:compose.matrix.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.matrix.yml"
#MATRIX_FEDERATION_ENABLED=1 #MATRIX_FEDERATION_ENABLED=1
## "Web alt", an alternative web port
# NOTE(3wc): as of 2024-04-01 only the `icecast` recipe uses this
#COMPOSE_FILE="$COMPOSE_FILE:compose.web-alt.yml"
#WEB_ALT_ENABLED=1
## Matrix
#COMPOSE_FILE="$COMPOSE_FILE:compose.irc.yml"
#IRC_ENABLED=1
## Garage
#COMPOSE_FILE="$COMPOSE_FILE:compose.garage.yml"
#GARAGE_RPC_ENABLED=1

24
MAINTENANCE.md Normal file
View File

@ -0,0 +1,24 @@
# Traefik Recipe Maintenance
All contributions should be made via a pull request. This is to ensure a certain quality / consistency, that others can rely on.
## Maintainer Responsibilities
A recipe maintainer has the following responsibilities:
- respond to pull requests / issues within a week
- make image security updates within a day
- make image patch / minor updates within a week
- make image major updates within a month
In order to fullfill these responsibilities a recipe maintainer:
- has to watch the repository (to get notifications)
- needs to make sure renovate is configured properly
## Merge rules
A pull request can be merged if it is approved by at least one maintainer. For pull requests opened by a maintainer they need to be approved by another maintainer.
## Becoming a maintainer
Everyone can apply to be a recipe maintainer. Simply add your self to the list in the [README.md](./README.md) and open a new pull request with the change.

View File

@ -1,12 +1,14 @@
# Traefik # Traefik
[![Build Status](https://drone.autonomic.zone/api/badges/coop-cloud/traefik/status.svg)](https://drone.autonomic.zone/coop-cloud/traefik) [![Build Status](https://build.coopcloud.tech/api/badges/coop-cloud/traefik/status.svg)](https://build.coopcloud.tech/coop-cloud/traefik)
> https://docs.traefik.io > https://docs.traefik.io
<!-- metadata --> <!-- metadata -->
* **Maintainer**: [@p4u1](https://git.coopcloud.tech/p4u1)
* **Status**: `stable`
* **Category**: Utilities * **Category**: Utilities
* **Status**: ? * **Features**: ?
* **Image**: [`traefik`](https://hub.docker.com/_/traefik), 4, upstream * **Image**: [`traefik`](https://hub.docker.com/_/traefik), 4, upstream
* **Healthcheck**: Yes * **Healthcheck**: Yes
* **Backups**: No * **Backups**: No
@ -19,8 +21,38 @@
1. Set up Docker Swarm and [`abra`] 1. Set up Docker Swarm and [`abra`]
2. `abra app new traefik` 2. `abra app new traefik`
3. `abra app YOURAPPDOMAIN config` - be sure to change `DOMAIN` to something that resolves to 3. `abra app config YOURAPPDOMAIN` - be sure to change `DOMAIN` to something that resolves to
your Docker swarm box your Docker swarm box
4. `abra app YOURAPPDOMAIN deploy` 4. `abra app deploy YOURAPPDOMAIN`
## Configuring basic auth
1. Create the usersfile locally: `htpasswd -c usersfile <username>`
2. Uncomment the Basic Auth section in your .env file
3. Insert the secret: `abra app secret insert <domain> usersfile v1 -f usersfile
4. Redploy your app: `abra app deploy -f <domain>`
## Configuring wildcard SSL using DNS
Automatic certificate generation will Just Work™ for most recipes which use a fixed
number of subdomains. For some recipes which need to work across arbitrary
subdomains, like
[`federatedwiki`](https://git.coopcloud.tech/coop-cloud/federatedwiki/) and
[`go-ssb-room`](https://git.coopcloud.tech/coop-cloud/federatedwiki/), you'll
need to give Traefik access to your DNS provider so that it can carry out
Letsencrypt DNS challenges.
1. Use Gandi or OVH for DNS 🤡 (support for other providers can be easily added,
see [the `lego` docs](https://go-acme.github.io/lego/dns/#dns-providers).
2. Run `abra app config YOURAPPDOMAIN`
3. Uncomment e.g. `ENABLE_GANDI` and the related `SECRET_.._VERSION` line, e.g.
`SECRET_GANDIV5_API_KEY_VERSION`
4. Generate an API key for your provider
5. Run `abra app secret insert YOURAPPDOMAIN SECRETNAME v1 SECRETVALUE`, where
`SECRETNAME` is from the compose file (e.g. `compose.gandi-api-key.yml`) e.g.
`gandiv5_api_key` and `SECRETVALUE` is the API key.
- For Gandi, you can use either the deprecated API Key or a GandiV5 Personal
Access Token, in which case use compose.gandi-personal-access-token.yml.
6. Redeploy Traefik, using e.g. `abra app deploy YOURAPPDOMAIN -f`
[`abra`]: https://git.autonomic.zone/autonomic-cooperative/abra [`abra`]: https://git.autonomic.zone/autonomic-cooperative/abra

View File

@ -1,3 +1,3 @@
export TRAEFIK_YML_VERSION=v14 export TRAEFIK_YML_VERSION=v26
export FILE_PROVIDER_YML_VERSION=v6 export FILE_PROVIDER_YML_VERSION=v10
export ENTRYPOINT_VERSION=v2 export ENTRYPOINT_VERSION=v5

4
alaconnect.yml Normal file
View File

@ -0,0 +1,4 @@
matrix-synapse:
uncomment:
- compose.matrix.yml
- MATRIX_FEDERATION_ENABLED

17
compose.azure.yml Normal file
View File

@ -0,0 +1,17 @@
version: "3.8"
services:
app:
environment:
- AZURE_TENANT_ID
- AZURE_CLIENT_ID
- AZURE_SUBSCRIPTION_ID
- AZURE_RESOURCE_GROUP
- AZURE_CLIENT_SECRET_FILE=/run/secrets/azure_secret
secrets:
- azure_secret
secrets:
azure_secret:
name: ${STACK_NAME}_azure_secret_${SECRET_AZURE_SECRET_VERSION}
external: true

12
compose.basicauth.yml Normal file
View File

@ -0,0 +1,12 @@
version: "3.8"
services:
app:
environment:
- BASIC_AUTH
secrets:
- usersfile
secrets:
usersfile:
name: ${STACK_NAME}_usersfile_${SECRET_USERSFILE_VERSION}
external: true

15
compose.digitalocean.yml Normal file
View File

@ -0,0 +1,15 @@
version: "3.8"
services:
app:
environment:
- DO_AUTH_TOKEN_FILE=/run/secrets/digitalocean_auth_token
- LETS_ENCRYPT_DNS_CHALLENGE_ENABLED
- LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER
secrets:
- digitalocean_auth_token
secrets:
digitalocean_auth_token:
name: ${STACK_NAME}_digitalocean_auth_token_${SECRET_DIGITALOCEAN_AUTH_TOKEN_VERSION}
external: true

View File

@ -0,0 +1,15 @@
version: "3.8"
services:
app:
environment:
- GANDIV5_PERSONAL_ACCESS_TOKEN_FILE=/run/secrets/gandiv5_pat
- LETS_ENCRYPT_DNS_CHALLENGE_ENABLED
- LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER
secrets:
- gandiv5_pat
secrets:
gandiv5_pat:
name: ${STACK_NAME}_gandiv5_pat_${SECRET_GANDIV5_PERSONAL_ACCESS_TOKEN_VERSION}
external: true

7
compose.garage.yml Normal file
View File

@ -0,0 +1,7 @@
version: "3.8"
services:
app:
environment:
- GARAGE_RPC_ENABLED
ports:
- "3901:3901"

View File

@ -10,5 +10,5 @@ services:
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.services.traefik.loadbalancer.server.port=web" - "traefik.http.services.traefik.loadbalancer.server.port=web"
- "traefik.http.routers.traefik.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.traefik.service=api@internal" - "traefik.http.routers.${STACK_NAME}.service=api@internal"

7
compose.irc.yml Normal file
View File

@ -0,0 +1,7 @@
version: "3.8"
services:
app:
environment:
- IRC_ENABLED
ports:
- "6697:6697"

9
compose.metrics.yml Normal file
View File

@ -0,0 +1,9 @@
version: "3.8"
services:
app:
environment:
- METRICS_ENABLED
ports:
- target: 8082
published: 8082
mode: host

14
compose.p2panda.yml Normal file
View File

@ -0,0 +1,14 @@
version: "3.8"
services:
app:
environment:
- P2PANDA_ENABLED
ports:
- target: 2022
published: 2022
protocol: udp
mode: host
- target: 2023
published: 2023
protocol: udp
mode: host

7
compose.web-alt.yml Normal file
View File

@ -0,0 +1,7 @@
version: "3.8"
services:
app:
environment:
- WEB_ALT_ENABLED
ports:
- "8000:8000"

16
compose.wildcard.yml Normal file
View File

@ -0,0 +1,16 @@
---
version: "3.8"
services:
app:
secrets:
- ssl_cert
- ssl_key
secrets:
ssl_cert:
name: ${STACK_NAME}_ssl_cert_${SECRET_WILDCARD_CERT_VERSION}
external: true
ssl_key:
name: ${STACK_NAME}_ssl_key_${SECRET_WILDCARD_KEY_VERSION}
external: true

View File

@ -3,7 +3,7 @@ version: "3.8"
services: services:
app: app:
image: "traefik:v2.8.1" image: "traefik:v3.6.2"
# Note(decentral1se): *please do not* add any additional ports here. # Note(decentral1se): *please do not* add any additional ports here.
# Doing so could break new installs with port conflicts. Please use # Doing so could break new installs with port conflicts. Please use
# the usual `compose.$app.yml` approach for any additional ports # the usual `compose.$app.yml` approach for any additional ports
@ -11,8 +11,8 @@ services:
- "80:80" - "80:80"
- "443:443" - "443:443"
volumes: volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "letsencrypt:/etc/letsencrypt" - "letsencrypt:/etc/letsencrypt"
- "file-providers:/etc/traefik/file-providers"
configs: configs:
- source: traefik_yml - source: traefik_yml
target: /etc/traefik/traefik.yml target: /etc/traefik/traefik.yml
@ -23,9 +23,11 @@ services:
mode: 0555 mode: 0555
networks: networks:
- proxy - proxy
- internal
environment: environment:
- DASHBOARD_ENABLED - DASHBOARD_ENABLED
- LOG_LEVEL - LOG_LEVEL
- ${LOG_MAX_AGE:-0}
healthcheck: healthcheck:
test: ["CMD", "traefik", "healthcheck"] test: ["CMD", "traefik", "healthcheck"]
interval: 30s interval: 30s
@ -40,18 +42,57 @@ services:
order: start-first order: start-first
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.services.traefik.loadbalancer.server.port=web" - "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=web"
- "traefik.http.routers.traefik.rule=Host(`${DOMAIN}`)" - "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.traefik.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.traefik.tls.certresolver=${LETS_ENCRYPT_ENV}" - "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- "traefik.http.routers.traefik.tls.options=default@file" - "traefik.http.routers.${STACK_NAME}.service=api@internal"
- "traefik.http.routers.traefik.service=api@internal" - "traefik.http.routers.${STACK_NAME}.middlewares=security@file"
- "traefik.http.routers.traefik.middlewares=security@file" - "coop-cloud.${STACK_NAME}.version=3.7.0+v3.6.2"
- "coop-cloud.${STACK_NAME}.version=1.1.1+v2.8.1" - "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:3.2.8-r0-ls61
deploy:
endpoint_mode: dnsrr
environment:
- ALLOW_START=0
- ALLOW_STOP=0
- ALLOW_RESTARTS=0
- AUTH=0
- BUILD=0
- COMMIT=0
- CONFIGS=0
- CONTAINERS=1 # Needs access
- DISABLE_IPV6=0
- DISTRIBUTION=0
- EVENTS=1 # Needs access
- EXEC=0
- IMAGES=0
- INFO=0
- NETWORKS=1 # Needs access
- NODES=1
- PING=1
- POST=0
- PLUGINS=0
- SECRETS=0
- SERVICES=1 # Needs access
- SESSION=0
- SWARM=1
- SYSTEM=0
- TASKS=1 # Needs access
- VERSION=1 # Needs access
- VOLUMES=0
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- internal
networks: networks:
proxy: proxy:
external: true external: true
internal:
configs: configs:
traefik_yml: traefik_yml:
@ -69,3 +110,4 @@ configs:
volumes: volumes:
letsencrypt: letsencrypt:
file-providers:

View File

@ -7,8 +7,12 @@ export OVH_CONSUMER_KEY=$(cat "$OVH_CONSUMER_KEY_FILE")
export OVH_APPLICATION_SECRET=$(cat "$OVH_APPLICATION_SECRET_FILE") export OVH_APPLICATION_SECRET=$(cat "$OVH_APPLICATION_SECRET_FILE")
{{ end }} {{ end }}
{{ if eq (env "GANDI_ENABLED") "1" }} {{ if eq (env "DIGITALOCEAN_ENABLED") "1" }}
export GANDIV5_API_KEY=$(cat "$GANDIV5_API_KEY_FILE") export DO_AUTH_TOKEN=$(cat "$DO_AUTH_TOKEN_FILE")
{{ end }}
{{ if eq (env "AZURE_ENABLED") "1" }}
export AZURE_CLIENT_SECRET=$(cat "$AZURE_CLIENT_SECRET_FILE")
{{ end }} {{ end }}
/entrypoint.sh "$@" /entrypoint.sh "$@"

View File

@ -17,10 +17,14 @@ http:
authResponseHeaders: authResponseHeaders:
- X-Forwarded-User - X-Forwarded-User
{{ end }} {{ end }}
{{ if eq (env "BASIC_AUTH") "1" }}
basicauth:
basicAuth:
usersFile: "/run/secrets/usersfile"
{{ end }}
security: security:
headers: headers:
frameDeny: true frameDeny: true
sslRedirect: true
browserXssFilter: true browserXssFilter: true
contentTypeNosniff: true contentTypeNosniff: true
stsIncludeSubdomains: true stsIncludeSubdomains: true
@ -40,3 +44,8 @@ tls:
- CurveP521 - CurveP521
- CurveP384 - CurveP384
sniStrict: true sniStrict: true
{{ if eq (env "WILDCARDS_ENABLED") "1" }}
certificates:
- certFile: /run/secrets/ssl_cert
keyFile: /run/secrets/ssl_key
{{ end }}

1
release/2.8.0+v2.11.10 Normal file
View File

@ -0,0 +1 @@
Important Security Update! https://nvd.nist.gov/vuln/detail/CVE-2024-45410

1
release/2.9.0+v2.11.14 Normal file
View File

@ -0,0 +1 @@
Closes Security Issue https://github.com/traefik/traefik/security/advisories/GHSA-h924-8g65-j9wg

1
release/2.9.1+v2.11.14 Normal file
View File

@ -0,0 +1 @@
Reverts max log retention

2
release/3.0.0+v2.11.22 Normal file
View File

@ -0,0 +1,2 @@
socket-proxy: switch to endpoint-mode dnsrr instead of vip
See https://git.coopcloud.tech/coop-cloud/traefik/pulls/50.

1
release/3.3.0+v2.11.26 Normal file
View File

@ -0,0 +1 @@
Fix CVE: https://github.com/traefik/traefik/security/advisories/GHSA-vrch-868g-9jx5

1
release/3.4.0+v3.4.4 Normal file
View File

@ -0,0 +1 @@
Updates Traefik from v2 to v3. Migration notes here: https://doc.traefik.io/traefik/migration/v2-to-v3-details/#configuration-details-for-migrating-from-traefik-v2-to-v3 By default, syntax for Traefik rules in recipes still use v2 syntax. To upgrade a recipe to use v3 label syntax, set the ruleSyntax label in the recipe per: https://doc.traefik.io/traefik/reference/routing-configuration/http/router/rules-and-priority/#rulesyntax

1
release/3.4.2+v3.4.5 Normal file
View File

@ -0,0 +1 @@
Bumps the TRAEFIK_YML_VERSION

1
release/3.5.0+v3.4.5 Normal file
View File

@ -0,0 +1 @@
Add support to azure DNS-01 acme challenge

1
release/3.6.0+v3.4.5 Normal file
View File

@ -0,0 +1 @@
Expose log_max_age option. This option controls Traefik's maximum retention for log files in number of days. By default (when LOG_MAX_AGE=0), files are not removed based on age.

6
renovate.json Normal file
View File

@ -0,0 +1,6 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
]
}

View File

@ -1,15 +1,24 @@
--- ---
core:
defaultRuleSyntax: v2
log: log:
level: {{ env "LOG_LEVEL" }} level: {{ env "LOG_LEVEL" }}
maxAge: {{ env "LOG_MAX_AGE" }}
providers: providers:
docker: swarm:
endpoint: "unix:///var/run/docker.sock" endpoint: "tcp://socket-proxy:2375"
exposedByDefault: false exposedByDefault: false
network: proxy network: proxy
swarmMode: true {{ if eq (env "FILE_PROVIDER_DIRECTORY_ENABLED") "1" }}
file:
directory: /etc/traefik/file-providers
watch: true
{{ else }}
file: file:
filename: /etc/traefik/file-provider.yml filename: /etc/traefik/file-provider.yml
{{ end }}
api: api:
dashboard: {{ env "DASHBOARD_ENABLED" }} dashboard: {{ env "DASHBOARD_ENABLED" }}
@ -28,6 +37,16 @@ entrypoints:
gitea-ssh: gitea-ssh:
address: ":2222" address: ":2222"
{{ end }} {{ 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" }}
garage-rpc:
address: ":3901"
{{ end }}
{{ if eq (env "FOODSOFT_SMTP_ENABLED") "1" }} {{ if eq (env "FOODSOFT_SMTP_ENABLED") "1" }}
foodsoft-smtp: foodsoft-smtp:
address: ":2525" address: ":2525"
@ -40,6 +59,10 @@ entrypoints:
peertube-rtmp: peertube-rtmp:
address: ":1935" address: ":1935"
{{ end }} {{ end }}
{{ if eq (env "WEB_ALT_ENABLED") "1" }}
web-alt:
address: ":8000"
{{ end }}
{{ if eq (env "SSB_MUXRPC_ENABLED") "1" }} {{ if eq (env "SSB_MUXRPC_ENABLED") "1" }}
ssb-muxrpc: ssb-muxrpc:
address: ":8008" address: ":8008"
@ -58,9 +81,16 @@ entrypoints:
compy: compy:
address: ":9999" address: ":9999"
{{ end }} {{ end }}
{{ if eq (env "IRC_ENABLED") "1" }}
irc:
address: ":6697"
{{ end }}
{{ if eq (env "METRICS_ENABLED") "1" }} {{ if eq (env "METRICS_ENABLED") "1" }}
metrics: metrics:
address: ":8082" address: ":8082"
http:
middlewares:
- basicauth@file
{{ end }} {{ end }}
{{ if eq (env "MATRIX_FEDERATION_ENABLED") "1" }} {{ if eq (env "MATRIX_FEDERATION_ENABLED") "1" }}
matrix-federation: matrix-federation:
@ -74,6 +104,8 @@ ping:
metrics: metrics:
prometheus: prometheus:
entryPoint: metrics entryPoint: metrics
addRoutersLabels: true
addServicesLabels: true
{{ end }} {{ end }}
certificatesResolvers: certificatesResolvers:
@ -102,5 +134,5 @@ certificatesResolvers:
provider: {{ (env "LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER") }} provider: {{ (env "LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER") }}
resolvers: resolvers:
- "1.1.1.1:53" - "1.1.1.1:53"
- "8.8.8.8:53" - "9.9.9.9:53"
{{ end }} {{ end }}