Compare commits

..
Author SHA1 Message Date
devydave b2ebcffa55 refactor: adjust local portbinding
continuous-integration/drone/pr Build is failing
2026-08-17 16:38:22 +02:00
devydave 7b2489417d Merge branch 'master' into devydave-feature/iocaine 2026-08-17 16:11:02 +02:00
devydave d79d4ab12d refactor: add seperate entrypoint for plugin init
continuous-integration/drone/pr Build is failing
2026-07-03 13:10:52 +02:00
devydave 536d958468 feat: adds iocaine config
continuous-integration/drone/pr Build is failing
2026-06-26 12:12:02 +02:00
15 changed files with 78 additions and 111 deletions
+2 -19
View File
@@ -139,14 +139,10 @@ WRITE_TIMEOUT=0s
#####################################################################
## Enable prometheus metrics collection
## Metrics are served unauthenticated on :8082, reachable only from
## other services on the proxy network (e.g. monitoring-ng's Alloy,
## which auto-discovers it via the prometheus.io/scrape label)
## used used by the coop-cloud monitoring stack
## BASIC_AUTH should also be enabled
#COMPOSE_FILE="$COMPOSE_FILE:compose.metrics.yml"
#METRICS_ENABLED=1
## Setting METRICS_FQDN also adds a public metrics endpoint (behind
## basic auth). BASIC_AUTH should be enabled for this.
#METRICS_FQDN=metrics.traefik.example.com
#####################################################################
@@ -215,8 +211,6 @@ WRITE_TIMEOUT=0s
## Garage
#COMPOSE_FILE="$COMPOSE_FILE:compose.garage.yml"
#GARAGE_RPC_ENABLED=1
#COMPOSE_FILE="$COMPOSE_FILE:compose.garage-admin.yml"
#GARAGE_ADMIN_ENABLED=1
## Nextcloud Talk HPB
#COMPOSE_FILE="$COMPOSE_FILE:compose.nextcloud-talk-hpb.yml"
@@ -238,14 +232,3 @@ WRITE_TIMEOUT=0s
## Enable onion service support
#ONION_ENABLED=1
## Access logs
#COMPOSE_FILE="$COMPOSE_FILE:compose.access-log.yml"
## Behind a reverse proxy
#
# YAML array of subnets from which Traefik's trusts the x-real-ip
# header when behind a reverse proxy.
#
# https://doc.traefik.io/traefik/reference/install-configuration/entrypoints/#opt-forwardedHeaders-trustedIPs
#TRUSTED_IPS="['10.13.12.1']" # 10.13.12.1 is an example
-1
View File
@@ -29,4 +29,3 @@ Everyone can apply to be a recipe maintainer:
1. Watch the repository to always get updates
2. Simply add your self to the list in the [README.md](./README.md) and open a new pull request with the change.
3. Once the pull request gets merged you will be added to the [traefik maintainers team](https://git.coopcloud.tech/org/coop-cloud/teams/traefik-maintainers).
4. Join the room [#cc-|-traefik-maintenance:matrix.org](#cc-|-traefik-maintenance:matrix.org) and chat to other maintainers.
-19
View File
@@ -80,22 +80,3 @@ If you want to collect Prometheus metrics for Anubis, for instance with
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
## Access logs
To keep access logs on a volume, uncomment the "Access logs" section.
Logs will be kept for every app running, unless you opt-out of them.
Apps supporting this will have an `ACCESS_LOGS` toggle, usually set to
`false`, so they're already opt-in.
You'll need to setup rotation yourself and send the USR1 signal to
Traefik for reloading. For instance, with `logrotate:
```
# /etc/logrotate.d/traefik.conf
/var/lib/docker/volumes/traefik_SERVICE_NAME_access-logs/_data/access_log.jsonl {
postrotate
pkill -USR1 traefik
endscript
}
```
+4 -4
View File
@@ -1,4 +1,4 @@
export TRAEFIK_YML_VERSION=v36
export FILE_PROVIDER_YML_VERSION=v13
export ENTRYPOINT_VERSION=v5
export ANUBIS_YML_VERSION=v1
export TRAEFIK_YML_VERSION=v34
export FILE_PROVIDER_YML_VERSION=v14
export ENTRYPOINT_VERSION=v8
export IOCAINE_ENTRYPOINT_VERSION=v1
-10
View File
@@ -1,10 +0,0 @@
---
version: "3.8"
services:
app:
environment:
ACCESS_LOG_ENABLED: "true"
volumes:
- "access-logs:/var/log/"
volumes:
access-logs:
-10
View File
@@ -1,10 +0,0 @@
version: "3.8"
services:
app:
environment:
- GARAGE_ADMIN_ENABLED
ports:
- target: 3903
published: 3903
protocol: tcp
mode: host
+22
View File
@@ -0,0 +1,22 @@
---
version: "3.8"
services:
app:
environment:
IOCAINE_ENABLE: "1"
IOCAINE_PLUGIN_VERSION: "v1.2.0"
volumes:
- "plugins-local:/plugins-local"
iocaine:
image: "git.madhouse-project.org/iocaine/iocaine:3.5.0"
environment:
RUST_LOG: "iocaine=info"
ports:
- "127.0.0.1:42069:42069"
networks:
- proxy
volumes:
plugins-local:
-6
View File
@@ -3,9 +3,3 @@ services:
app:
environment:
- METRICS_ENABLED
deploy:
labels:
# lets monitoring-ng's Alloy auto-discover and scrape metrics-internal
# via the proxy network.
- "prometheus.io/scrape=true"
- "prometheus.io/port=8082"
+10 -3
View File
@@ -3,7 +3,7 @@ version: "3.8"
services:
app:
image: "traefik:v3.7.13"
image: "traefik:v3.7.10"
# 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
@@ -27,6 +27,9 @@ services:
- source: entrypoint
target: /custom-entrypoint.sh
mode: 0555
- source: iocaine_entrypoint
target: /entrypoint.iocaine.sh
mode: 0555
networks:
- proxy
- internal
@@ -57,12 +60,12 @@ 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=6.3.0+v3.7.13"
- "coop-cloud.${STACK_NAME}.version=6.1.0+v3.7.10"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT}"
- "backupbot.backup=${ENABLE_BACKUPS:-true}"
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:3.4.4
image: lscr.io/linuxserver/socket-proxy:3.4.3
deploy:
endpoint_mode: dnsrr
environment:
@@ -117,6 +120,10 @@ configs:
name: ${STACK_NAME}_entrypoint_${ENTRYPOINT_VERSION}
file: entrypoint.sh.tmpl
template_driver: golang
iocaine_entrypoint:
name: ${STACK_NAME}_entrypoint_${IOCAINE_ENTRYPOINT_VERSION}
file: entrypoint.iocaine.sh.tmpl
template_driver: golang
volumes:
letsencrypt:
+15
View File
@@ -0,0 +1,15 @@
#!/bin/sh
set -e
apk --no-cache add git go
iocaine_path="/plugins-local/src/git.mstar.dev/mstar/traefik-iocaine-middleware"
if [ ! -d "$iocaine_path" ]; then
git clone --depth 1 --branch $IOCAINE_PLUGIN_VERSION https://git.mstar.dev/mstar/traefik-iocaine-middleware.git $iocaine_path
else
git -C $iocaine_path fetch origin 'refs/tags/*:refs/tags/*'
git -C $iocaine_path checkout tags/$IOCAINE_PLUGIN_VERSION
fi
(cd $iocaine_path && go mod vendor)
exit 0
+4
View File
@@ -15,4 +15,8 @@ export DO_AUTH_TOKEN=$(cat "$DO_AUTH_TOKEN_FILE")
export AZURE_CLIENT_SECRET=$(cat "$AZURE_CLIENT_SECRET_FILE")
{{ end }}
{{ if eq (env "IOCAINE_ENABLE") "1" }}
/entrypoint.iocaine.sh
{{ end }}
/entrypoint.sh "$@"
+10 -10
View File
@@ -17,6 +17,15 @@ http:
authResponseHeaders:
- X-Forwarded-User
{{ end }}
{{ if eq (env "IOCAINE_ENABLE") "1" }}
iocaine:
plugin:
iocaine:
iocaineHttpUrl: "http://iocaine:42069"
methods:
- GET
- HEAD
{{ end }}
{{ if eq (env "BASIC_AUTH") "1" }}
basicauth:
basicAuth:
@@ -32,7 +41,6 @@ http:
stsSeconds: "31536000"
{{ if eq (env "METRICS_ENABLED") "1" }}
routers:
{{ if ne (env "METRICS_FQDN") "" }}
traefik-metrics:
rule: "Host(`{{ env "METRICS_FQDN" }}`)"
entrypoints:
@@ -42,14 +50,6 @@ http:
middlewares:
- basicauth@file
service: prometheus@internal
{{ end }}
# reachable from other services on the proxy network only (this port
# isn't published to the host), without auth
traefik-metrics-internal:
rule: "PathPrefix(`/`)"
entrypoints:
- metrics-internal
service: prometheus@internal
{{ end }}
tls:
@@ -70,4 +70,4 @@ tls:
certificates:
- certFile: /run/secrets/ssl_cert
keyFile: /run/secrets/ssl_key
{{ end }}
{{ end }}
-1
View File
@@ -1 +0,0 @@
1. compose.metrics.yml now adds prometheus.io/scrape labels so services like monitoring-ng can automatically discover and scrape Traefik's metrics.
-1
View File
@@ -1 +0,0 @@
open port 3903 for garage and traefik security update
+11 -27
View File
@@ -6,21 +6,6 @@ log:
level: {{ env "LOG_LEVEL" }}
maxAge: {{ env "LOG_MAX_AGE" }}
{{ if eq (env "ACCESS_LOG_ENABLED") "true" }}
accessLog:
format: "json"
filePath: "/var/log/access_log.jsonl"
fields:
defaultMode: "keep"
headers:
defaultMode: "keep"
names:
Authorization: "drop"
Cookie: "drop"
queryParameters:
defaultMode: "keep"
{{ end }}
providers:
swarm:
endpoint: "tcp://socket-proxy:2375"
@@ -48,10 +33,6 @@ entrypoints:
to: web-secure
web-secure:
address: ":443"
{{ if ne (env "TRUSTED_IPS") "" }}
forwardedHeaders:
trustedIPs: {{ env "TRUSTED_IPS" }}
{{ end }}
transport:
respondingTimeouts:
readTimeout: {{ env "READ_TIMEOUT" }}
@@ -65,6 +46,10 @@ entrypoints:
allowEncodedPercent: true
allowEncodedQuestionMark: true
allowEncodedHash: true
{{- if eq (env "IOCAINE_ENABLE") "1" }}
middlewares:
- iocaine@file
{{- end }}
{{- if eq (env "GITEA_SSH_ENABLED") "1" }}
gitea-ssh:
address: ":2222"
@@ -79,10 +64,6 @@ entrypoints:
garage-rpc:
address: ":3901"
{{- end }}
{{- if eq (env "GARAGE_ADMIN_ENABLED") "1" }}
garage-admin:
address: ":3903"
{{- end }}
{{- if eq (env "FOODSOFT_SMTP_ENABLED") "1" }}
foodsoft-smtp:
address: ":2525"
@@ -135,10 +116,6 @@ entrypoints:
onion:
address: ":9052"
{{- end }}
{{- if eq (env "METRICS_ENABLED") "1" }}
metrics-internal:
address: ":8082"
{{- end }}
ping:
entryPoint: web
@@ -184,3 +161,10 @@ certificatesResolvers:
- "1.1.1.1:53"
- "9.9.9.9:53"
{{- end }}
{{ if eq (env "IOCAINE_ENABLE") "1" }}
experimental:
localPlugins:
iocaine:
moduleName: git.mstar.dev/mstar/traefik-iocaine-middleware
{{ end }}