Groundwork for reusing this codebase per-client (own VPS/DB/bot per
cafe): the operational config (bot token, DB URL, secrets, Checkbox PRRO
creds) was already .env/Setting-driven, but ~13 spots still hardcoded the
literal string "Bober BBQ" instead of reading the existing cafe_name
Setting, and the webapp's static shell (index.html title, PWA manifest)
had no templating at all since Settings only load after JS boots.
- Route the remaining hardcoded strings through Setting.get("cafe_name",
"Bober BBQ") — same pattern already used correctly in bot/handlers/
start.py. Every fallback stays "Bober BBQ", so production is byte-
identical with no cafe_name override.
- Template webapp/index.html via Vite's native %VITE_CAFE_NAME% HTML
replacement, backed by a committed webapp/.env (default "Bober BBQ",
no secrets) with a per-client override via gitignored .env.local.
- Add webapp/scripts/gen-manifest.mjs to generate manifest.json from a
new manifest.template.json the same way, since Vite doesn't process
public/ assets — wired into the build script.
- Parameterize deploy.sh's systemd unit names and the admin log-viewer's
log paths via optional SERVICE_WEB/SERVICE_BOT/LOG_FILE_WEB/
LOG_FILE_BOT env vars, defaulting to today's literal values.
- Rewrite docs/DEPLOYMENT.md into a repeatable new-client runbook (fixed
an existing /opt/bober-bbq vs /opt/bober-bbq-bot inconsistency, added
a rebranding checklist).
Verified via a smoke test that every changed string still renders
"Bober BBQ" with no overrides present (matching prod's actual .env/DB
state), and that webapp builds both with and without a VITE_CAFE_NAME
override produce the expected output — including a no-override rebuild
confirming byte-identical output to before this change.
31 lines
927 B
Bash
Executable file
31 lines
927 B
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
|
|
# SERVICE_WEB/SERVICE_BOT let a differently-named deployment (e.g. a second
|
|
# client on the same codebase) override the systemd unit names via .env
|
|
# without editing this script. Read directly instead of sourcing the whole
|
|
# .env, so unrelated values (secrets, tokens) never end up in this shell.
|
|
SERVICE_WEB=$(grep -E '^SERVICE_WEB=' .env 2>/dev/null | cut -d= -f2-)
|
|
SERVICE_BOT=$(grep -E '^SERVICE_BOT=' .env 2>/dev/null | cut -d= -f2-)
|
|
SERVICE_WEB="${SERVICE_WEB:-bober-bbq-web}"
|
|
SERVICE_BOT="${SERVICE_BOT:-bober-bbq-bot}"
|
|
|
|
echo "==> git pull"
|
|
git pull
|
|
|
|
echo "==> python deps"
|
|
.venv/bin/pip install -q -r requirements.txt
|
|
|
|
echo "==> webapp build"
|
|
cd webapp
|
|
npm install --silent
|
|
npm run build
|
|
cd ..
|
|
|
|
echo "==> restart services"
|
|
sudo systemctl restart "$SERVICE_WEB" "$SERVICE_BOT"
|
|
|
|
sleep 2
|
|
sudo systemctl is-active "$SERVICE_WEB" "$SERVICE_BOT"
|
|
echo "==> deploy done"
|