generated from coop-cloud/example
working version of authentik-groupsync #23
10
.env.sample
10
.env.sample
@ -96,3 +96,13 @@ FILE_STORAGE_UPLOAD_MAX_SIZE=26214400
|
||||
#AWS_S3_FORCE_PATH_STYLE=true
|
||||
#AWS_S3_ACL=private
|
||||
#SECRET_AWS_SECRET_KEY_VERSION=v1
|
||||
|
||||
# COMPOSE_FILE="$COMPOSE_FILE:compose.authentikgroupsync.yml"
|
||||
# # details on env here: https://github.com/burritosoftware/Outline-Authentik-Connector/blob/master/.env.example
|
||||
# AGS_AUTHENTIK_URL=
|
||||
# SECRET_AGS_OUTLINE_TOKEN_VERSION=v1
|
||||
# SECRET_AGS_AUTHENTIK_TOKEN_VERSION=v1
|
||||
# SECRET_AGS_WEBHOOK_SECRET_VERSION=v1
|
||||
# AGS_AUTO_CREATE_GROUPS=True
|
||||
# #AGS_SYNC_GROUP_REGEX=
|
||||
# #AGS_DEBUG=True
|
||||
15
README.md
15
README.md
@ -78,4 +78,17 @@ revisions to (instead of deleting them).
|
||||
- **Valid Redirect URIs**: `https://YOURAPPDOMAIN/auth/oidc.callback`
|
||||
- Reference the client/provider info to populate the `_AUTH_URI` `_TOKEN_URI` and `_USERINFO_URI` values
|
||||
- Set the OIDC secret using the value from the client/provider `abra app secret insert YOURAPPNAME oidc_client_secret v1 SECRETVALUE`
|
||||
- `abra app deploy YOURAPPDOMAIN`
|
||||
- `abra app deploy YOURAPPDOMAIN`
|
||||
|
||||
### Advanced: Group Sync with Authentik
|
||||
- As `outline` doesn't support group sync, you can make use of an [extra service, the Outline-Authentik-Connector,](https://github.com/burritosoftware/Outline-Authentik-Connector) to do so.
|
||||
- Just uncomment the respective section in your `.env`, and set the necessary envs.
|
||||
- Then [follow these instructions](https://github.com/burritosoftware/Outline-Authentik-Connector?tab=readme-ov-file#outline-setup) to create the needed user and tokens
|
||||
- ! for the authentik-token make sure you don't use the token it shows when creating the user (that is a password), create as the user (it will expire) but in the admin interface (path: `https://login..../if/admin/#/core/tokens`). Also setting the needed global permissions was not possible on the user directly, but I had to create a role for this.
|
||||
|
||||
- and insert them as secrets:
|
||||
```
|
||||
abra app secret insert YOURAPPNAME agsoutline v1 SECRETVALUE
|
||||
abra app secret insert YOURAPPNAME agsauthentik v1 SECRETVALUE
|
||||
abra app secret insert YOURAPPNAME agswebhook v1 SECRETVALUE
|
||||
```
|
||||
1
abra.sh
1
abra.sh
@ -1,6 +1,7 @@
|
||||
export APP_ENTRYPOINT_VERSION=v11
|
||||
export DB_ENTRYPOINT_VERSION=v2
|
||||
export PG_BACKUP_VERSION=v1
|
||||
export AGS_ENTRYPOINT_VERSION=v1
|
||||
|
||||
create_email_user() {
|
||||
if [ -z "$1" ]; then
|
||||
|
||||
62
compose.authentikgroupsync.yml
Normal file
62
compose.authentikgroupsync.yml
Normal file
@ -0,0 +1,62 @@
|
||||
---
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
outline-authentik-connector:
|
||||
image: burritosoftware/outline-authentik-connector:1.2
|
||||
|
|
||||
|
||||
secrets:
|
||||
- agsoutline
|
||||
- agsauthentik
|
||||
- agswebhook
|
||||
|
||||
environment:
|
||||
- AUTHENTIK_URL=${AGS_AUTHENTIK_URL}
|
||||
- OUTLINE_URL=https://${DOMAIN}
|
||||
- OUTLINE_TOKEN_FILE=/var/run/secrets/agsoutline
|
||||
- OUTLINE_WEBHOOK_SECRET_FILE=/var/run/secrets/agswebhook
|
||||
- AUTHENTIK_TOKEN_FILE=/var/run/secrets/agsauthentik
|
||||
- AUTO_CREATE_GROUPS=${AGS_AUTO_CREATE_GROUPS:-True}
|
||||
- DEBUG=${AGS_DEBUG:-False}
|
||||
- SYNC_GROUP_REGEX=${AGS_SYNC_GROUP_REGEX:-.*}
|
||||
|
||||
deploy:
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.sync-router.rule=Host(`groupsync.${DOMAIN}`)"
|
||||
- "traefik.http.routers.sync-router.entrypoints=web-secure"
|
||||
- "traefik.http.routers.sync-router.tls.certresolver=${LETS_ENCRYPT_ENV}"
|
||||
- "traefik.http.services.sync-router.loadbalancer.server.port=80"
|
||||
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget -qO- http://0.0.0.0:80/ | grep -q '\"status\":\"running\"' || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
|
||||
networks:
|
||||
- backend
|
||||
- proxy
|
||||
|
||||
configs:
|
||||
|
decentral1se
commented
I would in general watch out here with the naming and the dreaded https://docs.coopcloud.tech/maintainers/handbook/#r015-long-secret-names 🙈 I would in general watch out here with the naming and the dreaded https://docs.coopcloud.tech/maintainers/handbook/#r015-long-secret-names 🙈
|
||||
- source: ags_entrypoint
|
||||
target: /docker-entrypoint.sh
|
||||
mode: 0555
|
||||
|
||||
entrypoint: /docker-entrypoint.sh
|
||||
|
||||
secrets:
|
||||
agsoutline:
|
||||
name: ${STACK_NAME}_agsoutline_${SECRET_AGS_OUTLINE_TOKEN_VERSION}
|
||||
external: true
|
||||
agsauthentik:
|
||||
name: ${STACK_NAME}_agsauthentik_${SECRET_AGS_AUTHENTIK_TOKEN_VERSION}
|
||||
external: true
|
||||
agswebhook:
|
||||
name: ${STACK_NAME}_agswebhook_${SECRET_AGS_WEBHOOK_SECRET_VERSION}
|
||||
external: true
|
||||
|
||||
configs:
|
||||
ags_entrypoint:
|
||||
name: ${STACK_NAME}_ags_entrypoint_${AGS_ENTRYPOINT_VERSION}
|
||||
file: entrypoint.authentikgroupsync.sh
|
||||
28
entrypoint.authentikgroupsync.sh
Normal file
28
entrypoint.authentikgroupsync.sh
Normal file
@ -0,0 +1,28 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
load_secret() {
|
||||
env_var="$1"
|
||||
secret_file="$2"
|
||||
|
||||
if [ -f "$secret_file" ]; then
|
||||
value=$(cat "$secret_file")
|
||||
if [ -z "$value" ]; then
|
||||
echo >&2 "error: $secret_file is empty"
|
||||
exit 1
|
||||
fi
|
||||
export "$env_var"="$value"
|
||||
else
|
||||
echo >&2 "[info] didn't set $env_var because $secret_file does not exist. If you don't use the secret or it is no secret at all you can safely ignore this message."
|
||||
fi
|
||||
}
|
||||
|
||||
# load every env-var that ends on _FILE
|
||||
for var in $(env | grep "_FILE="); do
|
||||
key=$(echo "$var" | sed 's/_FILE=.*//')
|
||||
value=$(echo "$var" | sed 's/.*_FILE=//')
|
||||
load_secret "$key" "$value"
|
||||
done
|
||||
|
||||
|
iexos
commented
This would print the secrets into the log which I suppose is undesirable. Debugging leftover? This would print the secrets into the log which I suppose is undesirable. Debugging leftover?
|
||||
exec uvicorn connect:app --host=0.0.0.0 --port=80
|
||||
Reference in New Issue
Block a user
Do we want to pin to a specific image instead of
latestfor stability?I would also favor a specific version (if available) to prevent unpredictable image update changes.