feat: Add environment configuration and update Caddy setup for DuckDNS

This commit is contained in:
2025-11-20 17:04:27 +02:00
parent 26f0d7f5f4
commit 28f306b065
4 changed files with 56 additions and 64 deletions

8
homelab/.env.example Normal file
View File

@@ -0,0 +1,8 @@
VAULT_DOMAIN=vault.example.com
AUTH_DOMAIN=auth.example.com
STORAGE_DOMAIN=storage.example.com
EMAIL=mail@example.com
APP_KEY=32characterslongrandomstring!
NC_ADMIN_USER=admin
NC_ADMIN_PASS=changeme
DUCKDNS_TOKEN=TOKEN

View File

@@ -1,18 +1,21 @@
# ===========================
# DuckDNS
# ===========================
(dns_duck) {
tls {
dns duckdns {env.DUCKDNS_TOKEN}
}
log {
output file {env.LOG_FILE}
format console
}
}
# =========================== # ===========================
# Vaultwarden # Vaultwarden
# =========================== # ===========================
{$VAULT_DOMAIN} { {$VAULT_DOMAIN} {
log { import dns_duck
level INFO
output file {$LOG_FILE} {
roll_size 10MB
roll_keep 10
}
}
tls {
dns duckdns {$DUCKDNS_TOKEN}
}
encode zstd gzip encode zstd gzip
@@ -23,17 +26,7 @@
# 2FAuth # 2FAuth
# =========================== # ===========================
{$AUTH_DOMAIN} { {$AUTH_DOMAIN} {
log { import dns_duck
level INFO
output file {$LOG_FILE} {
roll_size 10MB
roll_keep 10
}
}
tls {
dns duckdns {$DUCKDNS_TOKEN}
}
encode zstd gzip encode zstd gzip
@@ -44,21 +37,10 @@
# Nextcloud # Nextcloud
# =========================== # ===========================
{$STORAGE_DOMAIN} { {$STORAGE_DOMAIN} {
log { import dns_duck
level INFO
output file {$LOG_FILE} {
roll_size 10MB
roll_keep 10
}
}
tls {
dns duckdns {$DUCKDNS_TOKEN}
}
encode zstd gzip encode zstd gzip
reverse_proxy nextcloud:80 reverse_proxy nextcloud:80
} }

9
homelab/Dockerfile Normal file
View File

@@ -0,0 +1,9 @@
# Build Caddy with DuckDNS DNS provider
FROM caddy:latest-builder AS builder
RUN xcaddy build \
--with github.com/caddy-dns/duckdns
FROM caddy:latest
COPY --from=builder /usr/bin/caddy /usr/bin/caddy

View File

@@ -9,7 +9,7 @@ services:
volumes: volumes:
- ./services/vaultwarden:/data - ./services/vaultwarden:/data
environment: environment:
DOMAIN: "https://vault.example.com" # Change to yours DOMAIN: "https://${VAULT_DOMAIN}"
# ========================== # ==========================
# 2FAuth (2FA manager) # 2FAuth (2FA manager)
@@ -21,19 +21,17 @@ services:
volumes: volumes:
- ./services/2fauth:/data - ./services/2fauth:/data
environment: environment:
- APP_NAME=2FAuth APP_NAME: 2FAuth
- APP_ENV=production APP_ENV: production
- APP_DEBUG=false APP_DEBUG: false
- APP_TIMEZONE=Europe/Helsinki APP_TIMEZONE: UTC
- SITE_OWNER=admin@example.com # Change to yours SITE_OWNER: ${EMAIL}
- APP_KEY=SomeRandomStringOf32CharsExactly # Change to yours APP_KEY: ${APP_KEY}
- APP_URL=https://auth.example.com # Change to yours APP_URL: "https://${AUTH_DOMAIN}"
- ASSET_URL=https://auth.example.com # Change to yours ASSET_URL: "https://${AUTH_DOMAIN}"
- TRUSTED_PROXIES=* TRUSTED_PROXIES: '*'
- LOG_CHANNEL=daily LOG_CHANNEL: daily
- LOG_LEVEL=notice LOG_LEVEL: notice
networks:
- default
# ========================== # ==========================
# Nextcloud (Personal cloud / NAS) # Nextcloud (Personal cloud / NAS)
@@ -45,16 +43,16 @@ services:
volumes: volumes:
- ./services/nextcloud:/var/www/html - ./services/nextcloud:/var/www/html
environment: environment:
- NEXTCLOUD_ADMIN_USER=admin # Change to yours NEXTCLOUD_ADMIN_USER: ${NC_ADMIN_USER}
- NEXTCLOUD_ADMIN_PASSWORD=changeme # Change to a strong password NEXTCLOUD_ADMIN_PASSWORD: ${NC_ADMIN_PASS}
networks:
- default
# ========================== # ==========================
# Caddy (Reverse proxy) # Caddy (Reverse proxy)
# ========================== # ==========================
caddy: caddy:
image: caddy:2 build:
context: .
dockerfile: Dockerfile
container_name: caddy container_name: caddy
restart: always restart: always
ports: ports:
@@ -67,13 +65,12 @@ services:
- ./caddy-config:/config - ./caddy-config:/config
- ./caddy-data:/data - ./caddy-data:/data
environment: environment:
# For Caddy: hostnames only, no https:// VAULT_DOMAIN: ${VAULT_DOMAIN}
VAULT_DOMAIN: "vault.example.com" # Change to yours AUTH_DOMAIN: ${AUTH_DOMAIN}
AUTH_DOMAIN: "auth.example.com" # Change to yours STORAGE_DOMAIN: ${STORAGE_DOMAIN}
STORAGE_DOMAIN: "storage.example.com" # Change to yours EMAIL: ${EMAIL}
EMAIL: "admin@example.com" # Change to yours DUCKDNS_TOKEN: ${DUCKDNS_TOKEN}
DUCKDNS_TOKEN: "TOKEN" # Change to yours LOG_FILE: /data/access.log
LOG_FILE: "/data/access.log"
# ========================== # ==========================
# Portainer (Docker manager) # Portainer (Docker manager)
@@ -133,7 +130,3 @@ services:
- /proc:/host/proc:ro - /proc:/host/proc:ro
- /sys:/host/sys:ro - /sys:/host/sys:ro
networks:
default:
driver: bridge