63 lines
2.2 KiB
Bash
Executable File
63 lines
2.2 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=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" <<EOF
|
|
DATABASE_URL=postgresql://${DB_USER}:${DB_PASS}@localhost:${PG_PORT}/${DB_NAME}?host=${PG_SOCKET_DIR}
|
|
PORT=${REMOTE_PORT}
|
|
EOF
|
|
|
|
echo "==> 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 <<SERVICE
|
|
[Install]
|
|
WantedBy=default.target
|
|
|
|
[Service]
|
|
ExecStart=${BUN_PATH} run --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 restart 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/"
|