Compare commits

..

4 Commits

Author SHA1 Message Date
notplants 488a656631 Revert version number to 5.1.1 2026-06-10 17:15:26 +00:00
notplants 793901a7c2 Merge branch 'master' into compose.matrix 2026-06-10 17:14:18 +00:00
notplants 88f1e61da2 chore: publish 5.1.2+v3.6.15 release 2026-05-25 16:52:59 +00:00
notplants 53321a7700 fix: matrix-federation entrypoint on :8448 to match published port
compose.matrix.yml publishes container port 8448, but the entrypoint
was on :9001 — federation traffic hit no listener. :9001 also collided
with the minio-console entrypoint.
2026-05-25 16:52:40 +00:00
7 changed files with 32 additions and 43 deletions
+14 -17
View File
@@ -38,7 +38,7 @@ COMPOSE_FILE="compose.yml"
## Enable dns challenge (for wildcard domains) ## Enable dns challenge (for wildcard domains)
## https://go-acme.github.io/lego/dns/#dns-providers ## https://go-acme.github.io/lego/dns/#dns-providers
#LETS_ENCRYPT_DNS_CHALLENGE_ENABLED=1 #LETS_ENCRYPT_DNS_CHALLENGE_ENABLED=1
## *Currently* one of ovh, gandi, gandiv5, digitalocean, azure, porkbun, and cloudflare. ## *Currently* one of ovh, gandi, gandiv5, digitalocean, azure, porkbun.
## Uncomment the corresponding provider below to insert your secret token/key. ## Uncomment the corresponding provider below to insert your secret token/key.
#LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER=ovh #LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER=ovh
@@ -47,25 +47,25 @@ COMPOSE_FILE="compose.yml"
#OVH_ENABLED=1 #OVH_ENABLED=1
#OVH_APPLICATION_KEY= #OVH_APPLICATION_KEY=
#OVH_ENDPOINT= #OVH_ENDPOINT=
#SECRET_OVH_APP_SECRET_VERSION=v1 # generate=false #SECRET_OVH_APP_SECRET_VERSION=v1
#SECRET_OVH_CONSUMER_KEY=v1 # generate=false #SECRET_OVH_CONSUMER_KEY=v1
## 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-api-key.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.gandi-api-key.yml"
#GANDI_API_KEY_ENABLED=1 #GANDI_API_KEY_ENABLED=1
#SECRET_GANDIV5_API_KEY_VERSION=v1 # generate=false #SECRET_GANDIV5_API_KEY_VERSION=v1
## Gandi, https://gandi.net ## Gandi, https://gandi.net
## note: uses GandiV5 Personal Access Token ## note: uses GandiV5 Personal Access Token
#COMPOSE_FILE="$COMPOSE_FILE:compose.gandi-personal-access-token.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.gandi-personal-access-token.yml"
#GANDI_PERSONAL_ACCESS_TOKEN_ENABLED=1 #GANDI_PERSONAL_ACCESS_TOKEN_ENABLED=1
#SECRET_GANDIV5_PERSONAL_ACCESS_TOKEN_VERSION=v1 # generate=false #SECRET_GANDIV5_PERSONAL_ACCESS_TOKEN_VERSION=v1
## DigitalOcean, https://digitalocean.com ## DigitalOcean, https://digitalocean.com
#COMPOSE_FILE="$COMPOSE_FILE:compose.digitalocean.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.digitalocean.yml"
#DIGITALOCEAN_ENABLED=1 #DIGITALOCEAN_ENABLED=1
#SECRET_DIGITALOCEAN_AUTH_TOKEN_VERSION=v1 # generate=false #SECRET_DIGITALOCEAN_AUTH_TOKEN_VERSION=v1
## Azure, https://azure.com ## Azure, https://azure.com
## To insert your Azure client secret: ## To insert your Azure client secret:
@@ -76,26 +76,24 @@ COMPOSE_FILE="compose.yml"
#AZURE_CLIENT_ID= #AZURE_CLIENT_ID=
#AZURE_SUBSCRIPTION_ID= #AZURE_SUBSCRIPTION_ID=
#AZURE_RESOURCE_GROUP= #AZURE_RESOURCE_GROUP=
#SECRET_AZURE_SECRET_VERSION=v1 # generate=false #SECRET_AZURE_SECRET_VERSION=v1
## Porkbun, https://porkbun.com ## Porkbun, https://porkbun.com
## To insert your secrets: ## To insert your secrets:
## abra app secret insert 1312.net pb_api_key v1 pk1_413 ## abra app secret insert 1312.net pb_api_key v1 pk1_413
## abra app secret insert 1312.net pb_s_api_key v1 sk1_612 ## abra app secret insert 1312.net pb_s_api_key v1 sk1_612
#COMPOSE_FILE="$COMPOSE_FILE:compose.porkbun.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.porkbun.yml"
#SECRET_PORKBUN_API_KEY_VERSION=v1 # generate=false #SECRET_PORKBUN_API_KEY_VERSION=v1
#SECRET_PORKBUN_SECRET_API_KEY_VERSION=v1 # generate=false #SECRET_PORKBUN_SECRET_API_KEY_VERSION=v1
## Cloudflare, htps://cloudflare.com ## Cloudflare, htps://cloudflare.com
## To insert your secrets: ## To insert your secrets:
## abra app secret insert {myapp.example.coop} cf_dns_token v1 "<CLOUDFLARE_DNS_API_TOKEN>" ## abra app secret insert {myapp.example.coop} cf_email v1 "<CLOUDFLARE_EMAIL>"
## abra app secret insert {myapp.example.coop} cf_zone_token v1 "<CLOUDFLARE_ZONE_API_TOKEN>" ## abra app secret insert {myapp.example.coop} cf_api_key v1 "<CLOUDFLARE_API_KEY>"
## These can be the same token or different tokens ## cf_api_key is an account API key from Cloudflare that has DNS read + edit permission
## cf_dns_token needs DNS edit access, cf_zone_token needs zone edit access
## See LEGO docs for more info: https://go-acme.github.io/lego/dns/cloudflare/index.html
#COMPOSE_FILE="$COMPOSE_FILE:compose.cloudflare.yml" #COMPOSE_FILE="$COMPOSE_FILE:compose.cloudflare.yml"
#SECRET_CLOUDFLARE_DNS_API_TOKEN_VERSION=v1 # generate=false #SECRET_CLOUDFLARE_EMAIL_VERSION=v1 # generate=false
#SECRET_CLOUDFLARE_ZONE_API_TOKEN_VERSION=v1 # generate=false #SECRET_CLOUDFLARE_API_KEY_VERSION=v1 # generate=false
##################################################################### #####################################################################
# Manual wildcard certificate insertion # # Manual wildcard certificate insertion #
@@ -214,7 +212,6 @@ COMPOSE_FILE="compose.yml"
#ANUBIS_OG_EXPIRY_TIME=1h #ANUBIS_OG_EXPIRY_TIME=1h
#ANUBIS_OG_CACHE_CONSIDER_HOST=true #ANUBIS_OG_CACHE_CONSIDER_HOST=true
#ANUBIS_SERVE_ROBOTS_TXT=true #ANUBIS_SERVE_ROBOTS_TXT=true
#ANUBIS_SLOG_LEVEL=INFO
## Enable onion service support ## Enable onion service support
#ONION_ENABLED=1 #ONION_ENABLED=1
+6 -7
View File
@@ -32,16 +32,15 @@
3. Insert the secret: `abra app secret insert <domain> usersfile v1 -f usersfile 3. Insert the secret: `abra app secret insert <domain> usersfile v1 -f usersfile
4. Redploy your app: `abra app deploy -f <domain>` 4. Redploy your app: `abra app deploy -f <domain>`
## Configuring SSL using DNS ## Configuring wildcard SSL using DNS
Automatic certificate generation will Just Work™ for most recipes which use a Automatic certificate generation will Just Work™ for most recipes which use a fixed
fixed number of subdomains. If your server can't be reached from the Internet, number of subdomains. For some recipes which need to work across arbitrary
or if you're deploying a recipe that needs to work across arbitrary
subdomains, like subdomains, like
[`federatedwiki`](https://git.coopcloud.tech/coop-cloud/federatedwiki/) and [`federatedwiki`](https://git.coopcloud.tech/coop-cloud/federatedwiki/) and
[`go-ssb-room`](https://git.coopcloud.tech/coop-cloud/federatedwiki/) (requiring [`go-ssb-room`](https://git.coopcloud.tech/coop-cloud/federatedwiki/), you'll
the use of wildcard certificates,) you can give Traefik access to your DNS provider need to give Traefik access to your DNS provider so that it can carry out
so that it can carry out Letsencrypt DNS challenges. Letsencrypt DNS challenges.
1. Use Gandi, OVH, DO, Azure, or PorkBun for DNS 🤡 (support for other providers 1. Use Gandi, OVH, DO, Azure, or PorkBun for DNS 🤡 (support for other providers
can be easily added, see can be easily added, see
-1
View File
@@ -17,7 +17,6 @@ services:
OG_EXPIRY_TIME: "${ANUBIS_OG_EXPIRY_TIME}" OG_EXPIRY_TIME: "${ANUBIS_OG_EXPIRY_TIME}"
OG_CACHE_CONSIDER_HOST: "${ANUBIS_OG_CACHE_CONSIDER_HOST}" OG_CACHE_CONSIDER_HOST: "${ANUBIS_OG_CACHE_CONSIDER_HOST}"
SERVE_ROBOTS_TXT: "${ANUBIS_SERVE_ROBOTS_TXT}" SERVE_ROBOTS_TXT: "${ANUBIS_SERVE_ROBOTS_TXT}"
SLOG_LEVEL: "${ANUBIS_SLOG_LEVEL:-INFO}"
networks: networks:
- proxy - proxy
deploy: deploy:
+8 -8
View File
@@ -3,16 +3,16 @@ version: "3.8"
services: services:
app: app:
environment: environment:
- CLOUDFLARE_DNS_API_TOKEN_FILE=/run/secrets/cf_dns_token - CLOUDFLARE_EMAIL_FILE=/run/secrets/cf_email
- CLOUDFLARE_ZONE_API_TOKEN_FILE=/run/secrets/cf_zone_token - CLOUDFLARE_API_KEY_FILE=/run/secrets/cf_api_key
secrets: secrets:
- cf_dns_token - cf_email
- cf_zone_token - cf_api_key
secrets: secrets:
cf_dns_token: cf_email:
name: ${STACK_NAME}_cf_dns_token_${SECRET_CLOUDFLARE_DNS_API_TOKEN_VERSION} name: ${STACK_NAME}_cf_email_${SECRET_CLOUDFLARE_EMAIL_VERSION}
external: true external: true
cf_zone_token: cf_api_key:
name: ${STACK_NAME}_cf_zone_token_${SECRET_CLOUDFLARE_ZONE_API_TOKEN_VERSION} name: ${STACK_NAME}_cf_api_key_${SECRET_CLOUDFLARE_API_KEY_VERSION}
external: true external: true
+2 -3
View File
@@ -3,7 +3,7 @@ version: "3.8"
services: services:
app: app:
image: "traefik:v3.7.5" image: "traefik:v3.6.15"
# 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
@@ -60,7 +60,7 @@ services:
- "backupbot.backup=${ENABLE_BACKUPS:-true}" - "backupbot.backup=${ENABLE_BACKUPS:-true}"
socket-proxy: socket-proxy:
image: lscr.io/linuxserver/socket-proxy:3.4.0 image: lscr.io/linuxserver/socket-proxy:3.2.19
deploy: deploy:
endpoint_mode: dnsrr endpoint_mode: dnsrr
environment: environment:
@@ -91,7 +91,6 @@ services:
- TASKS=1 # Needs access - TASKS=1 # Needs access
- VERSION=1 # Needs access - VERSION=1 # Needs access
- VOLUMES=0 - VOLUMES=0
- LOG_LEVEL=warning
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
networks: networks:
-1
View File
@@ -1 +0,0 @@
letsencrypt: Avoid HTTP-01 challenge if `LETS_ENCRYPT_DNS_CHALLENGE_ENABLED` is set, in order to rely on DNS-01 challenges for servers not exposed to the internet.
+1 -5
View File
@@ -96,7 +96,7 @@ entrypoints:
{{- end }} {{- end }}
{{- if eq (env "MATRIX_FEDERATION_ENABLED") "1" }} {{- if eq (env "MATRIX_FEDERATION_ENABLED") "1" }}
matrix-federation: matrix-federation:
address: ":9001" address: ":8448"
{{- end }} {{- end }}
{{- if eq (env "NEXTCLOUD_TALK_HPB_ENABLED") "1" }} {{- if eq (env "NEXTCLOUD_TALK_HPB_ENABLED") "1" }}
nextcloud-talk-hpb: nextcloud-talk-hpb:
@@ -127,10 +127,8 @@ certificatesResolvers:
email: {{ env "LETS_ENCRYPT_EMAIL" }} email: {{ env "LETS_ENCRYPT_EMAIL" }}
storage: /etc/letsencrypt/staging-acme.json storage: /etc/letsencrypt/staging-acme.json
caServer: "https://acme-staging-v02.api.letsencrypt.org/directory" caServer: "https://acme-staging-v02.api.letsencrypt.org/directory"
{{- if ne (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }}
httpChallenge: httpChallenge:
entryPoint: web entryPoint: web
{{- end }}
{{- if eq (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }} {{- if eq (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }}
dnsChallenge: dnsChallenge:
provider: {{ (env "LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER") }} provider: {{ (env "LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER") }}
@@ -142,10 +140,8 @@ certificatesResolvers:
acme: acme:
email: {{ env "LETS_ENCRYPT_EMAIL" }} email: {{ env "LETS_ENCRYPT_EMAIL" }}
storage: /etc/letsencrypt/production-acme.json storage: /etc/letsencrypt/production-acme.json
{{- if ne (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }}
httpChallenge: httpChallenge:
entryPoint: web entryPoint: web
{{- end }}
{{- if eq (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }} {{- if eq (env "LETS_ENCRYPT_DNS_CHALLENGE_ENABLED") "1" }}
dnsChallenge: dnsChallenge:
provider: {{ (env "LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER") }} provider: {{ (env "LETS_ENCRYPT_DNS_CHALLENGE_PROVIDER") }}