Some checks failed
CI / Test backend (pull_request) Failing after 11s
CI / Check ui (pull_request) Failing after 11s
CI / Docker / backend (pull_request) Has been skipped
CI / Docker / runner (pull_request) Has been skipped
CI / Docker / ui (pull_request) Has been skipped
CI / Docker / caddy (pull_request) Successful in 2m53s
Release / Test backend (push) Successful in 19s
Release / Check ui (push) Successful in 33s
Release / Docker / caddy (push) Failing after 1m26s
Release / Docker / ui (push) Failing after 11s
Release / Docker / backend (push) Successful in 2m2s
Release / Docker / runner (push) Successful in 2m24s
Release / Gitea Release (push) Has been skipped
- Add email/email_verified/verification_token/verification_token_exp fields
to app_users PocketBase schema (pb-init-v3.sh)
- Add SMTP env vars to UI service in docker-compose.yml
- New email.ts: raw TLS SMTP mailer via Node tls module, sendVerificationEmail()
- createUser() now takes email param, stores verification token (24h TTL)
- loginUser() throws 'Email not verified' when email_verified is false
- New /verify-email route: validates token, verifies user, auto-logs in
- Login page: email field in register form, check-inbox state after register
- /api/auth/register (iOS): returns { pending_verification, email } instead of token
- Add pb.libnovel.cc and storage.libnovel.cc Caddy virtual hosts for homelab runner
- Add homelab runner docker-compose and libnovel.sh helper script
101 lines
2.7 KiB
Bash
101 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# ── LibNovel — production management script ───────────────────────────────────
|
|
# Prerequisites on the server:
|
|
# - docker + docker compose plugin
|
|
# - doppler CLI authenticated (doppler setup run once in the repo directory)
|
|
# - docker-compose.yml present in the same directory as this script
|
|
#
|
|
# Usage: ./libnovel.sh <command> [service]
|
|
#
|
|
# up Start all services (detached)
|
|
# down Stop all services
|
|
# restart Stop then start all services
|
|
# restart <svc> Restart a single service
|
|
# pull Pull latest images from Docker Hub (uses GIT_TAG from Doppler)
|
|
# update Pull images then recreate containers
|
|
# logs Tail all logs
|
|
# logs <svc> Tail a specific service
|
|
# ps Show running containers
|
|
# shell <svc> Open a shell in a running container
|
|
# init Run one-shot init containers
|
|
# secrets Print all Doppler secrets (debug)
|
|
# ──────────────────────────────────────────────────────────────────────────────
|
|
|
|
DC="doppler run -- docker compose"
|
|
CMD="${1:-help}"
|
|
SVC="${2:-}"
|
|
|
|
case "$CMD" in
|
|
up)
|
|
$DC up -d
|
|
;;
|
|
|
|
down)
|
|
$DC down
|
|
;;
|
|
|
|
restart)
|
|
if [[ -n "$SVC" ]]; then
|
|
$DC restart "$SVC"
|
|
else
|
|
$DC down
|
|
$DC up -d
|
|
fi
|
|
;;
|
|
|
|
pull)
|
|
$DC pull backend runner ui caddy
|
|
;;
|
|
|
|
update)
|
|
$DC pull backend runner ui caddy
|
|
$DC up -d
|
|
;;
|
|
|
|
logs)
|
|
if [[ -n "$SVC" ]]; then
|
|
$DC logs -f --tail=100 "$SVC"
|
|
else
|
|
$DC logs -f --tail=50
|
|
fi
|
|
;;
|
|
|
|
ps)
|
|
$DC ps
|
|
;;
|
|
|
|
shell)
|
|
[[ -z "$SVC" ]] && { echo "Usage: $0 shell <service>"; exit 1; }
|
|
$DC exec "$SVC" sh
|
|
;;
|
|
|
|
init)
|
|
$DC run --rm minio-init
|
|
$DC run --rm pb-init
|
|
$DC run --rm postgres-init
|
|
;;
|
|
|
|
secrets)
|
|
doppler secrets --project libnovel --config prd
|
|
;;
|
|
|
|
help|*)
|
|
echo "Usage: $0 <command> [service]"
|
|
echo ""
|
|
echo " up Start all services"
|
|
echo " down Stop all services"
|
|
echo " restart Full restart"
|
|
echo " restart <svc> Restart one service"
|
|
echo " pull Pull latest images from Docker Hub"
|
|
echo " update Pull + recreate containers"
|
|
echo " logs Tail all logs"
|
|
echo " logs <svc> Tail one service"
|
|
echo " ps Show running containers"
|
|
echo " shell <svc> Shell into a container"
|
|
echo " init Run init containers (first-time setup)"
|
|
echo " secrets Print Doppler secrets"
|
|
;;
|
|
esac
|