Files
mikrotik_backup_system/start_dev.sh
Mateusz Gruszczyński 3da6c2832c first commit
2026-04-14 11:39:46 +02:00

96 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="${ROOT_DIR}/backend"
FRONTEND_DIR="${ROOT_DIR}/frontend"
BACKEND_VENV="${BACKEND_DIR}/.venv"
PYTHON_BIN="${PYTHON_BIN:-python3}"
ENV_FILE="${BACKEND_DIR}/.env"
ENV_EXAMPLE_FILE="${BACKEND_DIR}/.env.dev.example"
BACKEND_LOG="/tmp/routeros-next-backend.log"
cleanup() {
if [[ -n "${BACKEND_PID:-}" ]] && kill -0 "${BACKEND_PID}" 2>/dev/null; then
kill "${BACKEND_PID}" 2>/dev/null || true
fi
}
trap cleanup EXIT INT TERM
read_env_value() {
local key="$1"
local file="$2"
if [[ -f "$file" ]]; then
local line
line=$(grep -E "^${key}=" "$file" | tail -n 1 || true)
if [[ -n "$line" ]]; then
echo "${line#*=}"
return 0
fi
fi
return 1
}
if [[ ! -d "${BACKEND_VENV}" ]]; then
"${PYTHON_BIN}" -m venv "${BACKEND_VENV}"
fi
# shellcheck disable=SC1091
source "${BACKEND_VENV}/bin/activate"
python -m pip install --upgrade pip
python -m pip install -r "${BACKEND_DIR}/requirements.txt"
if [[ ! -f "${ENV_FILE}" ]] && [[ -f "${ENV_EXAMPLE_FILE}" ]]; then
cp "${ENV_EXAMPLE_FILE}" "${ENV_FILE}"
fi
DEFAULT_ADMIN_USERNAME="$(read_env_value DEFAULT_ADMIN_USERNAME "${ENV_FILE}" || read_env_value DEFAULT_ADMIN_USERNAME "${ENV_EXAMPLE_FILE}" || echo admin)"
DEFAULT_ADMIN_PASSWORD="$(read_env_value DEFAULT_ADMIN_PASSWORD "${ENV_FILE}" || read_env_value DEFAULT_ADMIN_PASSWORD "${ENV_EXAMPLE_FILE}" || echo admin)"
cd "${BACKEND_DIR}"
PYTHONPATH="${BACKEND_DIR}" uvicorn app.main:app --reload --reload-dir app --host 127.0.0.1 --port 8000 > "${BACKEND_LOG}" 2>&1 &
BACKEND_PID=$!
for _ in $(seq 1 30); do
if python - <<'PY'
import sys
from urllib.request import urlopen
try:
with urlopen('http://127.0.0.1:8000/api/health', timeout=1) as response:
sys.exit(0 if response.status == 200 else 1)
except Exception:
sys.exit(1)
PY
then
break
fi
sleep 1
done
if ! python - <<'PY'
import sys
from urllib.request import urlopen
try:
with urlopen('http://127.0.0.1:8000/api/health', timeout=1) as response:
sys.exit(0 if response.status == 200 else 1)
except Exception:
sys.exit(1)
PY
then
echo "Backend failed to become ready. Log: ${BACKEND_LOG}"
tail -n 100 "${BACKEND_LOG}" || true
exit 1
fi
echo "Backend: http://127.0.0.1:8000"
echo "API docs: http://127.0.0.1:8000/docs"
echo "Frontend: http://127.0.0.1:4200"
echo "Default login: ${DEFAULT_ADMIN_USERNAME} / ${DEFAULT_ADMIN_PASSWORD}"
cd "${FRONTEND_DIR}"
if [[ ! -d node_modules ]]; then
npm install
fi
npm run start