Memasang Authentik dengan Docker Compose: menyusun stack server, worker, PostgreSQL, Redis, dan proxy, mengelola secret dan variabel lingkungan lewat file .env, bootstrap admin akadmin, memverifikasi UI pertama, hingga jalur upgrade yang aman.

Setelah di episode 2 kita memahami arsitektur — server, worker, PostgreSQL, Redis, dan outposts — pada episode kali ini kita akan menyalakannya untuk pertama kali. Tujuan akhir episode ini sederhana: Authentik berjalan, dan kalian bisa login ke admin interface sebagai akadmin.
Kita akan memakai metode yang paling direkomendasikan: Docker Compose. Ini pola yang dipakai dokumentasi resmi, paling mudah dikelola, dan menjadi fondasi seluruh episode berikutnya.
Sebelum menyentuh keyboard, kenali tiga jalur instalasi:
Buat direktori proyek, lalu siapkan file docker-compose.yml. Dokumentasi resmi bahkan menyediakan file siap pakai yang bisa diunduh:
mkdir authentik && cd authentik
curl -O https://docs.goauthentik.io/compose.ymlBerikut versi yang kita bahas, mencakup lima service: postgresql, redis, server, worker, dan proxy. Catatan: quickstart resmi terbaru menjalankan proxy outpost secara embedded di dalam server; service proxy di bawah adalah opsi standalone untuk outpost — berguna saat kalian ingin outpost berjalan sebagai kontainer terpisah (dibahas di fase 4).
services:
postgresql:
image: docker.io/library/postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${PG_PASS:?database password required}
POSTGRES_USER: ${PG_USER:-authentik}
POSTGRES_DB: ${PG_DB:-authentik}
volumes:
- database:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -d ${PG_DB} -U ${PG_USER}"]
start_period: 20s
interval: 30s
retries: 5
redis:
image: docker.io/library/redis:alpine
restart: unless-stopped
command: --save 60 1 --loglevel warning
volumes:
- redis:/data
server:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.6}
command: server
restart: unless-stopped
environment:
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS:?database password required}
ports:
- "${COMPOSE_PORT_HTTP:-9000}:9000"
- "${COMPOSE_PORT_HTTPS:-9443}:9443"
volumes:
- ./media:/media
- ./custom-templates:/templates
depends_on:
postgresql:
condition: service_healthy
redis:
condition: service_healthy
worker:
image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2026.2.6}
command: worker
restart: unless-stopped
environment:
AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY:?secret key required}
AUTHENTIK_REDIS__HOST: redis
AUTHENTIK_POSTGRESQL__HOST: postgresql
AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS:?database password required}
volumes:
- ./media:/media
- ./certs:/certs
depends_on:
postgresql:
condition: service_healthy
redis:
condition: service_healthy
proxy:
image: ghcr.io/goauthentik/proxy:${AUTHENTIK_TAG:-2026.2.6}
restart: unless-stopped
environment:
AUTHENTIK_HOST: http://server:9000
AUTHENTIK_TOKEN: ${AUTHENTIK_BOOTSTRAP_TOKEN}
depends_on:
- server
volumes:
database:
redis:Poin penting dari file ini:
ghcr.io/goauthentik/server), dibedakan hanya oleh command: server atau command: worker..env via interpolasi.Jangan pernah menaruh secret langsung di docker-compose.yml. Simpan di .env, pastikan ia masuk .gitignore, dan jangan commit. Siapkan isinya:
PG_PASS=<postgres-password-acak>
PG_USER=authentik
PG_DB=authentik
AUTHENTIK_SECRET_KEY=<secret-acak>
AUTHENTIK_BOOTSTRAP_PASSWORD=<password-admin-kuat>
AUTHENTIK_BOOTSTRAP_EMAIL=admin@example.com
AUTHENTIK_BOOTSTRAP_TOKEN=<token-outpost-acak>
AUTHENTIK_ERROR_REPORTING=false
AUTHENTIK_LOG_LEVEL=infoMakna tiap variabel penting:
AUTHENTIK_SECRET_KEY — kunci yang menandatangani data sensitif; harus acak dan panjang. Menggantinya setelah instalasi akan menginvalidasi session yang ada.AUTHENTIK_BOOTSTRAP_PASSWORD dan AUTHENTIK_BOOTSTRAP_EMAIL — dipakai untuk membuat admin pertama bernama akadmin.AUTHENTIK_BOOTSTRAP_TOKEN — token yang dipakai outposts untuk berkomunikasi dengan API.AUTHENTIK_ERROR_REPORTING — matikan (false) untuk privasi; kalau dibiarkan true, error dikirim ke tim Authentik.AUTHENTIK_LOG_LEVEL — info untuk sehari-hari; naikkan ke debug saat troubleshooting.Generate nilai acak dengan OpenSSL:
openssl rand -base64 60 | tr -d '\n'
openssl rand -base64 36 | tr -d '\n'Warning
Jika AUTHENTIK_SECRET_KEY atau PG_PASS tidak terisi, server menolak start — ini proteksi bawaan, bukan bug. Selalu gunakan secret acak, simpan di tempat aman, dan tambahkan .env ke .gitignore sejak awal.
Jalankan image dan buat kontainer:
docker compose pull
docker compose up -d
docker compose psTunggu sampai kontainer server siap, lalu buka browser di http://localhost:9000 (atau port yang kalian petakan). Jika semuanya benar, kalian akan melihat halaman login Authentik.
Pada start pertama, server otomatis membuat: default tenant, built-in flows (authentication, enrollment, recovery, invalidation), grup bawaan authentik Admins dan authentik Users, serta user admin akadmin — lengkap dengan password dari AUTHENTIK_BOOTSTRAP_PASSWORD.
Login ke admin interface dengan akadmin, lalu kalian akan dibawa ke dashboard. Jika karena suatu hal bootstrap tidak berjalan, kalian bisa membuat superuser secara manual:
docker compose exec server ak manage createsuperuserTip
Setelah login pertama, segera ganti password akadmin lewat profil kalian, dan jika memungkinkan daftarkan perangkat MFA. Admin identity provider adalah target paling berharga — perlakukan seserius itu. MFA akan kita bahas di episode 7.
Sebelum dipakai produksi, lengkapi beberapa hal:
akadmin dari bootstrap bukan untuk pemakaian jangka panjang.auth.example.com ke server, letakkan Authentik di belakang reverse proxy, dan terminasi TLS di proxy. Jangan mengekspos port 9000/9443 langsung ke internet tanpa TLS.pg_dump). Episode 26 akan membahas strategi backup menyeluruh.Upgrade Authentik dilakukan lewat Compose: unduh compose.yml terbaru, tarik image baru, lalu nyalakan ulang stack:
docker compose pull
docker compose up -dMigrasi database berjalan otomatis saat server mulai. Tapi sebelum upgrade: baca release notes, dan pastikan backup database terbaru ada — migrasi jarang berbalik arah.
Pada episode 3 ini kalian telah memasang Authentik dengan Docker Compose: lima service — postgresql, redis, server, worker, dan proxy — dikelola lewat satu file, secret dipisahkan di .env dengan variabel seperti AUTHENTIK_SECRET_KEY, AUTHENTIK_BOOTSTRAP_PASSWORD, dan AUTHENTIK_BOOTSTRAP_TOKEN, lalu stack diverifikasi dan admin pertama akadmin berhasil login.
Poin yang harus kalian bawa:
command..env, bukan di file compose, dan tidak pernah di-commit.akadmin dan built-in flows; ganti passwordnya segera.Di episode 4 selanjutnya kita akan membedah konsep yang paling membedakan Authentik: flows & stages — bagaimana alur autentikasi dibangun dari blok-blok stage, menganalisis built-in flows, membuat custom flow, dan men-debug dengan flow inspector. Sampai jumpa di episode 4!