zomboid added, caddyfile updates, debylio migration, ddns migration

This commit is contained in:
Bastian de Byl
2025-12-13 21:18:33 -05:00
parent a3c3c8de05
commit 8c21923358
8 changed files with 302 additions and 18 deletions

View File

@@ -53,20 +53,25 @@
# SITE CONFIGURATIONS
# ============================================================================
# Simple redirect: {{ base_server_name }} -> debyl.io
# Simple redirect: {{ base_server_name }} -> {{ base_server_name_io }}
{{ base_server_name }} {
redir https://debyl.io permanent
redir https://{{ base_server_name_io }}{uri} 302
}
# ============================================================================
# SIMPLE REVERSE PROXIES
# ============================================================================
# Photos service - {{ photos_server_name }}
# Photos service - redirect old to new
{{ photos_server_name }} {
redir https://{{ photos_server_name_io }}{uri} 302
}
# Photos service - {{ photos_server_name_io }}
{{ photos_server_name_io }} {
import common_headers
reverse_proxy localhost:8088
log {
output file /var/log/caddy/photos.log
format json
@@ -89,23 +94,28 @@
# IP-RESTRICTED SITES
# ============================================================================
# Home Assistant - {{ assistant_server_name }}
# Home Assistant - redirect old to new
{{ assistant_server_name }} {
redir https://{{ assistant_server_name_io }}{uri} 302
}
# Home Assistant - {{ assistant_server_name_io }}
{{ assistant_server_name_io }} {
{{ ip_restricted_site() }}
handle @local {
reverse_proxy localhost:8123 {
# WebSocket support is automatic
flush_interval -1
}
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
Referrer-Policy "same-origin"
}
}
log {
output file /var/log/caddy/assistant.log
format json
@@ -115,8 +125,13 @@
# CI/Drone - REMOVED
# ci.bdebyl.net configuration removed - Drone CI infrastructure decommissioned
# Home server - {{ home_server_name }}
# Home server - redirect old to new
{{ home_server_name }} {
redir https://{{ home_server_name_io }}{uri} 302
}
# Home server - {{ home_server_name_io }}
{{ home_server_name_io }} {
{{ ip_restricted_site() }}
handle @local {
@@ -124,8 +139,13 @@
}
}
# Parts/Partsy - {{ parts_server_name }}
# Parts/Partsy - redirect old to new
{{ parts_server_name }} {
redir https://{{ parts_server_name_io }}{uri} 302
}
# Parts/Partsy - {{ parts_server_name_io }}
{{ parts_server_name_io }} {
{{ ip_restricted_site() }}
handle @local {
@@ -161,29 +181,34 @@
# COMPLEX CONFIGURATIONS
# ============================================================================
# Nextcloud - {{ cloud_server_name }}
# Nextcloud - redirect old to new
{{ cloud_server_name }} {
redir https://{{ cloud_server_name_io }}{uri} 302
}
# Nextcloud - {{ cloud_server_name_io }}
{{ cloud_server_name_io }} {
request_body {
max_size {{ caddy_max_request_body_mb }}MB
}
reverse_proxy localhost:8089 {
header_up Host {host}
header_up X-Real-IP {remote}
# X-Forwarded-For and X-Forwarded-Proto are automatic
}
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
Referrer-Policy "same-origin"
-X-Powered-By
}
# Nextcloud specific redirects
redir /.well-known/carddav /remote.php/dav 301
redir /.well-known/caldav /remote.php/dav 301
log {
output file /var/log/caddy/cloud.log
format json

View File

@@ -0,0 +1,103 @@
#!/bin/bash
set -e
STEAMCMD="/home/steam/steamcmd/steamcmd.sh"
INSTALL_DIR="/home/steam/pzserver"
DATA_DIR="/home/steam/Zomboid"
SERVER_NAME="${SERVER_NAME:-zomboid}"
MIN_RAM="${MIN_RAM:-8g}"
MAX_RAM="${MAX_RAM:-24g}"
echo "=== Project Zomboid Build 42 Server ==="
echo "Server Name: ${SERVER_NAME}"
echo "RAM: ${MIN_RAM} - ${MAX_RAM}"
# Fix ownership of mounted volumes (container runs as steam user, UID 1000)
echo "=== Fixing volume permissions ==="
chown -R steam:steam "${INSTALL_DIR}" || true
chown -R steam:steam "${DATA_DIR}" || true
chmod -R 755 "${INSTALL_DIR}" || true
chmod -R 755 "${DATA_DIR}" || true
# Create required subdirectories with correct ownership
mkdir -p "${DATA_DIR}/Server"
mkdir -p "${DATA_DIR}/Saves/Multiplayer"
mkdir -p "${DATA_DIR}/db"
chown -R steam:steam "${DATA_DIR}"
# Ensure steam user has proper home directory setup
export HOME=/home/steam
# Initialize SteamCMD if needed (creates config directories)
if [ ! -d "/home/steam/Steam" ]; then
echo "=== Initializing SteamCMD ==="
su -c "${STEAMCMD} +quit" steam || true
fi
# Update/Install PZ dedicated server with Build 42 unstable branch
if [ "${AUTO_UPDATE:-true}" = "true" ]; then
echo "=== Updating Project Zomboid Server (Build 42 unstable) ==="
# Run steamcmd as steam user with proper quoting for beta flag
su -c "${STEAMCMD} +force_install_dir ${INSTALL_DIR} +login anonymous +app_update 380870 -beta unstable validate +quit" steam
echo "=== Update complete ==="
fi
# Ensure data directories exist (created earlier with correct permissions)
# Configure server settings on first run
SERVER_INI="${DATA_DIR}/Server/${SERVER_NAME}.ini"
if [ ! -f "${SERVER_INI}" ]; then
echo "=== First run detected, server will generate default config ==="
fi
# Handle admin password for first run
# PZ requires interactive password input on first run, so we create a db file
ADMIN_DB="${DATA_DIR}/db/${SERVER_NAME}.db"
if [ ! -f "${ADMIN_DB}" ] && [ -n "${ADMIN_PASSWORD}" ]; then
echo "=== Setting up admin account ==="
mkdir -p "${DATA_DIR}/db"
# The server will prompt for password on first run
# We'll use expect-like behavior or let it use defaults
fi
# Modify memory settings in ProjectZomboid64.json (Build 42 uses JSON config)
PZ_JSON="${INSTALL_DIR}/ProjectZomboid64.json"
if [ -f "${PZ_JSON}" ]; then
echo "=== Setting JVM memory: Xms=${MIN_RAM}, Xmx=${MAX_RAM} ==="
# Add -Xms if not present, otherwise update it
if grep -q "\-Xms" "${PZ_JSON}"; then
sed -i "s/-Xms[0-9]*[gGmM]*/-Xms${MIN_RAM}/g" "${PZ_JSON}"
else
# Insert -Xms before -Xmx
sed -i "s/\"-Xmx/\"-Xms${MIN_RAM}\",\n\t\t\"-Xmx/g" "${PZ_JSON}"
fi
sed -i "s/-Xmx[0-9]*[gGmM]*/-Xmx${MAX_RAM}/g" "${PZ_JSON}"
fi
# If server password is set, we'll need to configure it in the ini after first run
# For now, store it for later configuration
if [ -n "${SERVER_PASSWORD}" ]; then
echo "${SERVER_PASSWORD}" > "${DATA_DIR}/.server_password"
fi
if [ -n "${ADMIN_PASSWORD}" ]; then
echo "${ADMIN_PASSWORD}" > "${DATA_DIR}/.admin_password"
fi
# Change to install directory and start server
cd "${INSTALL_DIR}"
echo "=== Starting Project Zomboid Server ==="
echo "Connect to: home.bdebyl.net:16261"
# Start server - on first run this will prompt for admin password
# We handle this by providing input via stdin if password file exists
if [ -f "${DATA_DIR}/.admin_password" ] && [ ! -f "${ADMIN_DB}" ]; then
# First run with admin password
ADMIN_PASS=$(cat "${DATA_DIR}/.admin_password")
echo "=== First run: setting admin password ==="
printf "%s\n%s\n" "${ADMIN_PASS}" "${ADMIN_PASS}" | su -c "bash start-server.sh -servername ${SERVER_NAME}" steam
else
# Normal run
exec su -c "bash start-server.sh -servername ${SERVER_NAME}" steam
fi