From 34bcd349795e26070465be1b639119c06ce04467 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 19 Feb 2026 14:57:45 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=BE=D0=B4=D0=B5=D1=80=D0=BD=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20install.sh:=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D0=BD=D0=B5=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0=20=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B5=20=D0=BE=D0=BA=D1=80=D1=83=D0=B6=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 175 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 129 insertions(+), 46 deletions(-) diff --git a/install.sh b/install.sh index 0b191c42..70bdb289 100755 --- a/install.sh +++ b/install.sh @@ -23,6 +23,14 @@ if [ "$EUID" -ne 0 ]; then exit 1 fi +# Проверка переменных окружения для неинтерактивного режима +NON_INTERACTIVE=false +if [ -n "${DOMAIN:-}" ] && [ -n "${DB_NAME:-}" ] && [ -n "${DB_USER:-}" ] && \ + [ -n "${DB_PASSWORD:-}" ] && [ -n "${ADMIN_USER:-}" ] && [ -n "${ADMIN_PASSWORD:-}" ]; then + NON_INTERACTIVE=true + echo "Обнаружен неинтерактивный режим (переменные окружения заданы)" +fi + # Функция генерации случайной строки generate_random() { openssl rand -hex 32 @@ -105,15 +113,23 @@ fi echo "[3/7] Настройка Apache..." # Определить домен -read -p "Введите доменное имя для F7cloud (например: cloud.example.com): " DOMAIN -if [ -z "$DOMAIN" ]; then - echo "Ошибка: Домен обязателен" - exit 1 +if [ -z "${DOMAIN:-}" ]; then + read -p "Введите доменное имя для F7cloud (например: cloud.example.com): " DOMAIN + if [ -z "$DOMAIN" ]; then + echo "Ошибка: Домен обязателен" + exit 1 + fi +else + echo "Используется домен из переменной окружения: $DOMAIN" fi # Определить путь установки (DocumentRoot) -read -p "Путь установки F7cloud [$INSTALL_DIR]: " INSTALL_PATH -INSTALL_PATH=${INSTALL_PATH:-$INSTALL_DIR} +if [ -z "${INSTALL_PATH:-}" ]; then + read -p "Путь установки F7cloud [$INSTALL_DIR]: " INSTALL_PATH + INSTALL_PATH=${INSTALL_PATH:-$INSTALL_DIR} +else + echo "Используется путь установки из переменной окружения: $INSTALL_PATH" +fi # Создать виртуальный хост Apache APACHE_SITE_FILE="/etc/apache2/sites-available/f7cloud.conf" @@ -154,33 +170,57 @@ fi # Запрос данных PostgreSQL echo "[4/7] Настройка PostgreSQL..." -read -p "Хост PostgreSQL [localhost]: " DB_HOST -DB_HOST=${DB_HOST:-localhost} - -read -p "Порт PostgreSQL [5432]: " DB_PORT -DB_PORT=${DB_PORT:-5432} - -read -p "Имя базы данных: " DB_NAME -if [ -z "$DB_NAME" ]; then - echo "Ошибка: Имя базы данных обязательно" - exit 1 +if [ -z "${DB_HOST:-}" ]; then + read -p "Хост PostgreSQL [localhost]: " DB_HOST + DB_HOST=${DB_HOST:-localhost} +else + echo "Используется хост PostgreSQL из переменной окружения: $DB_HOST" fi -read -p "Пользователь PostgreSQL: " DB_USER -if [ -z "$DB_USER" ]; then - echo "Ошибка: Пользователь обязателен" - exit 1 +if [ -z "${DB_PORT:-}" ]; then + read -p "Порт PostgreSQL [5432]: " DB_PORT + DB_PORT=${DB_PORT:-5432} +else + echo "Используется порт PostgreSQL из переменной окружения: $DB_PORT" fi -read -sp "Пароль PostgreSQL: " DB_PASSWORD -echo "" -if [ -z "$DB_PASSWORD" ]; then - echo "Ошибка: Пароль обязателен" - exit 1 +if [ -z "${DB_NAME:-}" ]; then + read -p "Имя базы данных: " DB_NAME + if [ -z "$DB_NAME" ]; then + echo "Ошибка: Имя базы данных обязательно" + exit 1 + fi +else + echo "Используется имя базы данных из переменной окружения: $DB_NAME" fi -read -p "Префикс таблиц [oc_]: " DB_PREFIX -DB_PREFIX=${DB_PREFIX:-oc_} +if [ -z "${DB_USER:-}" ]; then + read -p "Пользователь PostgreSQL: " DB_USER + if [ -z "$DB_USER" ]; then + echo "Ошибка: Пользователь обязателен" + exit 1 + fi +else + echo "Используется пользователь PostgreSQL из переменной окружения: $DB_USER" +fi + +if [ -z "${DB_PASSWORD:-}" ]; then + read -sp "Пароль PostgreSQL: " DB_PASSWORD + echo "" + if [ -z "$DB_PASSWORD" ]; then + echo "Ошибка: Пароль обязателен" + exit 1 + fi +else + echo "Используется пароль PostgreSQL из переменной окружения" +fi + +if [ -z "${DB_PREFIX:-}" ]; then + read -p "Префикс таблиц [oc_]: " DB_PREFIX + DB_PREFIX=${DB_PREFIX:-oc_} +else + echo "Используется префикс таблиц из переменной окружения: $DB_PREFIX" +fi # Проверка подключения к БД echo "Проверка подключения к PostgreSQL..." @@ -196,28 +236,54 @@ unset PGPASSWORD # Дополнительные настройки echo "[5/8] Дополнительные настройки..." -read -p "Директория данных [$DATA_DIR]: " DATA_DIR_INPUT -DATA_DIR=${DATA_DIR_INPUT:-$DATA_DIR} +if [ -z "${DATA_DIR_INPUT:-}" ]; then + read -p "Директория данных [$DATA_DIR]: " DATA_DIR_INPUT + DATA_DIR=${DATA_DIR_INPUT:-$DATA_DIR} +else + DATA_DIR=${DATA_DIR_INPUT:-$DATA_DIR} + echo "Используется директория данных из переменной окружения: $DATA_DIR" +fi -read -p "Trusted domains (через запятую) [$DOMAIN]: " TRUSTED_DOMAINS_INPUT -TRUSTED_DOMAINS=${TRUSTED_DOMAINS_INPUT:-$DOMAIN} +if [ -z "${TRUSTED_DOMAINS_INPUT:-}" ]; then + read -p "Trusted domains (через запятую) [$DOMAIN]: " TRUSTED_DOMAINS_INPUT + TRUSTED_DOMAINS=${TRUSTED_DOMAINS_INPUT:-$DOMAIN} +else + TRUSTED_DOMAINS=${TRUSTED_DOMAINS_INPUT:-$DOMAIN} + echo "Используются trusted domains из переменной окружения: $TRUSTED_DOMAINS" +fi -read -p "Trusted proxies (IP через запятую, Enter для пропуска): " TRUSTED_PROXIES +if [ -z "${TRUSTED_PROXIES:-}" ]; then + read -p "Trusted proxies (IP через запятую, Enter для пропуска): " TRUSTED_PROXIES +else + echo "Используются trusted proxies из переменной окружения: $TRUSTED_PROXIES" +fi -read -p "CLI URL (для occ команд) [https://$DOMAIN]: " CLI_URL -CLI_URL=${CLI_URL:-https://$DOMAIN} +if [ -z "${CLI_URL:-}" ]; then + read -p "CLI URL (для occ команд) [https://$DOMAIN]: " CLI_URL + CLI_URL=${CLI_URL:-https://$DOMAIN} +else + echo "Используется CLI URL из переменной окружения: $CLI_URL" +fi # Данные администратора echo "[6/8] Создание администратора..." -read -p "Логин администратора [admin]: " ADMIN_USER -ADMIN_USER=${ADMIN_USER:-admin} +if [ -z "${ADMIN_USER:-}" ]; then + read -p "Логин администратора [admin]: " ADMIN_USER + ADMIN_USER=${ADMIN_USER:-admin} +else + echo "Используется логин администратора из переменной окружения: $ADMIN_USER" +fi -read -sp "Пароль администратора: " ADMIN_PASSWORD -echo "" -if [ -z "$ADMIN_PASSWORD" ]; then - echo "Ошибка: Пароль администратора обязателен" - exit 1 +if [ -z "${ADMIN_PASSWORD:-}" ]; then + read -sp "Пароль администратора: " ADMIN_PASSWORD + echo "" + if [ -z "$ADMIN_PASSWORD" ]; then + echo "Ошибка: Пароль администратора обязателен" + exit 1 + fi +else + echo "Используется пароль администратора из переменной окружения" fi # Генерация секретов @@ -383,15 +449,32 @@ if sudo -u $APACHE_USER php occ maintenance:install \ echo "Применение настроек из файла..." USE_TALK_CONFIG_FILE=true else - read -p "Настроить F7Talk (Talk)? (y/N): " CONFIGURE_TALK - USE_TALK_CONFIG_FILE=false - if [[ ! "$CONFIGURE_TALK" =~ ^[Yy]$ ]]; then - echo "Пропуск настройки F7Talk" + if [ -z "${CONFIGURE_TALK:-}" ]; then + read -p "Настроить F7Talk (Talk)? (y/N): " CONFIGURE_TALK USE_TALK_CONFIG_FILE=false + if [[ ! "$CONFIGURE_TALK" =~ ^[Yy]$ ]]; then + echo "Пропуск настройки F7Talk" + USE_TALK_CONFIG_FILE=false + fi + else + USE_TALK_CONFIG_FILE=false + if [[ "$CONFIGURE_TALK" =~ ^[Yy]$ ]] || [ "$CONFIGURE_TALK" = "yes" ] || [ "$CONFIGURE_TALK" = "true" ]; then + echo "Настройка F7Talk включена через переменную окружения" + else + echo "Пропуск настройки F7Talk (задано через переменную окружения)" + fi fi fi - if [ "$USE_TALK_CONFIG_FILE" = true ] || [[ "$CONFIGURE_TALK" =~ ^[Yy]$ ]]; then + # Проверка, нужно ли настраивать F7Talk + SHOULD_CONFIGURE_TALK=false + if [ "$USE_TALK_CONFIG_FILE" = true ]; then + SHOULD_CONFIGURE_TALK=true + elif [[ "$CONFIGURE_TALK" =~ ^[Yy]$ ]] || [ "$CONFIGURE_TALK" = "yes" ] || [ "$CONFIGURE_TALK" = "true" ]; then + SHOULD_CONFIGURE_TALK=true + fi + + if [ "$SHOULD_CONFIGURE_TALK" = true ]; then echo "Настройка F7Talk..." # Проверка, включён ли Talk