#!/usr/bin/env bash set -euo pipefail APP_DIR="${REMOTE_APP_DIR:-/opt/abyssinfo-home-vpn}" API_DIR="${APP_DIR}/api" VENV_DIR="${APP_DIR}/.venv-api" ZIP_FILE="${API_ZIP_FILE:-/tmp/abyssinfo-api.zip}" API_DOMAIN="${API_DOMAIN:-vpn-api.nm.101-96-214-81.sslip.io}" API_LEGACY_DOMAIN="${API_LEGACY_DOMAIN:-vpn-api.nm.101-96-214-81.nip.io}" API_PORT="${API_PORT:-8000}" NETMAKER_DOMAIN="${NETMAKER_BASE_DOMAIN:-nm.101-96-214-81.nip.io}" echo "[AbyssInfo] Deploying Django API" echo "[AbyssInfo] API domain: ${API_DOMAIN}" if [[ "$(id -u)" != "0" ]]; then echo "[AbyssInfo] Please run as root." >&2 exit 1 fi if [[ ! -f "${ZIP_FILE}" ]]; then echo "[AbyssInfo] Missing ${ZIP_FILE}" >&2 exit 1 fi echo "[AbyssInfo] Installing Python runtime ..." dnf install -y python3.12 python3.12-pip unzip mkdir -p "${API_DIR}" PREVIOUS_ENV="/tmp/abyssinfo-api.previous.env" if [[ -f "${API_DIR}/.env" ]]; then cp "${API_DIR}/.env" "${PREVIOUS_ENV}" else rm -f "${PREVIOUS_ENV}" fi find "${API_DIR}" -mindepth 1 \ ! -name db.sqlite3 \ ! -path "${API_DIR}/db.sqlite3" \ -exec rm -rf {} + echo "[AbyssInfo] Extracting API package ..." set +e unzip -q "${ZIP_FILE}" -d "${API_DIR}" UNZIP_EXIT=$? set -e if [[ "${UNZIP_EXIT}" -gt 1 ]]; then echo "[AbyssInfo] Failed to unzip API package. Exit code ${UNZIP_EXIT}" >&2 exit "${UNZIP_EXIT}" fi if [[ ! -f "${API_DIR}/.env" ]]; then echo "[AbyssInfo] Missing ${API_DIR}/.env" >&2 exit 1 fi echo "[AbyssInfo] Normalizing production env ..." python3.12 - </etc/systemd/system/abyssinfo-api.service <&2 exit 1 fi if ! grep -q "https://${API_DOMAIN}" "${CADDYFILE}"; then cat >>"${CADDYFILE}" </dev/null curl -kfsS "https://${API_DOMAIN}/health/" >/dev/null echo "[AbyssInfo] Django API deployed:" echo " https://${API_DOMAIN}/health/"