Update README with Authelia setup instructions
Added comprehensive setup instructions for Authelia and Caddy.
This commit is contained in:
@@ -1 +1,144 @@
|
||||
# authelia-setup
|
||||
|
||||
Reusable Authelia SSO + Caddy reverse proxy stack.
|
||||
Single login covers all subdomains. Two-factor via TOTP app. Password reset via SMTP.
|
||||
|
||||
## What this does
|
||||
|
||||
- **Caddy** — reverse proxy with automatic HTTPS via Let's Encrypt
|
||||
- **Authelia** — SSO portal at `auth.mydomain.com`, protects any subdomain with `import authelia` in the Caddyfile
|
||||
- **Brevo/Migadu SMTP** — sends TOTP registration and password reset emails
|
||||
|
||||
## Machine requirements
|
||||
|
||||
- Ubuntu 24.04 LTS
|
||||
- Docker: `curl -fsSL https://get.docker.com | sh && sudo usermod -aG docker $USER`
|
||||
- No GPU needed
|
||||
|
||||
## Directory structure
|
||||
|
||||
```
|
||||
homelab-auth/
|
||||
├── caddy/
|
||||
│ └── Caddyfile ← replace mydomain.com with real domain
|
||||
├── authelia/
|
||||
│ ├── docker-compose.yml
|
||||
│ └── config/
|
||||
│ ├── configuration.yml ← replace mydomain.com with real domain
|
||||
│ └── users.yml ← replace mydomain.com, add real emails and hashes
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## First time setup
|
||||
|
||||
### 1. DNS
|
||||
At your domain registrar add two records:
|
||||
```
|
||||
@ → A → this machine's public IP
|
||||
* → CNAME → mydomain.com
|
||||
```
|
||||
|
||||
### 2. Replace placeholders
|
||||
In every file replace `mydomain.com` with your real domain.
|
||||
In `users.yml` replace `REPLACE_WITH_HASH` with real password hashes (see below).
|
||||
|
||||
### 3. Create secrets
|
||||
```bash
|
||||
mkdir -p ~/docker/authelia/config/secrets
|
||||
|
||||
openssl rand -hex 32 > ~/docker/authelia/config/secrets/jwt_secret
|
||||
openssl rand -hex 32 > ~/docker/authelia/config/secrets/session_secret
|
||||
openssl rand -hex 32 > ~/docker/authelia/config/secrets/storage_secret
|
||||
echo "your-smtp-password" > ~/docker/authelia/config/secrets/smtp_password
|
||||
|
||||
chmod 600 ~/docker/authelia/config/secrets/*
|
||||
```
|
||||
|
||||
### 4. Create .env files
|
||||
`~/docker/authelia/.env`:
|
||||
```
|
||||
MY_DOMAIN=yourdomain.com
|
||||
SMTP_USER=authelia@yourdomain.com
|
||||
DOCKER_MY_NETWORK=caddy_net
|
||||
TZ=America/New_York
|
||||
```
|
||||
|
||||
### 5. Generate password hashes
|
||||
Run once per unique password — all users can share one temporary password:
|
||||
```bash
|
||||
docker run --rm authelia/authelia:4.39.20 authelia crypto hash generate argon2 --password 'TempPass2026!'
|
||||
```
|
||||
Paste the output into `users.yml` for each user. Tell users to use "Forgot Password" on first login to set their own.
|
||||
|
||||
### 6. Create Docker network
|
||||
```bash
|
||||
docker network create caddy_net
|
||||
```
|
||||
|
||||
### 7. Start Authelia
|
||||
```bash
|
||||
cd ~/docker/authelia
|
||||
mkdir -p data
|
||||
sudo chown -R 1000:1000 config data
|
||||
docker compose up -d
|
||||
docker compose logs -f
|
||||
```
|
||||
|
||||
### 8. Start Caddy
|
||||
```bash
|
||||
cd ~/docker/caddy
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 9. Generate Caddy basic auth hash (if using basic auth anywhere)
|
||||
```bash
|
||||
docker exec caddy caddy hash-password --plaintext 'yourpassword'
|
||||
```
|
||||
|
||||
### 10. Reload Caddy after any Caddyfile changes
|
||||
```bash
|
||||
docker exec -w /etc/caddy caddy caddy reload
|
||||
```
|
||||
|
||||
## Adding a new protected service
|
||||
In the Caddyfile add:
|
||||
```caddyfile
|
||||
newservice.mydomain.com {
|
||||
import authelia
|
||||
reverse_proxy INTERNAL_IP:PORT
|
||||
}
|
||||
```
|
||||
Then reload Caddy. No Authelia changes needed.
|
||||
|
||||
## Adding a service WITHOUT Authelia (has its own login)
|
||||
```caddyfile
|
||||
newservice.mydomain.com {
|
||||
reverse_proxy INTERNAL_IP:PORT
|
||||
}
|
||||
```
|
||||
|
||||
## Adding users
|
||||
1. Edit `~/docker/authelia/config/users.yml`
|
||||
2. Add user block with hash
|
||||
3. Restart Authelia: `docker compose restart authelia`
|
||||
4. Tell user to use "Forgot Password" to set their own password
|
||||
|
||||
## TOTP setup (per user, first login)
|
||||
1. User logs in with username + temporary password
|
||||
2. Authelia emails a TOTP registration link
|
||||
3. User scans QR code with Google Authenticator, Authy, Bitwarden, or 1Password
|
||||
4. Every login after: username + password + 6-digit code
|
||||
|
||||
## Updating Authelia
|
||||
Only update when you have a specific reason (bug fix, security issue).
|
||||
Change the version tag in `docker-compose.yml` then:
|
||||
```bash
|
||||
docker compose pull authelia
|
||||
docker compose up -d authelia
|
||||
```
|
||||
|
||||
## Notes
|
||||
- Secrets never go in git — they live in `config/secrets/` which is gitignored
|
||||
- `.env` files never go in git
|
||||
- Session cookies are valid across all `*.mydomain.com` subdomains — one login covers everything
|
||||
- SQLite database lives in `~/docker/authelia/data/` — back this up to preserve user TOTP registrations
|
||||
|
||||
Reference in New Issue
Block a user