67bd0d0bbb
Hop-State: A_06FP97T67MMQBS4JYJVZ710 Hop-Proposal: R_06FP97R88JYXTBZTNVXV08G Hop-Task: T_06FP95PNKD7PXAMPWPRWSD8 Hop-Attempt: AT_06FP95PNKE2R52XYNMKVRWG
71 lines
2.3 KiB
Bash
Executable File
71 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
APP_DIR="${APP_DIR:-/opt/synapsis}"
|
|
DATA_DIR="${DATA_DIR:-/var/lib/synapsis}"
|
|
ENV_FILE="${ENV_FILE:-/etc/synapsis.env}"
|
|
REPO_URL="${REPO_URL:-https://githop.xyz/GnosysLabs/Synapsis.git}"
|
|
BRANCH="${BRANCH:-main}"
|
|
|
|
if [[ ${EUID} -ne 0 ]]; then
|
|
echo "Run this installer as root." >&2
|
|
exit 1
|
|
fi
|
|
|
|
for command in git node npm openssl runuser systemctl; do
|
|
command -v "$command" >/dev/null || { echo "Missing required command: $command" >&2; exit 1; }
|
|
done
|
|
|
|
node_major="$(node -p 'process.versions.node.split(`.`)[0]')"
|
|
if (( node_major < 20 )); then
|
|
echo "Synapsis requires Node.js 20 or newer." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! id synapsis >/dev/null 2>&1; then
|
|
useradd --system --home-dir "$DATA_DIR" --create-home --shell /usr/sbin/nologin synapsis
|
|
fi
|
|
|
|
install -d -o synapsis -g synapsis -m 0750 "$DATA_DIR"
|
|
|
|
if [[ -e "$APP_DIR" ]]; then
|
|
echo "$APP_DIR already exists; use deploy/update.sh for an existing installation." >&2
|
|
exit 1
|
|
fi
|
|
|
|
git clone --branch "$BRANCH" --single-branch "$REPO_URL" "$APP_DIR"
|
|
chown -R synapsis:synapsis "$APP_DIR"
|
|
|
|
if [[ ! -e "$ENV_FILE" ]]; then
|
|
auth_secret="$(openssl rand -base64 48 | tr -d '\n')"
|
|
port="43821"
|
|
install -m 0600 -o root -g synapsis /dev/null "$ENV_FILE"
|
|
{
|
|
echo "DATABASE_PATH=$DATA_DIR/synapsis.db"
|
|
echo "PORT=$port"
|
|
echo "AUTH_SECRET=$auth_secret"
|
|
echo "ADMIN_EMAILS=admin@example.com"
|
|
echo "NEXT_PUBLIC_NODE_DOMAIN=localhost:$port"
|
|
echo "STUFFBOX_URL=https://stuffbox.xyz"
|
|
} > "$ENV_FILE"
|
|
fi
|
|
|
|
set -a
|
|
source "$ENV_FILE"
|
|
set +a
|
|
|
|
runuser -u synapsis -- npm --prefix "$APP_DIR" ci
|
|
runuser -u synapsis -- npm --prefix "$APP_DIR" run db:migrate
|
|
runuser -u synapsis -- npm --prefix "$APP_DIR" run build
|
|
|
|
install -m 0644 "$APP_DIR/deploy/synapsis.service" /etc/systemd/system/synapsis.service
|
|
install -m 0644 "$APP_DIR/deploy/synapsis-update.service" /etc/systemd/system/synapsis-update.service
|
|
install -m 0644 "$APP_DIR/deploy/synapsis-update.timer" /etc/systemd/system/synapsis-update.timer
|
|
runuser -u synapsis -- git -C "$APP_DIR" rev-parse HEAD | install -m 0644 -o synapsis -g synapsis /dev/stdin "$DATA_DIR/deployed-commit"
|
|
systemctl daemon-reload
|
|
systemctl enable --now synapsis
|
|
systemctl enable --now synapsis-update.timer
|
|
|
|
echo "Synapsis is listening on http://127.0.0.1:${PORT}"
|
|
echo "Edit $ENV_FILE, run $APP_DIR/deploy/update.sh, then configure your own reverse proxy."
|