Files
greatbear/docker-entrypoint.sh
T
tanshu 0ff90cde27 Rebuild deploy process on the project template
- Dockerfile: deps → builder → pb-downloader → runner stages, cross-arch
  (BUILDPLATFORM node stages, TARGETARCH PocketBase binary), Debian slim
  runner, VOLUME /app/pb_data, dual healthcheck, docker-entrypoint.sh
- docker-entrypoint.sh: bash supervisor replacing scripts/run-all.mjs
- Makefile: build-production (multi-arch push from git remote),
  build-check, build-check-local
- deploy.sh [tag]: make build-production then ansible-playbook with tag
- drop .env/.env.example (credentials live in ansible/vars/default.yml)
2026-09-03 10:24:48 +05:30

62 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Container entrypoint: runs PocketBase and the TanStack Start site server
# side by side.
# 1. starts PocketBase (data in $PB_DATA_DIR, migrations from ./pb_migrations)
# 2. waits for its health endpoint
# 3. bootstraps the superuser account (idempotent upsert)
# 4. seeds initial content (idempotent, create-if-missing)
# 5. starts the site server
#
# If either process dies the container exits non-zero so Docker restarts it.
set -e
PB_DATA="${PB_DATA_DIR:-/app/pb_data}"
PB_HTTP="${PB_HTTP:-0.0.0.0:8090}"
pb_pid=""
site_pid=""
cleanup() {
[ -n "$site_pid" ] && kill "$site_pid" 2>/dev/null || true
[ -n "$pb_pid" ] && kill "$pb_pid" 2>/dev/null || true
wait 2>/dev/null || true
}
trap cleanup INT TERM
echo "[entrypoint] starting PocketBase…"
./pocketbase serve \
--http="$PB_HTTP" \
--dir="$PB_DATA" \
--migrationsDir=./pb_migrations \
--publicDir=./pb_public &
pb_pid=$!
echo "[entrypoint] waiting for PocketBase health…"
for _ in $(seq 1 120); do
if curl -fsS http://127.0.0.1:8090/api/health > /dev/null 2>&1; then
break
fi
sleep 0.5
done
if [ -n "${PB_SUPERUSER_EMAIL:-}" ] && [ -n "${PB_SUPERUSER_PASSWORD:-}" ]; then
./pocketbase superuser upsert "$PB_SUPERUSER_EMAIL" "$PB_SUPERUSER_PASSWORD" \
--dir="$PB_DATA" --migrationsDir=./pb_migrations || true
echo "[entrypoint] superuser ensured"
node scripts/seed.mjs || echo "[entrypoint] seed failed (continuing)"
else
echo "[entrypoint] PB_SUPERUSER_EMAIL/PASSWORD not set — skipping superuser + seed"
fi
echo "[entrypoint] starting site server on :${PORT}…"
node .output/server/index.mjs &
site_pid=$!
set +e
wait -n "$pb_pid" "$site_pid"
exit_code=$?
echo "[entrypoint] a child process exited with code $exit_code — shutting down"
cleanup
exit "$exit_code"