Memahami storage backend Authelia yang menyimpan data permanen seperti TOTP secret dan kredensial WebAuthn: memilih antara SQLite, MySQL, dan PostgreSQL, konfigurasi di configuration.yml, menjalankan migrasi schema, serta strategi backup agar perangkat MFA pengguna tidak hilang.

Di episode 7, session kalian simpan di Redis: cepat, sementara, dan lenyap saat kedaluwarsa. Tapi Authelia punya data yang tidak boleh hilang — data permanen yang menentukan apakah pengguna bisa login kembali besok. Session memang sementara, tetapi kepercayaan yang membangunnya harus bertahan.
Data permanen ini disimpan di storage backend, sebuah database yang mengingat: TOTP secret, kredensial WebAuthn, device ID Duo, token verifikasi identitas, hingga record consent untuk OIDC. Jika database ini rusak tanpa backup, setiap pengguna harus mendaftarkan ulang seluruh perangkat MFA-nya — satu malam yang melelahkan bagi admin dan pengguna. Di episode ini kalian akan memilih backend yang tepat, mengonfigurasinya, menjalankan migrasi schema, dan menyusun strategi backup yang sehat.
Storage backend adalah memori jangka panjang Authelia. Isinya antara lain:
Dengan kata lain: apapun yang harus diingat Authelia setelah proses login selesai, ada di database ini. Kehilangan database berarti kehilangan akses.
Authelia mendukung tiga opsi storage:
storage:
local:
path: "/config/db.sqlite3"Perhatikan encryption_key di konfigurasi PostgreSQL. Kunci ini mengenkripsi data sensitif seperti TOTP secret dan private key WebAuthn saat disimpan di database — layer pertahanan terakhir jika file database bocor. Hanya tersedia untuk MySQL dan PostgreSQL, bukan SQLite.
Important
Kunci encryption_key harus sama di semua instance Authelia dan wajib dibackup. Tanpa kunci ini, data terenkripsi tidak bisa dibaca — bukan hanya sulit dibaca, melainkan mustahil didekripsi. Kehilangan kunci sama dengan kehilangan database.
Secara umum, konfigurasi storage mengikuti pola yang sama: alamat server, nama database, user, dan password.
storage:
mysql:
address: "tcp://mysql:3306"
database: "authelia"
username: "authelia"
password: "rahasia-database"
encryption_key: "kunci-enkripsi-panjang-sama-disemua-instance"Sebelum Authelia bisa dipakai, database dan user-nya harus dibuat lebih dulu di server MySQL atau PostgreSQL. Buat user khusus dengan hak akses terbatas pada database authelia saja — jangan pernah memakai akun root.
Jika kalian berpindah dari SQLite ke PostgreSQL, urutan yang aman adalah: backup dulu, buat database tujuan, lalu lakukan migrasi dengan CLI sambil memindahkan data pengguna lewat perintah export dan import.
Authelia berkembang cepat, dan setiap versi baru bisa mengubah struktur tabel database. Schema inilah yang dijaga tetap sinkron oleh migrasi. Secara default, Authelia otomatis menjalankan migrasi ke atas saat startup. Untuk kendali penuh, tersedia subcommand CLI:
authelia storage migrate up
authelia storage migrate history
authelia storage migrate list-upmigrate up: menjalankan semua migrasi yang belum diterapkan.migrate history: melihat riwayat versi schema.migrate list-up dan migrate list-down: memeriksa migrasi yang tersedia sebelum dijalankan.Ketika kalian mengubah konfigurasi storage (misalnya berpindah dari SQLite ke PostgreSQL), Authelia menyesuaikan schema di database tujuan secara otomatis saat pertama kali terhubung. Proses berpindah backend bisa ditampilkan sebagai perubahan konfigurasi:
storage:
local:
path: "/config/db.sqlite3"
postgres:
address: "tcp://postgres:5432"
database: "authelia"
username: "authelia"
password: "rahasia-database"Caution
Selalu backup sebelum menjalankan migrasi. Migrasi ke atas umumnya aman, tetapi membalik migrasi ke bawah untuk mendukung versi Authelia lama adalah operasi rumit. Kebiasaan backup-selalu-tinggal-backup akan menyelamatkan kalian di saat yang paling tidak terduga.
Backup storage Authelia tidak berbeda dengan backup database biasa, dengan satu tambahan wajib: jangan lupa encryption_key. Rencanakan backup sebagai berikut:
db.sqlite3 saat Authelia berhenti, atau gunakan snapshot konsisten. Jangan menyalin file yang sedang ditulis aktif.pg_dump atau backup fisik, lalu simpan hasilnya di lokasi terpisah.mysqldump dengan pola yang sama.pg_dump -h localhost -U authelia authelia > authelia-backup.sqlSelain dump database, Authelia menyediakan perintah export untuk data spesifik pengguna — berguna saat memindahkan sebagian data antar instance, misalnya export TOTP configuration:
authelia storage user totp export
authelia storage user webauthn exportUntuk satu instance homelab, SQLite hampir selalu cukup. Namun ketika pengguna bertambah dan kalian menambah instance Authelia (untuk ketersediaan tinggi), perhatikan hal berikut:
encryption_key dipakai.Poin kunci episode ini:
encryption_key menambah enkripsi-at-rest, tetapi wajib dibackup bersama database.authelia storage migrate.encryption_key adalah syarat mutlaknya.Sekarang fondasi penyimpanan sudah kokoh, saatnya menyalakan lapisan kedua keamanan yang telah kalian janjikan di episode 6: two_factor. Di episode 9, kalian akan memahami TOTP — kode enam digit yang berubah setiap 30 detik — mulai dari cara kerjanya secara kriptografis hingga proses enrollment dan konfigurasinya.