Outline
Wiki and knowledge base for growing teams
- Category: Apps
- Status: 3, stable
- Image: outlinewiki/outline, 4, upstream
- Healthcheck: Yes
- Backups: Yes
- Email: Yes
- Tests: No
- SSO: 3 (OAuth)
Basic usage
- Set up Docker Swarm and
abra - Deploy
coop-cloud/traefik abra app new outline- Insert secrets:
abra app secret insert <APP-DOMAIN> secret_key v1 $(openssl rand -hex 32)abra app secret generate -a <APP-DOMAIN>
abra app deploy <APP-DOMAIN>- Open the configured domain in your browser to finish set-up
Tips & Tricks
Create an initial admin user
abra app cmd <APP-DOMAIN> app create_email_user test@example.com
Setting up your .env config
Avoid the use of quotes ("...") as much as possible, the NodeJS scripts flip out for some reason on some vars.
Deleting a user (e.g. to fix SSO weirdness)
abra app cmd <APP-DOMAIN> db delete_user <USERNAME-TO-DELETE> <USERNAME-TO-REPLACE>
Where <USERNAME-TO-DELETE> is the username of the user to be removed, and
<USERNAME-TO-REPLACE> is the username of another user, to assign documents and
revisions to (instead of deleting them).
Migrate from S3 to local storage
-
abra app config <APP-DOMAIN>, addCOMPOSE_FILE="$COMPOSE_FILE:compose.local.yml"FILE_STORAGE_UPLOAD_MAX_SIZE=26214400
-
abra app deploy <APP-DOMAIN> -fcompose.aws.ymlshould still be deployed!
-
abra app undeploy <APP-DOMAIN> -
On the docker host, find mount *point of newly created volume via
docker volume lsanddocker volume inspect- volume name is something like
<APP-DOMAIN>_storage-data - take note which Linux user owns
<STORAGE_MOUNTPOINT>(likely1001) - use s3cmd/rclone/... to sync your bucket to
<STORAGE_MOUNTPOINT>
- volume name is something like
-
chown -R <STORAGE_USER>:<STORAGE_USER> <STORAGE_MOUNTPOINT> -
abra app config <APP-DOMAIN>, switch storage back-end- remove
AWS_*vars,SECRET_AWS_SECRET_KEY_VERSIONandCOMPOSE_FILE="$COMPOSE_FILE:compose.aws.yml" - set
FILE_STORAGE=local
- remove
-
abra app deploy <APP-DOMAIN> -f -
Enjoy getting rid of S3 🥳
Single Sign On with Keycloak/Authentik
-
Create an OIDC client in Keycloak (in Authentik this is called a provider and application)
-
Run
abra app config <APP-DOMAIN>, then uncomment everything in theOIDC_section.- Valid Redirect URIs:
https://<APP-DOMAIN>/auth/oidc.callback - Reference the client/provider info to populate the
OIDC_AUTH_URIOIDC_TOKEN_URIandOIDC_USERINFO_URIvalues
- Valid Redirect URIs:
-
Set the OIDC secret using the value from the client/provider
abra app secret insert <APP-DOMAIN> oidc_client_secret v1 "<SECRET_VALUE>" -
abra app deploy <APP-DOMAIN>
Advanced: Group Sync with Authentik
As outline doesn't support group sync, you can make use of an extra service, the Outline-Authentik-Connector, to do so.
-
Uncomment the respective section in your
.env, and set the necessary envs. -
Then follow these instructions to create the needed user and tokens
Note
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://<APP_DOMAIN>/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 <APP-DOMAIN> agsoutline v1 "<SECRET_VALUE>"
abra app secret insert <APP-DOMAIN> agsauthentik v1 "<SECRET_VALUE>"
abra app secret insert <APP-DOMAIN> agswebhook v1 "<SECRET_VALUE>"