diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..c7fc926 --- /dev/null +++ b/install.sh @@ -0,0 +1,188 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +APP_DIR="/var/www/botshop" +REPO_URL="https://github.com/viktor138irk/bot.git" +DB_NAME="botshop" +DB_USER="botshop_user" +DB_PASS="" +ADMIN_NAME="Admin" +ADMIN_EMAIL="admin@local.test" +ADMIN_PASS="" +SERVER_NAME="_" +INSTALL_POLLING=1 + +log() { echo -e "\033[1;36m[BotShop]\033[0m $*"; } +err() { echo -e "\033[1;31m[Ошибка]\033[0m $*" >&2; } +need_root() { if [[ "${EUID}" -ne 0 ]]; then err "Запусти от root: sudo bash install.sh --local"; exit 1; fi; } +rand_pass() { tr -dc 'A-Za-z0-9' /dev/null | awk '{print $1}'; } + +usage() { + cat <<'USAGE' +BotShop installer + +Локальная установка без домена: + sudo bash install.sh --local + +Опции: + --local Локальный режим без домена и SSL. Админка по http://IP/ + --dir /var/www/botshop Папка установки + --db-name botshop Имя базы + --db-user botshop_user Пользователь базы + --db-pass PASSWORD Пароль базы. Если не указан — будет сгенерирован + --admin-email EMAIL Email администратора + --admin-pass PASSWORD Пароль администратора. Если не указан — будет сгенерирован + --no-polling Не создавать systemd-сервис polling + --help Справка +USAGE +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --local) SERVER_NAME="_"; shift ;; + --dir) APP_DIR="$2"; shift 2 ;; + --db-name) DB_NAME="$2"; shift 2 ;; + --db-user) DB_USER="$2"; shift 2 ;; + --db-pass) DB_PASS="$2"; shift 2 ;; + --admin-email) ADMIN_EMAIL="$2"; shift 2 ;; + --admin-pass) ADMIN_PASS="$2"; shift 2 ;; + --no-polling) INSTALL_POLLING=0; shift ;; + --help|-h) usage; exit 0 ;; + *) err "Неизвестная опция: $1"; usage; exit 1 ;; + esac +done + +need_root + +if [[ -z "$DB_PASS" ]]; then DB_PASS="$(rand_pass)"; fi +if [[ -z "$ADMIN_PASS" ]]; then ADMIN_PASS="$(rand_pass)"; fi + +log "Установка пакетов" +export DEBIAN_FRONTEND=noninteractive +apt-get update +apt-get install -y nginx mysql-server git unzip curl ca-certificates php-fpm php-cli php-mysql php-curl php-mbstring php-xml php-zip + +log "Подготовка проекта в ${APP_DIR}" +mkdir -p "$(dirname "$APP_DIR")" +if [[ -d "$APP_DIR/.git" ]]; then + git -C "$APP_DIR" pull --ff-only +else + rm -rf "$APP_DIR" + git clone "$REPO_URL" "$APP_DIR" +fi +mkdir -p "$APP_DIR/storage/logs" + +log "Настройка MySQL" +mysql -uroot < "$APP_DIR/storage/config.php" < 'localhost', + 'db_name' => '${DB_NAME}', + 'db_user' => '${DB_USER}', + 'db_pass' => '${DB_PASS}', +]; +PHP + +log "Создание администратора" +ADMIN_HASH="$(php -r 'echo password_hash($argv[1], PASSWORD_DEFAULT);' "$ADMIN_PASS")" +mysql -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" < /etc/nginx/sites-available/botshop < /etc/systemd/system/botshop-polling.service <