-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Describe the bug
I have several services using Caddy as proxy.
Configuring an Auth Proxy in a fresh Authentik instance creates an authentication loop just after entering Authentik credentials.
After several minutes I can access the service normally.
I've tested Paperless-NGX and Invidious, that previously were working.
To Reproduce
Caddyfile section for Paperless-NGX
@paperless host paper.xxxxxx.com
handle @paperless {
reverse_proxy /outpost.goauthentik.io/* http://192.168.1.120:9002
forward_auth http://192.168.1.120:9002 {
uri /outpost.goauthentik.io/auth/caddy
# capitalization of the headers is important, otherwise they will be empty
copy_headers X-Authentik-Username X-Authentik-Groups X-Authentik-Email X-Authentik-Name X-Authentik-Uid X-Authentik-Jwt X-Authentik-Meta-Jwks X-Authentik-Meta-Outpost X-Authentik-Meta-Provider X-Authentik-Meta-App X-Authentik-Meta-Version
# optional, in this config trust all private ranges, should probably be set to the outposts IP
trusted_proxies private_ranges
}
reverse_proxy http://paperless-ngx:8000
encode gzip
header {
Strict-Transport-Security max-age=15552000
Referrer-Policy "strict-origin-when-cross-origin"
X-XSS-Protection "1; mode=block"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Content-Security-Policy "frame-ancestors 'self' *.xxxxxx.com"
-Server
}
}
Caddifile section for Authentik
@authentik host auth2.xxxxxx.com
handle @authentik {
reverse_proxy http://192.168.1.120:9002
encode gzip
header {
Strict-Transport-Security max-age=15552000
Referrer-Policy "strict-origin-when-cross-origin"
X-XSS-Protection "1; mode=block"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Content-Security-Policy "frame-ancestors 'self' *.xxxxxx.com"
-Server
}
}
docker-compose.yaml
version: "3.4"
services:
postgresql:
image: docker.io/library/postgres:12-alpine
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
start_period: 20s
interval: 30s
retries: 5
timeout: 5s
volumes:
- ./db:/var/lib/postgresql/data
networks:
- internal
environment:
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
POSTGRES_USER: ${PG_USER:-authentik}
POSTGRES_DB: ${PG_DB:-authentik}
env_file:
- .env
redis:
image: docker.io/library/redis:alpine
command: --save 60 1 --loglevel verbose
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
start_period: 20s
interval: 30s
retries: 5
timeout: 3s
volumes:
- ./redis:/data
networks:
- internal
server:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.10.0}
restart: unless-stopped
command: server
container_name: authentik
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
volumes:
- ./media:/media
- ./custom-templates:/templates
env_file:
- .env
ports:
- "${COMPOSE_PORT_HTTP:-9000}:9000"
# - "${COMPOSE_PORT_HTTPS:-9443}:9443"
networks:
- internal
- default
depends_on:
- postgresql
- redis
worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.10.0}
restart: unless-stopped
command: worker
environment:
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
# `user: root` and the docker socket volume are optional.
# See more for the docker socket integration here:
# https://goauthentik.io/docs/outposts/integrations/docker
# Removing `user: root` also prevents the worker from fixing the permissions
# on the mounted folders, so when removing this make sure the folders have the correct UID/GID
# (1000:1000 by default)
#user: root
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./media:/media
- ./certs:/certs
- ./custom-templates:/templates
networks:
- internal
- default
env_file:
- .env
depends_on:
- postgresql
- redis
networks:
internal:
internal: true
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
I've done this configuration in Authentik:
Logs
On every loop I get these log lines:
authentik | {"auth_via": "session", "event": "/if/flow/default-provider-authorization-implicit-consent/?client_id=OUQFNkH8AvpBsyWo0az9cE95PTuHdnQtpXaGEpK4&redirect_uri=https%3A%2F%2Fpaper.xxxxxxx.com%2Foutpost.goauthentik.io%2Fcallback%3FX-authentik-auth-callback%3Dtrue&response_type=code&scope=profile+ak_proxy+openid+email&state=W6HsnFouDMHFiWIHr2KO0Io3UOc6vZKW4_gNKvaFFhE", "host": "auth2.xxxxxxx.com", "level": "info", "logger": "authentik.asgi", "method": "GET", "pid": 36, "remote": "192.168.5.247", "request_id": "ef4522bf3b814dc5b2e00fdeabf6133c", "runtime": 56, "scheme": "https", "status": 200, "timestamp": "2023-10-29T18:52:09.746158", "user": "yyyyyy", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0"}
authentik | {"event": "/ws/client/", "level": "info", "logger": "authentik.asgi", "pid": 36, "remote": "192.168.5.247", "scheme": "ws", "timestamp": "2023-10-29T18:52:10.315949", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0"}
authentik | {"action": "authorize_application", "auth_via": "session", "client_ip": "192.168.5.247", "context": {"authorized_application": {"app": "authentik_core", "model_name": "application", "name": "paperless", "pk": "ac42498a3e2f401f9db92dabda717991"}, "flow": "3f3d4a00d47c4ed595b1a14b041948f1", "http_request": {"args": {"client_id": "OUQFNkH8AvpBsyWo0az9cE95PTuHdnQtpXaGEpK4", "redirect_uri": "https://paper.xxxxxxx.com/outpost.goauthentik.io/callback?X-authentik-auth-callback=true", "response_type": "code", "scope": "profile ak_proxy openid email", "state": "W6HsnFouDMHFiWIHr2KO0Io3UOc6vZKW4_gNKvaFFhE"}, "method": "GET", "path": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/"}, "scopes": "profile ak_proxy openid email"}, "event": "Created Event", "host": "auth2.xxxxxxx.com", "level": "info", "logger": "authentik.events.models", "pid": 36, "request_id": "4117d1df9c5b4bf49ebeaeb93f2840bf", "timestamp": "2023-10-29T18:52:10.410980", "user": {"email": "yyyyyy@zzzzzz.com.net", "pk": 11, "username": "yyyyyy"}}
authentik | {"auth_via": "session", "event": "Task published", "host": "auth2.xxxxxxx.com", "level": "info", "logger": "authentik.root.celery", "pid": 36, "request_id": "4117d1df9c5b4bf49ebeaeb93f2840bf", "task_id": "858e7d59634242cc9360e5d49a69c618", "task_name": "authentik.events.tasks.event_notification_handler", "timestamp": "2023-10-29T18:52:10.441767"}
authentik | {"auth_via": "session", "event": "/api/v3/flows/executor/default-provider-authorization-implicit-consent/?query=client_id%3DOUQFNkH8AvpBsyWo0az9cE95PTuHdnQtpXaGEpK4%26redirect_uri%3Dhttps%253A%252F%252Fpaper.xxxxxxx.com%252Foutpost.goauthentik.io%252Fcallback%253FX-authentik-auth-callback%253Dtrue%26response_type%3Dcode%26scope%3Dprofile%2Bak_proxy%2Bopenid%2Bemail%26state%3DW6HsnFouDMHFiWIHr2KO0Io3UOc6vZKW4_gNKvaFFhE", "host": "auth2.xxxxxxx.com", "level": "info", "logger": "authentik.asgi", "method": "GET", "pid": 36, "remote": "192.168.5.247", "request_id": "4117d1df9c5b4bf49ebeaeb93f2840bf", "runtime": 98, "scheme": "https", "status": 200, "timestamp": "2023-10-29T18:52:10.468660", "user": "yyyyyy", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0"}
authentik | {"event":"No state saved in session","level":"warning","logger":"authentik.outpost.proxyv2.application","name":"paperless-provider","timestamp":"2023-10-29T18:52:10Z"}
authentik | {"event":"/outpost.goauthentik.io/auth/caddy?X-authentik-auth-callback=true&code=0bdbf456358046ccb71516ee1e701fdf&state=W6HsnFouDMHFiWIHr2KO0Io3UOc6vZKW4_gNKvaFFhE","host":"paper.xxxxxxx.com","level":"info","logger":"authentik.outpost.proxyv2.application","method":"GET","name":"paperless-provider","remote":"192.168.5.247","runtime":"1.086","scheme":"http","size":51,"status":302,"timestamp":"2023-10-29T18:52:10Z","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0"}
authentik | {"error":"redis: client is closed","event":"failed to save session","level":"warning","logger":"authentik.outpost.proxyv2.application","name":"paperless-provider","timestamp":"2023-10-29T18:52:10Z"}
authentik | {"error":"redis: client is closed","event":"failed to save session","level":"warning","logger":"authentik.outpost.proxyv2.application","name":"paperless-provider","timestamp":"2023-10-29T18:52:10Z"}
authentik | {"event":"/outpost.goauthentik.io/auth/caddy","host":"paper.xxxxxxx.com","level":"info","logger":"authentik.outpost.proxyv2.application","method":"GET","name":"paperless-provider","remote":"192.168.5.247","runtime":"0.995","scheme":"http","size":367,"status":302,"timestamp":"2023-10-29T18:52:10Z","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0"}
authentik | {"auth_via": "session", "event": "/application/o/authorize/?client_id=OUQFNkH8AvpBsyWo0az9cE95PTuHdnQtpXaGEpK4&redirect_uri=https%3A%2F%2Fpaper.xxxxxxx.com%2Foutpost.goauthentik.io%2Fcallback%3FX-authentik-auth-callback%3Dtrue&response_type=code&scope=profile+ak_proxy+openid+email&state=PEQd_tsbgpYJHpESIu4RwKlbGZ7OGQ1IQRS7Z-YxlHk", "host": "auth2.xxxxxxx.com", "level": "info", "logger": "authentik.asgi", "method": "GET", "pid": 36, "remote": "192.168.5.247", "request_id": "01721b62e2024036a52646331b3e9b6f", "runtime": 94, "scheme": "https", "status": 302, "timestamp": "2023-10-29T18:52:10.784145", "user": "yyyyyy", "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0"}
This is repeated continuously until I close that tab.
I've noticed that on every loop I get this line in the log:
authentik | {"error":"redis: client is closed","event":"failed to save session","level":"warning","logger":"authentik.outpost.proxyv2.application","name":"paperless-provider","timestamp":"2023-10-29T18:52:10Z"}
authentik | {"error":"redis: client is closed","event":"failed to save session","level":"warning","logger":"authentik.outpost.proxyv2.application","name":"paperless-provider","timestamp":"2023-10-29T18:52:10Z"}
Although Redis is working fine:
authentik-redis-1 | 1:C 29 Oct 2023 19:15:37.227 * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
authentik-redis-1 | 1:C 29 Oct 2023 19:15:37.227 * Redis version=7.2.2, bits=64, commit=00000000, modified=0, pid=1, just started
authentik-redis-1 | 1:C 29 Oct 2023 19:15:37.227 * Configuration loaded
authentik-redis-1 | 1:M 29 Oct 2023 19:15:37.241 * monotonic clock: POSIX clock_gettime
authentik-redis-1 | 1:M 29 Oct 2023 19:15:37.242 * Running mode=standalone, port=6379.
authentik-redis-1 | 1:M 29 Oct 2023 19:15:37.246 * Server initialized
authentik-redis-1 | 1:M 29 Oct 2023 19:15:37.246 * Ready to accept connections tcp
authentik-redis-1 | 1:M 29 Oct 2023 19:16:07.316 - Accepted 127.0.0.1:43066
authentik-redis-1 | 1:M 29 Oct 2023 19:16:07.317 - Client closed connection id=3 addr=127.0.0.1:43066 laddr=127.0.0.1:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=0 omem=0 tot-mem=37760 events=r cmd=ping user=default redir=-1 resp=2 lib-name= lib-ver=
authentik-redis-1 | 1:M 29 Oct 2023 19:16:37.591 - Accepted 127.0.0.1:40272
authentik-redis-1 | 1:M 29 Oct 2023 19:16:37.593 - Client closed connection id=4 addr=127.0.0.1:40272 laddr=127.0.0.1:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=0 omem=0 tot-mem=37760 events=r cmd=ping user=default redir=-1 resp=2 lib-name= lib-ver=
authentik-redis-1 | 1:M 29 Oct 2023 19:17:07.810 - Accepted 127.0.0.1:57518
authentik-redis-1 | 1:M 29 Oct 2023 19:17:07.811 - Client closed connection id=5 addr=127.0.0.1:57518 laddr=127.0.0.1:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=0 omem=0 tot-mem=37760 events=r cmd=ping user=default redir=-1 resp=2 lib-name= lib-ver=
authentik-redis-1 | 1:M 29 Oct 2023 19:17:38.072 - Accepted 127.0.0.1:59324
authentik-redis-1 | 1:M 29 Oct 2023 19:17:38.073 - Client closed connection id=6 addr=127.0.0.1:59324 laddr=127.0.0.1:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=0 omem=0 tot-mem=37760 events=r cmd=ping user=default redir=-1 resp=2 lib-name= lib-ver=
authentik-redis-1 | 1:M 29 Oct 2023 19:18:08.374 - Accepted 127.0.0.1:40566
authentik-redis-1 | 1:M 29 Oct 2023 19:18:08.375 - Client closed connection id=7 addr=127.0.0.1:40566 laddr=127.0.0.1:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=0 omem=0 tot-mem=37760 events=r cmd=ping user=default redir=-1 resp=2 lib-name= lib-ver=
authentik-redis-1 | 1:M 29 Oct 2023 19:18:13.464 - Accepted 192.168.224.4:50022
authentik-redis-1 | 1:M 29 Oct 2023 19:18:13.487 - Client closed connection id=8 addr=192.168.224.4:50022 laddr=192.168.224.3:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=0 omem=0 tot-mem=37760 events=r cmd=ping user=default redir=-1 resp=2 lib-name=redis-py lib-ver=5.0.0
authentik-redis-1 | 1:M 29 Oct 2023 19:18:13.487 - Accepted 192.168.224.5:52288
authentik-redis-1 | 1:M 29 Oct 2023 19:18:13.517 - Client closed connection id=9 addr=192.168.224.5:52288 laddr=192.168.224.3:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=0 omem=0 tot-mem=37760 events=r cmd=ping user=default redir=-1 resp=2 lib-name=redis-py lib-ver=5.0.0
authentik-redis-1 | 1:M 29 Oct 2023 19:18:24.887 - Accepted 192.168.224.4:42824
authentik-redis-1 | 1:M 29 Oct 2023 19:18:24.893 * 1 changes in 60 seconds. Saving...
authentik-redis-1 | 1:M 29 Oct 2023 19:18:24.894 * Background saving started by pid 55
authentik-redis-1 | 55:C 29 Oct 2023 19:18:24.896 - Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
authentik-redis-1 | 55:C 29 Oct 2023 19:18:24.904 * DB saved on disk
authentik-redis-1 | 55:C 29 Oct 2023 19:18:24.905 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
authentik-redis-1 | 1:M 29 Oct 2023 19:18:24.995 * Background saving terminated with success
authentik-redis-1 | 1:M 29 Oct 2023 19:18:26.716 - Accepted 192.168.224.4:42838
authentik-redis-1 | 1:M 29 Oct 2023 19:18:26.729 - Accepted 192.168.224.4:42852
authentik-redis-1 | 1:M 29 Oct 2023 19:18:26.731 - Accepted 192.168.224.4:42866
authentik-redis-1 | 1:M 29 Oct 2023 19:18:27.916 - DB 0: 9 keys (7 volatile) in 16 slots HT.
authentik-redis-1 | 1:M 29 Oct 2023 19:18:30.793 - Client closed connection id=10 addr=192.168.224.4:42824 laddr=192.168.224.3:6379 fd=8 name= age=6 idle=4 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22400 events=r cmd=get user=default redir=-1 resp=2 lib-name=redis-py lib-ver=5.0.0
authentik-redis-1 | 1:M 29 Oct 2023 19:18:30.801 - Reading from client: Connection reset by peer
authentik-redis-1 | 1:M 29 Oct 2023 19:18:30.803 - Client closed connection id=13 addr=192.168.224.4:42866 laddr=192.168.224.3:6379 fd=11 name= age=4 idle=4 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22400 events=r cmd=lpush user=default redir=-1 resp=2 lib-name=redis-py lib-ver=5.0.0
authentik-redis-1 | 1:M 29 Oct 2023 19:18:30.804 - Client closed connection id=12 addr=192.168.224.4:42852 laddr=192.168.224.3:6379 fd=10 name= age=4 idle=4 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22400 events=r cmd=ping user=default redir=-1 resp=2 lib-name=redis-py lib-ver=5.0.0
authentik-redis-1 | 1:M 29 Oct 2023 19:18:32.945 - DB 0: 9 keys (7 volatile) in 16 slots HT.
authentik-redis-1 | 1:M 29 Oct 2023 19:18:37.957 - DB 0: 9 keys (7 volatile) in 16 slots HT.
authentik-redis-1 | 1:M 29 Oct 2023 19:18:38.703 - Accepted 127.0.0.1:46624
authentik-redis-1 | 1:M 29 Oct 2023 19:18:38.707 - Client closed connection id=14 addr=127.0.0.1:46624 laddr=127.0.0.1:6379 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=16384 rbp=16384 obl=0 oll=0 omem=0 tot-mem=37760 events=r cmd=ping user=default redir=-1 resp=2 lib-name= lib-ver=
authentik-redis-1 | 1:M 29 Oct 2023 19:18:41.975 - Accepted 192.168.224.5:46612
authentik-redis-1 | 1:M 29 Oct 2023 19:18:42.999 - DB 0: 9 keys (7 volatile) in 16 slots HT.
authentik-redis-1 | 1:M 29 Oct 2023 19:18:44.801 - Accepted 192.168.224.5:46620
authentik-redis-1 | 1:M 29 Oct 2023 19:18:44.821 - Accepted 192.168.224.5:46636
authentik-redis-1 | 1:M 29 Oct 2023 19:18:44.825 - Accepted 192.168.224.5:46638
authentik-redis-1 | 1:M 29 Oct 2023 19:18:47.474 - Accepted 192.168.224.4:57618
authentik-redis-1 | 1:M 29 Oct 2023 19:18:47.950 - Accepted 192.168.224.4:57634
authentik-redis-1 | 1:M 29 Oct 2023 19:18:48.034 - DB 0: 9 keys (7 volatile) in 16 slots HT.
authentik-redis-1 | 1:M 29 Oct 2023 19:18:49.444 - Client closed connection id=15 addr=192.168.224.5:46612 laddr=192.168.224.3:6379 fd=8 name= age=8 idle=4 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22400 events=r cmd=get user=default redir=-1 resp=2 lib-name=redis-py lib-ver=5.0.0
authentik-redis-1 | 1:M 29 Oct 2023 19:18:49.451 - Reading from client: Connection reset by peer
authentik-redis-1 | 1:M 29 Oct 2023 19:18:49.452 - Client closed connection id=18 addr=192.168.224.5:46638 laddr=192.168.224.3:6379 fd=11 name= age=5 idle=5 flags=N db=0 sub=0 psub=0 ssub=0 multi=-1 qbuf=0 qbuf-free=20474 argv-mem=0 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22400 events=r cmd=lpush user=default redir=-1 resp=2 lib-name=redis-py lib-ver=5.0.0
Version and Deployment (please complete the following information):
- authentik version: 2023.10.2
- Deployment: docker-compose
Additional context
Add any other context about the problem here.


