start.sh auto-sync dashboard bundle into /var/www/dashcaddy-status/
After every rebuild the freshly-baked dashboard bundle lives in /opt/dashcaddy/status/dist/ + sw.js. DNS2 also serves files from /var/www/dashcaddy-status/dist/ + sw.js (the original Windows-installer mirror path). Without an explicit copy step between build and start.sh, the served bundle stays on whatever hash was there before, while the API responds with new code. That mismatch is what shows up in the dashboard as "version unavailable" + "no data" widgets — saw it in the deploy that followed DC-046/047 (fixed by a manual cp this time, never again). Sync block runs before docker run: cp /opt/dashcaddy/status/dist/*.js /var/www/dashcaddy-status/dist/ cp /opt/dashcaddy/status/sw.js /var/www/dashcaddy-status/ cp /opt/dashcaddy/status/index.html /var/www/dashcaddy-status/ All guarded so set -e doesn't kill the container start on a single per-file failure (e.g. read-only mount, missing dir). Missing source dir is a WARN + no-op rather than a fatal — fresh installs without status/dist/ don't get a stale-bundle problem, just a log line. Test: scripts/test-start-sh-sync.sh — 7 assertions across 4 cases (fresh-copy, missing-source, idempotent-re-sync, set-e-survives-permission- denied). All pass.
This commit is contained in:
@@ -115,6 +115,26 @@ fi
|
||||
# that the local tailscaled handles; we never need to mutate state
|
||||
# from inside the container.
|
||||
echo "[start.sh] Creating container with full config..."
|
||||
|
||||
# Sync the freshly-built dashboard bundle into the static directory Caddy
|
||||
# serves. The Docker image bakes dist/ from the source tree at build time,
|
||||
# but DNS2 also serves /var/www/dashcaddy-status/dist/ (the original
|
||||
# Windows installer mirror path). If we don't sync after every build, the
|
||||
# served bundle keeps the OLD hash while the API responds with new code,
|
||||
# which shows up in the dashboard as "version unavailable" + "no data"
|
||||
# widgets because the new API surface doesn't match the old widget code.
|
||||
# This step is idempotent and ~50ms — always safe to run.
|
||||
echo "[start.sh] Syncing dashboard bundle into static dir..."
|
||||
mkdir -p /var/www/dashcaddy-status/dist
|
||||
if [ -d /opt/dashcaddy/status/dist ]; then
|
||||
cp /opt/dashcaddy/status/dist/*.js /var/www/dashcaddy-status/dist/ 2>/dev/null || true
|
||||
cp /opt/dashcaddy/status/sw.js /var/www/dashcaddy-status/ 2>/dev/null || true
|
||||
cp /opt/dashcaddy/status/index.html /var/www/dashcaddy-status/ 2>/dev/null || true
|
||||
echo "[start.sh] Bundle synced ($(ls /opt/dashcaddy/status/dist/*.js 2>/dev/null | wc -l) bundle files + sw.js + index.html)."
|
||||
else
|
||||
echo "[start.sh] WARN: /opt/dashcaddy/status/dist missing — skipping sync (frontend will be stale)."
|
||||
fi
|
||||
|
||||
docker run -d --restart unless-stopped --name ${CONTAINER_NAME} \
|
||||
--add-host=get.dashcaddy.net:194.233.88.206 \
|
||||
--add-host=get2.dashcaddy.net:194.233.88.206 \
|
||||
|
||||
Reference in New Issue
Block a user