diff --git a/dashcaddy-api/app-templates.js b/dashcaddy-api/app-templates.js index 4597047..288e94f 100644 --- a/dashcaddy-api/app-templates.js +++ b/dashcaddy-api/app-templates.js @@ -2477,6 +2477,7 @@ const APP_TEMPLATES = { difficulty: "Intermediate", isSystemdService: true, systemdUnit: "sami-files.service", + logPath: "/opt/sami-files/logs/backend.log", healthCheck: "http://127.0.0.1:8765/api/health", healthCheckExpect: "ok", defaultPort: 8765, @@ -2511,6 +2512,7 @@ const APP_TEMPLATES = { "Enable + start: systemctl enable --now sami-files.service", "Edit /opt/sami-files/config/servers.yaml to add your SSH targets", "Add the Caddy snippet (above) to your Caddyfile and reload Caddy", + "Mount the log dir into DashCaddy: add `-v /opt/sami-files/logs:/opt/sami-files/logs:ro` to start.sh, then recreate the container", "Browse to https://files.sami — log in via DashCaddy SSO" ], troubleshooting: [ diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..22333b3 --- /dev/null +++ b/start.sh @@ -0,0 +1,48 @@ +#!/bin/bash +set -e +CONTAINER_NAME="dashcaddy-api" +IMAGE="dashcaddy-dashcaddy-api:latest" +DATA_DIR="/opt/dashcaddy/dashcaddy-api/data" +CADDYFILE="/etc/caddy/Caddyfile" +ASSETS_DIR="/var/www/dashcaddy-status/assets" +UPDATES_DIR="/opt/dashcaddy/updates" +BACKUPS_DIR="/opt/dashcaddy/backups" +HOST_IP="172.17.0.1" +# Local Technitium (binds 0.0.0.0:53) resolves *.sami + recurses for docker subnet +# external fallback. Without this the container only has 8.8.8.8 and every +# *.sami health-check probe fails with ENOTFOUND (uptime bars stay empty). +DNS_PRIMARY="100.121.150.22" # Technitium (Tailscale IP) — resolves *.sami +DNS_FALLBACK="8.8.8.8" + +# Always recreate to ensure env vars are correct (CONFIG_FILE defaults to /etc/dashcaddy/ which doesn't exist) +if docker ps -a --format "{{.Names}}" | grep -q "^${CONTAINER_NAME}$"; then + echo "[start.sh] Recreating container to apply correct env vars..." + docker rm -f ${CONTAINER_NAME} +fi + +echo "[start.sh] Creating container with full config..." +docker run -d --restart unless-stopped --name ${CONTAINER_NAME} \ + --dns ${DNS_PRIMARY} \ + --dns ${DNS_FALLBACK} \ + -p 127.0.0.1:3001:3001 \ + -v ${DATA_DIR}:/app/data \ + -v ${BACKUPS_DIR}:/app/backups \ + -v ${CADDYFILE}:/caddyfile \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v ${ASSETS_DIR}:/app/assets \ + -v ${UPDATES_DIR}:/app/updates \ + -v /opt/sami-files/logs:/opt/sami-files/logs:ro \ + -e NODE_ENV=production \ + -e SERVICES_FILE=/app/data/services.json \ + -e CONFIG_FILE=/app/data/config.json \ + -e BACKUP_DIR=/app/backups \ + -e DNS_CREDENTIALS_FILE=/app/data/dns-credentials.json \ + -e CREDENTIALS_FILE=/app/data/credentials.json \ + -e ENCRYPTION_KEY_FILE=/app/data/.encryption-key \ + -e HEALTH_HISTORY_FILE=/app/data/health-history.json \ + -e HEALTH_CONFIG_FILE=/app/data/health-config.json \ + -e CADDYFILE_PATH=/caddyfile \ + -e CADDY_ADMIN_URL=http://${HOST_IP}:2019 \ + -e ASSETS_DIR=/app/assets \ + -e DASHCADDY_API_SOURCE_DIR=/opt/dashcaddy/dashcaddy-api \ + ${IMAGE}