74 lines
2.3 KiB
Bash
74 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Install script for SafelineAPI (systemd)
|
|
# Usage: sudo ./scripts/install.sh [install_dir]
|
|
# Default install_dir: /opt/safelineapi
|
|
|
|
PREFIX=${1:-/opt/safelineapi}
|
|
SERVICE_NAME=safelineapi
|
|
SYSTEMD_UNIT=/etc/systemd/system/${SERVICE_NAME}.service
|
|
ENV_FILE=/etc/default/${SERVICE_NAME}
|
|
USER_NAME=safeline
|
|
|
|
echo "Install SafelineAPI to ${PREFIX}"
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "This script must be run as root (or via sudo)" >&2
|
|
exit 2
|
|
fi
|
|
|
|
mkdir -p "$PREFIX"
|
|
|
|
# Build binary if not present in repo
|
|
if [ ! -f "$PREFIX/safelineApi" ]; then
|
|
echo "Building safelineApi..."
|
|
# build from repo root (assumes script run from repo root)
|
|
if [ -f ./cmd/safelineApi/main.go ]; then
|
|
GOOS=${GOOS:-linux} GOARCH=${GOARCH:-amd64} go build -o "$PREFIX/safelineApi" ./cmd/safelineApi
|
|
else
|
|
echo "Cannot find source to build. Place binary at ${PREFIX}/safelineApi or run from repo root." >&2
|
|
fi
|
|
fi
|
|
|
|
# Copy config.example.json to config.json if no config exists
|
|
if [ -f "$PREFIX/config.json" ]; then
|
|
echo "Found existing config.json in ${PREFIX}, leaving in place."
|
|
else
|
|
if [ -f ./config.example.json ]; then
|
|
cp ./config.example.json "$PREFIX/config.json"
|
|
echo "Copied example config to ${PREFIX}/config.json — edit and add secrets before starting service."
|
|
else
|
|
echo "No config.example.json found in repo root. Create ${PREFIX}/config.json before starting service." >&2
|
|
fi
|
|
fi
|
|
|
|
# copy service unit
|
|
cp contrib/safelineapi.service "$SYSTEMD_UNIT"
|
|
chmod 644 "$SYSTEMD_UNIT"
|
|
|
|
# copy example env file if not exists
|
|
if [ -f /etc/default/${SERVICE_NAME} ]; then
|
|
echo "/etc/default/${SERVICE_NAME} already exists — leaving in place."
|
|
else
|
|
cp contrib/safelineapi.env "$ENV_FILE"
|
|
chmod 644 "$ENV_FILE"
|
|
echo "Wrote ${ENV_FILE}. Edit it to set CONFIG_PATH and optional runtime vars."
|
|
fi
|
|
|
|
# create system user if missing
|
|
if id -u "$USER_NAME" >/dev/null 2>&1; then
|
|
echo "User $USER_NAME exists"
|
|
else
|
|
useradd --system --no-create-home --shell /usr/sbin/nologin "$USER_NAME"
|
|
echo "Created system user $USER_NAME"
|
|
fi
|
|
|
|
# chown files
|
|
chown -R ${USER_NAME}:${USER_NAME} "$PREFIX"
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable --now ${SERVICE_NAME}.service
|
|
|
|
echo "Installation complete. Check status with: systemctl status ${SERVICE_NAME}.service"
|