Files
org_backend/scripts/deploy-systemd.sh
Zaine Arch 340b33f5d0
Some checks failed
Build Org Backend / build (push) Failing after 15s
check
2026-05-09 00:02:29 +01:00

81 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
APP_HOME="${APP_HOME:-/home/zaine/master-folder/projects/java_projects/org_backend}"
SERVICE_NAME="${SERVICE_NAME:-org-backend.service}"
SYSTEMCTL_TIMEOUT="${SYSTEMCTL_TIMEOUT:-120}"
ENV_FILE="${ENV_FILE:-/etc/org-backend/org-backend.env}"
ENV_EXAMPLE_FILE="${ENV_EXAMPLE_FILE:-/etc/org-backend/org-backend.env.example}"
SOURCE_DIR="$(pwd)"
SOURCE_JAR="${SOURCE_DIR}/target/org-backend.jar"
APP_TARGET_DIR="${APP_HOME}/target"
APP_JAR="${APP_TARGET_DIR}/org-backend.jar"
SOURCE_SERVICE="${SOURCE_DIR}/misc/${SERVICE_NAME}"
SOURCE_ENV_EXAMPLE="${SOURCE_DIR}/misc/org-backend.env.example"
SYSTEMD_SERVICE="/etc/systemd/system/${SERVICE_NAME}"
run_sudo() {
if [[ -n "${SUDO_PASSWORD:-}" ]]; then
printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p '' "$@"
else
sudo -n "$@"
fi
}
if [[ ! -f "${SOURCE_JAR}" ]]; then
echo "Missing built jar: ${SOURCE_JAR}" >&2
exit 1
fi
if [[ ! -f "${SOURCE_SERVICE}" ]]; then
echo "Missing service file: ${SOURCE_SERVICE}" >&2
exit 1
fi
if [[ ! -f "${SOURCE_ENV_EXAMPLE}" ]]; then
echo "Missing env example file: ${SOURCE_ENV_EXAMPLE}" >&2
exit 1
fi
mkdir -p "${APP_TARGET_DIR}"
if [[ "$(realpath "${SOURCE_JAR}")" != "$(realpath -m "${APP_JAR}")" ]]; then
echo "Installing jar to ${APP_JAR}"
install -m 0644 "${SOURCE_JAR}" "${APP_JAR}"
else
echo "Built jar is already in place at ${APP_JAR}"
fi
echo "Checking sudo access"
run_sudo true
echo "Installing env example to ${ENV_EXAMPLE_FILE}"
run_sudo install -d -m 0755 "$(dirname "${ENV_FILE}")"
run_sudo install -m 0640 "${SOURCE_ENV_EXAMPLE}" "${ENV_EXAMPLE_FILE}"
echo "Checking runtime env file at ${ENV_FILE}"
if ! run_sudo test -f "${ENV_FILE}"; then
echo "Missing ${ENV_FILE}. Create it from ${ENV_EXAMPLE_FILE} and fill in the production values." >&2
exit 1
fi
echo "Installing systemd unit to ${SYSTEMD_SERVICE}"
run_sudo install -m 0644 "${SOURCE_SERVICE}" "${SYSTEMD_SERVICE}"
echo "Reloading systemd"
run_sudo systemctl daemon-reload
echo "Enabling ${SERVICE_NAME}"
run_sudo systemctl enable "${SERVICE_NAME}"
echo "Restarting ${SERVICE_NAME}"
if ! timeout "${SYSTEMCTL_TIMEOUT}" bash -c "$(declare -f run_sudo); run_sudo systemctl --no-ask-password restart \"${SERVICE_NAME}\""; then
echo "Restart did not finish within ${SYSTEMCTL_TIMEOUT}s" >&2
run_sudo systemctl --no-pager --full status "${SERVICE_NAME}" || true
exit 1
fi
echo "Service status"
run_sudo systemctl --no-pager --full status "${SERVICE_NAME}"