Add site-wide defaults: timezone, domain, Caddy network
Introduces a one-time configuration wizard (sudo ./setup.sh configure) that stores SITE_TZ, SITE_DOMAIN, and SITE_CADDY_NET in ~/docker/.config. Every service now uses these as prompt defaults so the user types common values once instead of re-answering the same questions for each service. - lib/common.sh: load_site_config / save_site_config; auto-loads on source; backward-compat BASE_DOMAIN alias kept for old .config files - setup.sh: run_site_configure wizard; first-run offer after base install; `sudo ./setup.sh configure` command to update defaults at any time - 14 services: TZ_VAL now honours SITE_TZ, falling back to /etc/timezone - 3 inline-heredoc services (filebrowser, homeassistant, ntfy): same fix - authelia: SITE_TZ/SITE_DOMAIN as prompt defaults; SITE_CADDY_NET replaces hardcoded caddy_net throughout (env, compose patch, network creation) - minecraft, frigate-audio: simplify BASE_DOMAIN read to use SITE_DOMAIN - sky-cam: SITE_TZ as default for timezone prompt https://claude.ai/code/session_01Y4dMKtkqkpvmgDKoRdzhTG
This commit is contained in:
@@ -24,7 +24,7 @@ install_actualbudget() {
|
||||
ensure_docker_dir_ownership "$AB_DIR"
|
||||
cd "$AB_DIR" || return 1
|
||||
|
||||
local TZ_VAL; TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
local TZ_VAL; TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
|
||||
cat > docker-compose.yml << 'AB_COMPOSE'
|
||||
name: actualbudget
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ install_arm() {
|
||||
cd "$ARM_DIR" || return 1
|
||||
|
||||
local TZ_VAL UID_VAL GID_VAL
|
||||
TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
UID_VAL=$(id -u "$ACTUAL_USER"); GID_VAL=$(id -g "$ACTUAL_USER")
|
||||
|
||||
cat > docker-compose.yml << ARM_COMPOSE
|
||||
|
||||
@@ -30,7 +30,7 @@ install_audiobookshelf() {
|
||||
ensure_docker_dir_ownership "$ABS_DIR"
|
||||
cd "$ABS_DIR" || return 1
|
||||
|
||||
local TZ_VAL; TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
local TZ_VAL; TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
|
||||
cat > docker-compose.yml << ABS_COMPOSE
|
||||
name: audiobookshelf
|
||||
|
||||
+10
-8
@@ -36,9 +36,10 @@ install_authelia() {
|
||||
echo ""
|
||||
echo " Authelia needs a few details to configure."
|
||||
echo ""
|
||||
local CADDY_NET="${SITE_CADDY_NET:-caddy_net}"
|
||||
local AUTHELIA_DOMAIN AUTHELIA_ADMIN_USER AUTHELIA_ADMIN_DISPLAY AUTHELIA_ADMIN_EMAIL
|
||||
local AUTHELIA_SMTP_HOST AUTHELIA_SMTP_PORT AUTHELIA_SMTP_USER AUTHELIA_SMTP_PASS AUTHELIA_TZ
|
||||
prompt_text " Your domain (e.g., example.com):" "example.com" AUTHELIA_DOMAIN
|
||||
prompt_text " Your domain (e.g., example.com):" "${SITE_DOMAIN:-example.com}" AUTHELIA_DOMAIN
|
||||
prompt_text " Admin username:" "admin" AUTHELIA_ADMIN_USER
|
||||
prompt_text " Admin display name:" "Administrator" AUTHELIA_ADMIN_DISPLAY
|
||||
prompt_text " Admin email:" "admin@${AUTHELIA_DOMAIN}" AUTHELIA_ADMIN_EMAIL
|
||||
@@ -46,7 +47,7 @@ install_authelia() {
|
||||
prompt_text " SMTP port:" "587" AUTHELIA_SMTP_PORT
|
||||
prompt_text " SMTP username (full email):" "authelia@${AUTHELIA_DOMAIN}" AUTHELIA_SMTP_USER
|
||||
prompt_text " SMTP password:" "" AUTHELIA_SMTP_PASS
|
||||
prompt_text " Timezone (e.g., America/New_York):" "America/New_York" AUTHELIA_TZ
|
||||
prompt_text " Timezone (e.g., America/New_York):" "${SITE_TZ:-America/New_York}" AUTHELIA_TZ
|
||||
|
||||
# ── Secrets ──────────────────────────────────────────────────────────────
|
||||
echo ""
|
||||
@@ -81,7 +82,7 @@ install_authelia() {
|
||||
cat > .env << AUTHELIA_ENV
|
||||
MY_DOMAIN=${AUTHELIA_DOMAIN}
|
||||
SMTP_USER=${AUTHELIA_SMTP_USER}
|
||||
DOCKER_MY_NETWORK=caddy_net
|
||||
DOCKER_MY_NETWORK=${CADDY_NET}
|
||||
TZ=${AUTHELIA_TZ}
|
||||
AUTHELIA_ENV
|
||||
|
||||
@@ -115,6 +116,7 @@ networks:
|
||||
caddy_net:
|
||||
external: true
|
||||
AUTHELIA_COMPOSE
|
||||
[ "$CADDY_NET" != "caddy_net" ] && sed -i "s/caddy_net/${CADDY_NET}/g" docker-compose.yml
|
||||
|
||||
# ── configuration.yml ────────────────────────────────────────────────────
|
||||
cat > config/configuration.yml << AUTHELIA_CONFIG
|
||||
@@ -199,12 +201,12 @@ AUTHELIA_USERS
|
||||
chown -R 1000:1000 "$AUTHELIA_DIR/config" "$AUTHELIA_DIR/data"
|
||||
log_success "Authelia configured at $AUTHELIA_DIR"
|
||||
|
||||
# ── caddy_net network ────────────────────────────────────────────────────
|
||||
if ! docker network ls --format '{{.Name}}' | grep -q "^caddy_net$"; then
|
||||
docker network create caddy_net >/dev/null 2>&1 && echo " ✓ Created docker network caddy_net" \
|
||||
|| echo " ⚠ Failed to create caddy_net"
|
||||
# ── Docker network ────────────────────────────────────────────────────────
|
||||
if ! docker network ls --format '{{.Name}}' | grep -q "^${CADDY_NET}$"; then
|
||||
docker network create "$CADDY_NET" >/dev/null 2>&1 && echo " ✓ Created docker network ${CADDY_NET}" \
|
||||
|| echo " ⚠ Failed to create ${CADDY_NET}"
|
||||
else
|
||||
echo " ✓ Docker network caddy_net already exists"
|
||||
echo " ✓ Docker network ${CADDY_NET} already exists"
|
||||
fi
|
||||
|
||||
# ── Caddyfile forward-auth snippet + portal block ────────────────────────
|
||||
|
||||
@@ -25,7 +25,7 @@ install_ddclient() {
|
||||
ensure_docker_dir_ownership "$DDCLIENT_DIR"
|
||||
cd "$DDCLIENT_DIR" || return 1
|
||||
|
||||
local TZ_VAL; TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
local TZ_VAL; TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
|
||||
cat > docker-compose.yml << 'DDCLIENT_COMPOSE'
|
||||
name: ddclient
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ install_emby() {
|
||||
cd "$EMBY_DIR" || return 1
|
||||
|
||||
local TZ_VAL UID_VAL GID_VAL
|
||||
TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
UID_VAL=$(id -u "$ACTUAL_USER"); GID_VAL=$(id -g "$ACTUAL_USER")
|
||||
|
||||
cat > docker-compose.yml << EMBY_COMPOSE
|
||||
|
||||
@@ -33,7 +33,7 @@ services:
|
||||
environment:
|
||||
- PUID=$(id -u "$ACTUAL_USER")
|
||||
- PGID=$(id -g "$ACTUAL_USER")
|
||||
- TZ=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
- TZ=${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}
|
||||
volumes:
|
||||
- ${FB_PATH}:/srv
|
||||
- ./database/filebrowser.db:/database/filebrowser.db
|
||||
|
||||
@@ -98,8 +98,7 @@ install_frigate-audio() {
|
||||
|
||||
# ── Frigate public URL ─────────────────────────────────────────────────────
|
||||
echo ""
|
||||
local BASE_DOMAIN=""
|
||||
[ -f "$DOCKER_DIR/.config" ] && BASE_DOMAIN=$(grep '^BASE_DOMAIN=' "$DOCKER_DIR/.config" 2>/dev/null | cut -d= -f2-)
|
||||
local BASE_DOMAIN="${SITE_DOMAIN:-}"
|
||||
local FRIGATE_PUBLIC_URL=""
|
||||
if [ -n "$BASE_DOMAIN" ]; then
|
||||
local _PFX=""
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ install_frigate() {
|
||||
ensure_docker_dir_ownership "$FRIGATE_DIR"
|
||||
cd "$FRIGATE_DIR" || return 1
|
||||
|
||||
local TZ_VAL; TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
local TZ_VAL; TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
|
||||
# Hardware detection: include /dev/dri only when a render node exists
|
||||
local DEVICE_BLOCK=""
|
||||
|
||||
@@ -50,7 +50,7 @@ services:
|
||||
restart: unless-stopped
|
||||
privileged: true
|
||||
environment:
|
||||
- TZ=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
- TZ=${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}
|
||||
volumes:
|
||||
- ./config:/config
|
||||
- /run/dbus:/run/dbus:ro
|
||||
|
||||
+1
-1
@@ -112,7 +112,7 @@ install_immich() {
|
||||
# ── Generate DB password ────────────────────────────────────────────────
|
||||
local DB_PASS TZ_VAL
|
||||
DB_PASS=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | head -c 32)
|
||||
TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
|
||||
# ── Write docker-compose.yml ────────────────────────────────────────────
|
||||
if [ -n "$EXTERNAL_LIBRARY" ]; then
|
||||
|
||||
@@ -33,7 +33,7 @@ install_jellyfin() {
|
||||
ensure_docker_dir_ownership "$JELLYFIN_DIR"
|
||||
cd "$JELLYFIN_DIR" || return 1
|
||||
|
||||
local TZ_VAL; TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
local TZ_VAL; TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
|
||||
# Hardware acceleration: only wire /dev/dri through if a render node exists,
|
||||
# otherwise the container would fail to start on a GPU-less host.
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ install_lyrion() {
|
||||
cd "$LYRION_DIR" || return 1
|
||||
|
||||
local TZ_VAL UID_VAL GID_VAL
|
||||
TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
UID_VAL=$(id -u "$ACTUAL_USER"); GID_VAL=$(id -g "$ACTUAL_USER")
|
||||
|
||||
cat > docker-compose.yml << LYRION_COMPOSE
|
||||
|
||||
@@ -33,7 +33,7 @@ install_magicmirror() {
|
||||
mkdir -p "$MM_BASE"
|
||||
chown "$ACTUAL_USER:$ACTUAL_USER" "$MM_BASE"
|
||||
|
||||
local TZ_VAL; TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
local TZ_VAL; TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
local i MM_PORT MM_DIR
|
||||
|
||||
for i in $(seq 1 "$MM_COUNT"); do
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ install_mealie() {
|
||||
cd "$MEALIE_DIR" || return 1
|
||||
|
||||
local TZ_VAL UID_VAL GID_VAL
|
||||
TZ_VAL=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
TZ_VAL="${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}"
|
||||
UID_VAL=$(id -u "$ACTUAL_USER"); GID_VAL=$(id -g "$ACTUAL_USER")
|
||||
|
||||
cat > docker-compose.yml << MEALIE_COMPOSE
|
||||
|
||||
@@ -953,8 +953,7 @@ except: pass
|
||||
esac
|
||||
|
||||
local MC_DOMAIN=""
|
||||
local BASE_DOMAIN=""
|
||||
[ -f "$DOCKER_DIR/.config" ] && BASE_DOMAIN=$(grep '^BASE_DOMAIN=' "$DOCKER_DIR/.config" 2>/dev/null | cut -d= -f2-)
|
||||
local BASE_DOMAIN="${SITE_DOMAIN:-}"
|
||||
if [ "$USE_PLAYIT" = true ] || [ "$USE_PORTFORWARD" = true ]; then
|
||||
if [ -n "$BASE_DOMAIN" ]; then
|
||||
local _PREFIX=""
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ services:
|
||||
NTFY_COMPOSE
|
||||
|
||||
cat > .env << NTFY_ENV
|
||||
TZ=$(cat /etc/timezone 2>/dev/null || echo "UTC")
|
||||
TZ=${SITE_TZ:-$(cat /etc/timezone 2>/dev/null || echo UTC)}
|
||||
NTFY_ENV
|
||||
|
||||
mkdir -p cache config
|
||||
|
||||
+1
-1
@@ -72,7 +72,7 @@ install_sky-cam() {
|
||||
local LATITUDE="" LONGITUDE="" TIMEZONE="" BASE_DIR="" CAMERAS_LIST="" SUNRISE_CAM=""
|
||||
prompt_text " Latitude (decimal degrees) [0.0000]:" "0.0000" LATITUDE
|
||||
prompt_text " Longitude (decimal degrees) [0.0000]:" "0.0000" LONGITUDE
|
||||
prompt_text " Timezone [America/New_York]:" "America/New_York" TIMEZONE
|
||||
prompt_text " Timezone [${SITE_TZ:-America/New_York}]:" "${SITE_TZ:-America/New_York}" TIMEZONE
|
||||
|
||||
echo ""
|
||||
echo " Camera names are short identifiers, e.g.: east north south west"
|
||||
|
||||
Reference in New Issue
Block a user