#!/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 <