#!/usr/bin/env bash set -euo pipefail APP_NAME="otb_billing" APP_USER_DEFAULT="${SUDO_USER:-$USER}" APP_ROOT_DEFAULT="/opt/otb_billing" ENV_DIR="/etc/otb_billing" ENV_FILE="${ENV_DIR}/otb_billing.env" SERVICE_NAME="otb-billing" SCHEMA_FILE="sql/schema_v0.0.2.sql" if [[ ! -f "$SCHEMA_FILE" ]]; then echo "ERROR: $SCHEMA_FILE not found. Run this from the repo root." exit 1 fi echo "==================================================" echo "OTB Billing installer" echo "==================================================" read -rp "Install app user [${APP_USER_DEFAULT}]: " APP_USER APP_USER="${APP_USER:-$APP_USER_DEFAULT}" read -rp "Install path [${APP_ROOT_DEFAULT}]: " APP_ROOT APP_ROOT="${APP_ROOT:-$APP_ROOT_DEFAULT}" read -rp "MariaDB database name [otb_billing]: " DB_NAME DB_NAME="${DB_NAME:-otb_billing}" read -rp "MariaDB database user [otb_billing]: " DB_USER DB_USER="${DB_USER:-otb_billing}" read -rsp "MariaDB database password: " DB_PASS echo if [[ -z "$DB_PASS" ]]; then echo "ERROR: database password cannot be blank." exit 1 fi read -rp "App listen host [0.0.0.0]: " APP_HOST APP_HOST="${APP_HOST:-0.0.0.0}" read -rp "App listen port [5050]: " APP_PORT APP_PORT="${APP_PORT:-5050}" echo echo "Installing system packages..." sudo apt-get update sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \ python3 python3-venv python3-pip mariadb-server rsync echo echo "Creating app directory..." sudo mkdir -p "$APP_ROOT" sudo rsync -a --delete \ --exclude '.git' \ --exclude '__pycache__' \ --exclude 'releases' \ --exclude '*.pyc' \ ./ "$APP_ROOT"/ sudo chown -R "$APP_USER":"$APP_USER" "$APP_ROOT" echo echo "Creating Python virtualenv..." sudo -u "$APP_USER" python3 -m venv "$APP_ROOT/venv" sudo -u "$APP_USER" "$APP_ROOT/venv/bin/pip" install --upgrade pip sudo -u "$APP_USER" "$APP_ROOT/venv/bin/pip" install -r "$APP_ROOT/requirements.txt" echo echo "Ensuring MariaDB is running..." sudo systemctl enable mariadb sudo systemctl restart mariadb echo echo "Creating MariaDB database and user..." sudo mysql </dev/null </dev/null <