Files
movie-select/setup-server.sh
Felix Förtsch 265cd329f6 refactor to react/vite/hono/drizzle/postgresql stack
replace vanilla TS + Bun.serve() + MariaDB with:
- frontend: React 19, Vite 6, TanStack Router/Query, Tailwind v4
- backend: Hono + @hono/node-server, Drizzle ORM, PostgreSQL, Zod
- shared: algorithm, round-state, types in src/shared/
- tooling: Biome (lint/format), Vitest (tests)
- deploy: static files at /movie-select/, API at /movie-select/api

URL scheme changes from /movies/ to /movie-select/,
API from action-based to RESTful endpoints.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 15:03:35 +01:00

63 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Run once to set up the movie-select service on Uberspace 8.
# Usage: bash setup-server.sh
set -euo pipefail
REMOTE_HOST="serve"
REMOTE_APP_DIR="/home/serve/services/movie-select"
REMOTE_STATIC_DIR="/var/www/virtual/serve/html/movie-select"
REMOTE_PORT=3001
DB_NAME="movie_select"
echo "==> Creating app + static directories on server..."
ssh "${REMOTE_HOST}" "mkdir -p ${REMOTE_APP_DIR} ${REMOTE_STATIC_DIR}"
echo "==> Creating PostgreSQL database (if not exists)..."
ssh "${REMOTE_HOST}" "createdb ${DB_NAME} 2>/dev/null || echo 'Database already exists'"
echo "==> Fetching PostgreSQL credentials..."
DB_PASS=$(ssh "${REMOTE_HOST}" "my_print_defaults client 2>/dev/null | grep -oP '(?<=--password=).*' || echo ''")
DB_USER="serve"
DB_HOST="localhost"
DB_PORT="5432"
echo "==> Creating .env on server..."
ssh "${REMOTE_HOST}" "cat > ${REMOTE_APP_DIR}/.env" <<EOF
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@${DB_HOST}:${DB_PORT}/${DB_NAME}
PORT=${REMOTE_PORT}
EOF
echo "==> Deploying app files..."
bash deploy.sh
echo "==> Detecting node path on server..."
NODE_PATH=$(ssh "${REMOTE_HOST}" 'which node || echo "$HOME/.local/bin/node"')
echo " node at: ${NODE_PATH}"
echo "==> Creating systemd service..."
ssh "${REMOTE_HOST}" NODE_PATH="${NODE_PATH}" REMOTE_APP_DIR="${REMOTE_APP_DIR}" bash <<'ENDSSH'
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/movie-select.service <<SERVICE
[Install]
WantedBy=default.target
[Service]
ExecStart=${NODE_PATH} --env-file=.env src/server/index.ts
WorkingDirectory=${REMOTE_APP_DIR}
Restart=on-failure
RestartSec=3
SERVICE
systemctl --user daemon-reload
systemctl --user enable movie-select
systemctl --user start movie-select
ENDSSH
echo "==> Configuring web backend for API..."
ssh "${REMOTE_HOST}" "uberspace web backend add /movie-select/api port ${REMOTE_PORT} --remove-prefix 2>/dev/null || uberspace web backend set /movie-select/api port ${REMOTE_PORT} --remove-prefix"
echo "==> Service status:"
ssh "${REMOTE_HOST}" "systemctl --user status movie-select --no-pager"
echo ""
echo "Done. Live at https://serve.uber.space/movie-select/"