#!/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=3003 DB_NAME="movie_select" PG_SOCKET_DIR="/home/serve/tmp" PG_PORT=5433 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 -h ${PG_SOCKET_DIR} -p ${PG_PORT} ${DB_NAME} 2>/dev/null || echo 'Database already exists'" echo "==> Fetching PostgreSQL password..." DB_PASS=$(ssh "${REMOTE_HOST}" "awk -F: '{print \$5}' ~/.pgpass | head -1") DB_USER="serve" echo "==> Creating .env on server..." ssh "${REMOTE_HOST}" "cat > ${REMOTE_APP_DIR}/.env" < Deploying app files..." bash deploy.sh echo "==> Running database migration..." ssh "${REMOTE_HOST}" "cd ${REMOTE_APP_DIR} && psql -h ${PG_SOCKET_DIR} -p ${PG_PORT} -d ${DB_NAME} < drizzle/0000_parched_valeria_richards.sql 2>&1 || echo 'Tables may already exist'" echo "==> Creating systemd service..." ssh "${REMOTE_HOST}" REMOTE_APP_DIR="${REMOTE_APP_DIR}" bash <<'ENDSSH' BUN_PATH=$(which bun) mkdir -p ~/.config/systemd/user cat > ~/.config/systemd/user/movie-select.service < 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/"