80 lines
2.8 KiB
Bash
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"
|