Files
site/WESP_REL/scripts/install_fresh.sh
T
2026-07-17 12:57:18 +03:00

80 lines
2.8 KiB
Bash

#!/usr/bin/env bash
# Чистая установка WESP на Linux-сервер (код + venv + первый старт с миграциями).
#
# Пример (код в /opt/wesp, venv в /opt/wes, unit myscript):
# sudo bash scripts/install_fresh.sh /opt/wesp /opt/wes myscript
#
# После установки отредактируйте /etc/wesp/wesp.env (секреты) при необходимости.
# systemd unit и переменные restart/reboot прописываются автоматически.
#
set -euo pipefail
WESP_HOME="${1:-/opt/wesp}"
WESP_VENV="${2:-/opt/wes}"
WESP_SYSTEMD_UNIT="${3:-myscript}"
PYTHON="${WESP_PYTHON:-python3}"
ENV_FILE="${WESP_ENV_FILE:-/etc/wesp/wesp.env}"
log() { echo "==> $*"; }
if [[ ! -f "${WESP_HOME}/run.py" ]]; then
echo "ERROR: не найден ${WESP_HOME}/run.py — укажите каталог с кодом WESP" >&2
exit 1
fi
cd "$WESP_HOME"
if [[ ! -d "$WESP_VENV/bin" ]]; then
log "Создаём venv: $WESP_VENV"
"$PYTHON" -m venv "$WESP_VENV"
fi
PY="${WESP_VENV}/bin/python"
PIP="${WESP_VENV}/bin/pip"
log "Установка зависимостей"
if [[ -d "${WESP_HOME}/vendor/wheels" ]] && compgen -G "${WESP_HOME}/vendor/wheels/*.whl" > /dev/null; then
WESP_VENV="$WESP_VENV" WESP_PYTHON="$PY" "$PY" "${WESP_HOME}/install_deps.py"
else
log "vendor/wheels пуст — pip install -r requirements-prod.txt (нужен PyPI)"
"$PIP" install -U pip wheel
"$PIP" install -r "${WESP_HOME}/requirements-prod.txt"
fi
log "Каталоги data/"
mkdir -p "${WESP_HOME}/data/logs"
touch "${WESP_HOME}/data/logs/.gitkeep"
log "Настройка Pi (wesp.env + systemd) — как в админке"
export WESP_VENV="$WESP_VENV" WESP_SYSTEMD_UNIT="$WESP_SYSTEMD_UNIT"
if ! "$PY" "${WESP_HOME}/scripts/apply_pi_platform_setup.py" "$WESP_HOME" "$WESP_VENV" "$WESP_SYSTEMD_UNIT"; then
echo "WARN: apply_pi_platform_setup завершился с ошибкой (нужен root?)" >&2
fi
log "Пробный старт (миграции + bootstrap)"
set -a
# shellcheck disable=SC1090
[[ -f "$ENV_FILE" ]] && source "$ENV_FILE"
set +a
export WESP_CONFIG="${WESP_CONFIG:-production}"
export WESP_ALLOW_INSECURE_DEFAULTS="${WESP_ALLOW_INSECURE_DEFAULTS:-1}"
"$PY" - <<'PY'
from app import create_app
from config import get_config_class
app = create_app(get_config_class(), run_migrations=True)
print("OK: create_app + migrations + bootstrap")
PY
log "Готово."
echo ""
echo " Код: $WESP_HOME"
echo " venv: $WESP_VENV"
echo " env: $ENV_FILE"
echo " unit: ${WESP_SYSTEMD_UNIT}.service"
echo ""
echo " Запуск: sudo systemctl restart ${WESP_SYSTEMD_UNIT}"
echo " Статус: sudo systemctl status ${WESP_SYSTEMD_UNIT}"
echo " Логи: journalctl -u ${WESP_SYSTEMD_UNIT} -f"