This repository has been archived on 2024-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
authentik/website/docs/installation/docker-compose.md

116 lines
3.9 KiB
Markdown
Raw Normal View History

---
title: docker-compose installation
---
This installation method is for test-setups and small-scale productive setups.
## Requirements
- A Linux host with at least 2 CPU cores and 4 GB of RAM.
- docker
- docker-compose
## Preparation
2020-12-05 21:08:42 +00:00
Download the latest `docker-compose.yml` from [here](https://raw.githubusercontent.com/BeryJu/authentik/master/docker-compose.yml). Place it in a directory of your choice.
2020-12-05 21:08:42 +00:00
To optionally enable error-reporting, run `echo AUTHENTIK_ERROR_REPORTING__ENABLED=true >> .env`
2021-04-14 07:46:16 +00:00
To optionally deploy a different version run `echo AUTHENTIK_TAG=2021.4.1 >> .env`
2020-12-05 21:08:42 +00:00
If this is a fresh authentik install run the following commands to generate a password:
```shell
sudo apt-get install -y pwgen
echo "PG_PASS=$(pwgen 40 1)" >> .env
2020-12-05 21:08:42 +00:00
echo "AUTHENTIK_SECRET_KEY=$(pwgen 50 1)" >> .env
# Skip if you don't want to enable error reporting
echo "AUTHENTIK_ERROR_REPORTING__ENABLED=true" >> .env
```
## Email configuration (optional, but recommended)
It is also recommended to configure global email credentials. These are used by authentik to notify you about alerts, configuration issues. They can also be used by [Email stages](flow/stages/email/index.md) to send verification/recovery emails.
Append this block to your `.env` file
```shell
# SMTP Host Emails are sent to
AUTHENTIK_EMAIL__HOST=localhost
AUTHENTIK_EMAIL__PORT=25
# Optionally authenticate
AUTHENTIK_EMAIL__USERNAME=""
AUTHENTIK_EMAIL__PASSWORD=""
# Use StartTLS
AUTHENTIK_EMAIL__USE_TLS=false
# Use SSL
AUTHENTIK_EMAIL__USE_SSL=false
AUTHENTIK_EMAIL__TIMEOUT=10
# Email address authentik will send from, should have a correct @domain
AUTHENTIK_EMAIL__FROM=authentik@localhost
```
## GeoIP configuration (optional)
authentik can use a MaxMind-formatted GeoIP Database to extract location data from IPs. You can then use this location data in policies, and location data is saved in events.
To configure GeoIP, sign up for a free MaxMind account [here](https://www.maxmind.com/en/geolite2/signup).
After you have your account ID and license key, add the following block to your `.env` file:
```shell
GEOIPUPDATE_ACCOUNT_ID=*your account ID*
GEOIPUPDATE_LICENSE_KEY=* your license key*
AUTHENTIK_AUTHENTIK__GEOIP=/geoip/GeoLite2-City.mmdb
```
The GeoIP database will automatically be updated every 8 hours.
## Startup
Afterwards, run these commands to finish
```shell
docker-compose pull
docker-compose up -d
docker-compose run --rm server migrate
```
2020-06-08 20:11:01 +00:00
The compose file statically references the latest version available at the time of downloading, which can be overridden with the `SERVER_TAG` environment variable.
authentik will then be reachable HTTPS on port 443. You can optionally configure the packaged traefik to use Let's Encrypt certificates for TLS Encryption.
2021-04-06 18:25:22 +00:00
To start the initial setup, navigate to `https://<your server>/if/flow/initial-setup/`. There you will be prompted to set a password for the akadmin user.
## Explanation
The docker-compose project contains the following containers:
- server
This is the backend service, which does all the logic, runs the API and the actual SSO part.
- static
This container runs the frontend, hosts the JS/CSS files, and also servers the files you've uploaded for icons/etc.
- worker
This container executes backgorund tasks, everything you can see on the *System Tasks* page in the frontend.
- redis & postgresql
Cache and database respectively.
- traefik
Traefik is used so that you only have a single entry point, and don't need to configure a reverse proxy yourself.
It does the following things:
- Routes everything that starts with `/static`, `/if`, `/media`, `/robots.txt` or `/favicon.ico` to the *static* container on port 80
- Routes everything else to the *server* container on port 8000
- Does some minor health checking
Additionally, if you've enabled GeoIP, there is a container running which regularly updates the GeoIP database.