From 0af50038fe2042502fde72989a4ce09490bc24ba Mon Sep 17 00:00:00 2001 From: root Date: Wed, 18 Feb 2026 13:54:46 +0000 Subject: [PATCH] Add installation script with Talk config support Co-authored-by: Cursor --- README_INSTALL.md | 162 +++++++++++ config/talk-config.example.php | 51 ++++ install.sh | 500 +++++++++++++++++++++++++++++++++ 3 files changed, 713 insertions(+) create mode 100644 README_INSTALL.md create mode 100644 config/talk-config.example.php create mode 100755 install.sh diff --git a/README_INSTALL.md b/README_INSTALL.md new file mode 100644 index 00000000..7d1aab1b --- /dev/null +++ b/README_INSTALL.md @@ -0,0 +1,162 @@ +# Установка F7cloud Client + +## Быстрая установка + +Запустите скрипт инициализации от root: + +```bash +sudo bash install.sh +``` + +Скрипт выполнит: +- ✅ Проверку и установку зависимостей (PHP, Apache, PostgreSQL клиент) +- ✅ Установку и настройку Redis +- ✅ Настройку виртуального хоста Apache +- ✅ Интерактивный запрос данных PostgreSQL +- ✅ Запрос данных администратора (логин и пароль) +- ✅ Генерацию секретов (passwordsalt, secret, instanceid) +- ✅ Создание `config/config.php` с настройками БД и Redis +- ✅ Автоматический запуск `occ maintenance:install` для инициализации F7cloud +- ✅ Создание первого администратора +- ✅ Настройку прав доступа на файлы и директории + +## Требования + +- **ОС**: Ubuntu/Debian (или совместимая) +- **PHP**: 8.1+ с расширениями (php-fpm, php-pgsql, php-redis, php-apcu, php-gd, php-xml, php-mbstring, php-curl, php-zip, php-bcmath, php-intl) +- **Apache**: 2.4+ с mod_rewrite, mod_headers, mod_php +- **PostgreSQL**: 12+ (сервер может быть удалённым) +- **Redis**: 6.0+ (для кэширования и блокировок) + +## Что запрашивает скрипт + +1. **Доменное имя** — например: `cloud.example.com` +2. **Путь установки** — по умолчанию текущая директория +3. **PostgreSQL**: + - Хост (по умолчанию `localhost`) + - Порт (по умолчанию `5432`) + - Имя базы данных + - Пользователь + - Пароль + - Префикс таблиц (по умолчанию `oc_`) +4. **Директория данных** — по умолчанию `/data` +5. **Trusted domains** — список доменов через запятую +6. **Trusted proxies** — IP адреса прокси через запятую (опционально) +7. **CLI URL** — URL для occ команд (по умолчанию `https://<домен>`) +8. **Логин администратора** — по умолчанию `admin` +9. **Пароль администратора** — пароль для первого пользователя + +## После установки + +### 1. Создайте базу данных (если ещё не создана) + +Скрипт проверит подключение к БД перед установкой. Если база не существует: + +```bash +sudo -u postgres psql +CREATE DATABASE f7cloud_db OWNER f7user; +\q +``` + +### 2. Скрипт автоматически выполнит установку + +После создания `config.php` скрипт автоматически запустит: + +```bash +sudo -u www-data php occ maintenance:install \ + --database pgsql \ + --database-name <ваша_бд> \ + --database-host <хост>:<порт> \ + --database-user <пользователь> \ + --database-pass '<пароль>' \ + --admin-user <логин_админа> \ + --admin-pass '<пароль_админа>' \ + --data-dir <директория_данных> +``` + +После успешной установки скрипт автоматически обновит `config.php`: +- `installed` => `true` +- Добавит `overwriteprotocol` => `https` (для работы за прокси) + +### 3. SSL сертификаты + +**SSL сертификаты настраиваются на прокси-сервере**, а не на сервере с F7cloud. Убедитесь, что прокси корректно передаёт заголовки и использует HTTPS. + +## Структура config.php + +Скрипт создаёт `config/config.php` со следующими настройками: + +- **База данных**: PostgreSQL с указанными параметрами +- **Redis**: `127.0.0.1:6379` для распределённого кэша и блокировок +- **APCu**: для локального кэша +- **Секреты**: автоматически сгенерированные `passwordsalt`, `secret`, `instanceid` +- **Trusted domains**: указанные домены +- **Data directory**: указанная директория (по умолчанию `/data`) + +## Настройка F7Talk из конфига + +Чтобы настроить F7Talk автоматически без ручного ввода: + +1. Скопируйте пример конфига: + ```bash + cp config/talk-config.example.php config/talk-config.php + ``` + +2. Отредактируйте `config/talk-config.php` и укажите нужные настройки: + - `federation_enabled` — включить федерацию + - `allowed_groups` — группы с доступом к Talk + - `stun_servers` — STUN серверы + - `breakout_rooms` — включить breakout rooms + - и другие параметры + +3. Запустите `install.sh` — скрипт автоматически обнаружит файл и применит настройки через `occ config:app:set`. + +Если файл `config/talk-config.php` отсутствует, скрипт предложит настроить Talk интерактивно. + +## Безопасность + +- `config/config.php` имеет права `640` и владельца `root:www-data` +- Директория данных имеет права `750` и владельца `www-data:www-data` +- Старый `config.php` сохраняется в бэкап перед перезаписью +- Пароли администратора и БД не отображаются при вводе (скрытый ввод) + +## Устранение проблем + +### Redis не запускается + +```bash +sudo systemctl status redis-server +sudo systemctl start redis-server +``` + +### Apache не перезапускается + +```bash +sudo apache2ctl configtest +sudo systemctl restart apache2 +``` + +### Ошибки прав доступа + +```bash +sudo chown -R www-data:www-data /var/www/f7cloud +sudo chown -R www-data:www-data /data +``` + +### Проверка подключения к PostgreSQL + +```bash +psql -h localhost -U f7user -d f7cloud_db -c "SELECT 1;" +``` + +## Ручная установка + +Если скрипт не подходит, создайте `config/config.php` вручную на основе `config/config.sample.php` и заполните: + +- `passwordsalt` — случайная строка (32+ символов) +- `secret` — случайная строка (32+ символов) +- `instanceid` — случайная строка (8 символов) +- `trusted_domains` — массив доменов +- `datadirectory` — путь к директории данных +- Параметры БД: `dbtype`, `dbname`, `dbhost`, `dbport`, `dbuser`, `dbpassword`, `dbtableprefix` +- Настройки Redis: `redis` массив с `host`, `port`, `timeout`, `dbindex` diff --git a/config/talk-config.example.php b/config/talk-config.example.php new file mode 100644 index 00000000..38bd83ee --- /dev/null +++ b/config/talk-config.example.php @@ -0,0 +1,51 @@ + 'yes', // 'yes' или 'no' + + // Группы, которым разрешён доступ к Talk (массив ID групп или пустой массив для всех) + 'allowed_groups' => [], // например: ['admin', 'users'] + + // Группы, которые могут создавать беседы (массив ID групп или пустой массив для всех) + 'start_conversations' => [], // например: ['admin', 'users'] + + // STUN серверы (массив строк) + 'stun_servers' => [ + 'stun.f7cloud.com:443', + // Добавьте свои STUN серверы + ], + + // TURN серверы (массив массивов с конфигурацией) + // 'turn_servers' => [ + // [ + // 'server' => 'turn.example.com:3478', + // 'secret' => 'your-turn-secret', + // 'protocols' => 'udp,tcp', + // ], + // ], + + // Включить breakout rooms + 'breakout_rooms' => 'yes', // 'yes' или 'no' + + // Включить запись звонков + 'call_recording' => 'yes', // 'yes' или 'no' + + // Папка для вложений по умолчанию + 'default_attachment_folder' => '/Talk', + + // Группы для SIP моста (если используется) + // 'sip_bridge_groups' => [], + + // Информация для SIP dial-in + // 'sip_bridge_dialin_info' => '', + + // Общий секрет для SIP моста + // 'sip_bridge_shared_secret' => '', +]; diff --git a/install.sh b/install.sh new file mode 100755 index 00000000..0b191c42 --- /dev/null +++ b/install.sh @@ -0,0 +1,500 @@ +#!/bin/bash +# +# Скрипт инициализации F7cloud клиента +# Устанавливает зависимости, настраивает Apache, Redis, PostgreSQL +# + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +INSTALL_DIR="$SCRIPT_DIR" +CONFIG_FILE="$INSTALL_DIR/config/config.php" +DATA_DIR="/data" +APACHE_USER="www-data" + +echo "==========================================" +echo "F7cloud Client Installation Script" +echo "==========================================" +echo "" + +# Проверка прав root +if [ "$EUID" -ne 0 ]; then + echo "Ошибка: Скрипт должен запускаться от root" + exit 1 +fi + +# Функция генерации случайной строки +generate_random() { + openssl rand -hex 32 +} + +# Функция генерации instanceid +generate_instanceid() { + openssl rand -hex 4 +} + +# Проверка и установка зависимостей +echo "[1/7] Проверка зависимостей..." + +# PHP +if ! command -v php &> /dev/null; then + echo "Установка PHP..." + apt-get update -qq + apt-get install -y php-fpm php-cli php-common php-mysql php-pgsql php-curl php-gd php-mbstring php-xml php-zip php-bcmath php-intl php-redis php-apcu php-imagick 2>/dev/null +fi + +PHP_VERSION=$(php -r 'echo PHP_VERSION;') +echo "✓ PHP $PHP_VERSION установлен" + +# Apache +if ! command -v apache2 &> /dev/null && ! command -v httpd &> /dev/null; then + echo "Установка Apache..." + apt-get install -y apache2 libapache2-mod-php 2>/dev/null +fi + +if command -v apache2 &> /dev/null; then + APACHE_CMD="apache2ctl" + APACHE_SERVICE="apache2" +elif command -v httpd &> /dev/null; then + APACHE_CMD="apachectl" + APACHE_SERVICE="httpd" +else + echo "Ошибка: Apache не найден" + exit 1 +fi + +echo "✓ Apache установлен" + +# Включить необходимые модули Apache +echo "Включение модулей Apache..." +a2enmod rewrite headers env dir mime setenvif 2>/dev/null || true +a2enmod php* 2>/dev/null || true + +# PostgreSQL клиент +if ! command -v psql &> /dev/null; then + echo "Установка PostgreSQL клиента..." + apt-get install -y postgresql-client 2>/dev/null +fi +echo "✓ PostgreSQL клиент установлен" + +# Redis +if ! command -v redis-cli &> /dev/null; then + echo "[2/7] Установка Redis..." + apt-get install -y redis-server 2>/dev/null + + # Настройка Redis + sed -i 's/^# maxmemory /maxmemory 256mb/' /etc/redis/redis.conf 2>/dev/null || true + sed -i 's/^# maxmemory-policy noeviction/maxmemory-policy allkeys-lru/' /etc/redis/redis.conf 2>/dev/null || true + + systemctl enable redis-server 2>/dev/null || systemctl enable redis 2>/dev/null || true + systemctl restart redis-server 2>/dev/null || systemctl restart redis 2>/dev/null || true + echo "✓ Redis установлен и запущен" +else + echo "[2/7] ✓ Redis уже установлен" + systemctl start redis-server 2>/dev/null || systemctl start redis 2>/dev/null || true +fi + +# Проверка подключения к Redis +if redis-cli ping &> /dev/null; then + echo "✓ Redis работает" +else + echo "⚠ Предупреждение: Redis не отвечает на ping" +fi + +# Настройка Apache +echo "[3/7] Настройка Apache..." + +# Определить домен +read -p "Введите доменное имя для F7cloud (например: cloud.example.com): " DOMAIN +if [ -z "$DOMAIN" ]; then + echo "Ошибка: Домен обязателен" + exit 1 +fi + +# Определить путь установки (DocumentRoot) +read -p "Путь установки F7cloud [$INSTALL_DIR]: " INSTALL_PATH +INSTALL_PATH=${INSTALL_PATH:-$INSTALL_DIR} + +# Создать виртуальный хост Apache +APACHE_SITE_FILE="/etc/apache2/sites-available/f7cloud.conf" +if [ -f "/etc/httpd/conf.d/f7cloud.conf" ] || [ -f "/etc/apache2/sites-available/f7cloud.conf" ]; then + read -p "Конфиг Apache для f7cloud уже существует. Перезаписать? (y/N): " OVERWRITE + if [[ ! "$OVERWRITE" =~ ^[Yy]$ ]]; then + echo "Пропуск создания конфига Apache" + else + rm -f /etc/apache2/sites-available/f7cloud.conf /etc/httpd/conf.d/f7cloud.conf + fi +fi + +if [ ! -f "/etc/apache2/sites-available/f7cloud.conf" ] && [ ! -f "/etc/httpd/conf.d/f7cloud.conf" ]; then + cat > "$APACHE_SITE_FILE" < + ServerName $DOMAIN + DocumentRoot $INSTALL_PATH + + + Options -Indexes +FollowSymLinks + AllowOverride All + Require all granted + + + ErrorLog \${APACHE_LOG_DIR}/f7cloud_error.log + CustomLog \${APACHE_LOG_DIR}/f7cloud_access.log combined + +EOF + + # Если Apache 2.4+ + if [ -d "/etc/apache2/sites-available" ]; then + a2ensite f7cloud.conf 2>/dev/null || true + fi + + echo "✓ Конфиг Apache создан: $APACHE_SITE_FILE" +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 +fi + +read -p "Пользователь PostgreSQL: " DB_USER +if [ -z "$DB_USER" ]; then + echo "Ошибка: Пользователь обязателен" + exit 1 +fi + +read -sp "Пароль PostgreSQL: " DB_PASSWORD +echo "" +if [ -z "$DB_PASSWORD" ]; then + echo "Ошибка: Пароль обязателен" + exit 1 +fi + +read -p "Префикс таблиц [oc_]: " DB_PREFIX +DB_PREFIX=${DB_PREFIX:-oc_} + +# Проверка подключения к БД +echo "Проверка подключения к PostgreSQL..." +export PGPASSWORD="$DB_PASSWORD" +if psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "SELECT 1;" &> /dev/null; then + echo "✓ Подключение к PostgreSQL успешно" +else + echo "⚠ Предупреждение: Не удалось подключиться к PostgreSQL" + echo " Убедитесь, что база данных создана и пользователь имеет права" +fi +unset PGPASSWORD + +# Дополнительные настройки +echo "[5/8] Дополнительные настройки..." + +read -p "Директория данных [$DATA_DIR]: " DATA_DIR_INPUT +DATA_DIR=${DATA_DIR_INPUT:-$DATA_DIR} + +read -p "Trusted domains (через запятую) [$DOMAIN]: " TRUSTED_DOMAINS_INPUT +TRUSTED_DOMAINS=${TRUSTED_DOMAINS_INPUT:-$DOMAIN} + +read -p "Trusted proxies (IP через запятую, Enter для пропуска): " TRUSTED_PROXIES + +read -p "CLI URL (для occ команд) [https://$DOMAIN]: " CLI_URL +CLI_URL=${CLI_URL:-https://$DOMAIN} + +# Данные администратора +echo "[6/8] Создание администратора..." + +read -p "Логин администратора [admin]: " ADMIN_USER +ADMIN_USER=${ADMIN_USER:-admin} + +read -sp "Пароль администратора: " ADMIN_PASSWORD +echo "" +if [ -z "$ADMIN_PASSWORD" ]; then + echo "Ошибка: Пароль администратора обязателен" + exit 1 +fi + +# Генерация секретов +echo "[7/8] Генерация секретов..." +PASSWORD_SALT=$(generate_random) +SECRET=$(generate_random) +INSTANCE_ID=$(generate_instanceid) + +# Создание config.php +echo "[8/8] Создание config.php..." + +# Создать директорию config если нет +mkdir -p "$INSTALL_DIR/config" + +# Бэкап существующего config.php +if [ -f "$CONFIG_FILE" ]; then + cp "$CONFIG_FILE" "$CONFIG_FILE.backup.$(date +%Y%m%d_%H%M%S)" + echo "✓ Старый config.php сохранен в бэкап" +fi + +# Создать config.php +cat > "$CONFIG_FILE" < '$PASSWORD_SALT', + 'secret' => '$SECRET', + 'trusted_domains' => + array ( +EOF + +# Добавить trusted domains +IFS=',' read -ra DOMAINS <<< "$TRUSTED_DOMAINS" +for i in "${!DOMAINS[@]}"; do + DOMAIN_CLEAN=$(echo "${DOMAINS[$i]}" | xargs) + echo " $i => '$DOMAIN_CLEAN'," >> "$CONFIG_FILE" +done + +cat >> "$CONFIG_FILE" < " >> "$CONFIG_FILE" + echo " array (" >> "$CONFIG_FILE" + IFS=',' read -ra PROXIES <<< "$TRUSTED_PROXIES" + for i in "${!PROXIES[@]}"; do + PROXY_CLEAN=$(echo "${PROXIES[$i]}" | xargs) + echo " $i => '$PROXY_CLEAN'," >> "$CONFIG_FILE" + done + echo " )," >> "$CONFIG_FILE" +fi + +cat >> "$CONFIG_FILE" < '$DATA_DIR', + 'dbtype' => 'pgsql', + 'version' => '1.0.0', + 'dbname' => '$DB_NAME', + 'dbhost' => '$DB_HOST', + 'dbport' => '$DB_PORT', + 'dbtableprefix' => '$DB_PREFIX', + 'dbuser' => '$DB_USER', + 'dbpassword' => '$DB_PASSWORD', + 'installed' => false, + 'instanceid' => '$INSTANCE_ID', + 'memcache.local' => '\\\\OC\\\\Memcache\\\\APCu', + 'memcache.distributed' => '\\\\OC\\\\Memcache\\\\Redis', + 'memcache.locking' => '\\\\OC\\\\Memcache\\\\Redis', + 'redis' => + array ( + 'host' => '127.0.0.1', + 'port' => 6379, + 'timeout' => 1.5, + 'dbindex' => 0, + ), + 'maintenance' => false, + 'loglevel' => 0, + 'overwrite.cli.url' => '$CLI_URL', + 'htaccess.RewriteBase' => '/', +); +EOF + +chmod 640 "$CONFIG_FILE" +chown root:$APACHE_USER "$CONFIG_FILE" +echo "✓ config.php создан" + +# Создание директории данных +if [ ! -d "$DATA_DIR" ]; then + mkdir -p "$DATA_DIR" + echo "✓ Директория данных создана: $DATA_DIR" +fi + +chown -R $APACHE_USER:$APACHE_USER "$DATA_DIR" +chmod 750 "$DATA_DIR" +echo "✓ Права на директорию данных установлены" + +# Права на установочную директорию +chown -R $APACHE_USER:$APACHE_USER "$INSTALL_DIR" +find "$INSTALL_DIR" -type f -exec chmod 640 {} \; +find "$INSTALL_DIR" -type d -exec chmod 750 {} \; +find "$INSTALL_DIR" -name "*.sh" -exec chmod 750 {} \; +find "$INSTALL_DIR" -name "*.php" -exec chmod 640 {} \; +echo "✓ Права на файлы установлены" + +# Перезапуск Apache +echo "" +echo "Перезапуск Apache..." +systemctl reload apache2 2>/dev/null || systemctl reload httpd 2>/dev/null || $APACHE_CMD graceful 2>/dev/null || true +echo "✓ Apache перезапущен" + +# Запуск occ maintenance:install +echo "" +echo "[9/9] Инициализация F7cloud через occ..." + +cd "$INSTALL_DIR" + +# Проверка что база данных существует +export PGPASSWORD="$DB_PASSWORD" +if ! psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "SELECT 1;" &> /dev/null; then + echo "⚠ Предупреждение: База данных '$DB_NAME' не доступна" + echo " Создайте базу данных перед продолжением:" + echo " CREATE DATABASE $DB_NAME OWNER $DB_USER;" + read -p "Продолжить установку? (y/N): " CONTINUE + if [[ ! "$CONTINUE" =~ ^[Yy]$ ]]; then + echo "Установка прервана" + exit 1 + fi +fi +unset PGPASSWORD + +# Запуск maintenance:install +echo "Запуск occ maintenance:install..." +if sudo -u $APACHE_USER php occ maintenance:install \ + --database pgsql \ + --database-name "$DB_NAME" \ + --database-host "$DB_HOST:$DB_PORT" \ + --database-user "$DB_USER" \ + --database-pass "$DB_PASSWORD" \ + --admin-user "$ADMIN_USER" \ + --admin-pass "$ADMIN_PASSWORD" \ + --data-dir "$DATA_DIR" 2>&1; then + + echo "✓ F7cloud успешно инициализирован" + + # Обновить config.php - установить installed => true + if grep -q "'installed' => false" "$CONFIG_FILE"; then + sed -i "s/'installed' => false/'installed' => true/" "$CONFIG_FILE" + echo "✓ config.php обновлен (installed => true)" + fi + + # Если есть overwriteprotocol, установить https (если прокси использует HTTPS) + if ! grep -q "overwriteprotocol" "$CONFIG_FILE"; then + sed -i "/'htaccess.RewriteBase' => '/a\\ 'overwriteprotocol' => 'https'," "$CONFIG_FILE" + echo "✓ Добавлен overwriteprotocol => https (для работы за прокси)" + fi + + # Настройка F7Talk (если приложение установлено) + echo "" + TALK_CONFIG_FILE="$INSTALL_DIR/config/talk-config.php" + + if [ -f "$TALK_CONFIG_FILE" ]; then + echo "Найдён файл конфигурации F7Talk: $TALK_CONFIG_FILE" + 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" + USE_TALK_CONFIG_FILE=false + fi + fi + + if [ "$USE_TALK_CONFIG_FILE" = true ] || [[ "$CONFIGURE_TALK" =~ ^[Yy]$ ]]; then + echo "Настройка F7Talk..." + + # Проверка, включён ли Talk + TALK_APP_ID="" + if sudo -u $APACHE_USER php occ app:list 2>/dev/null | grep -qE "(f7talk|spreed).*enabled"; then + TALK_APP_ID=$(sudo -u $APACHE_USER php occ app:list 2>/dev/null | grep -E "(f7talk|spreed)" | grep enabled | awk '{print $1}' | head -1) + fi + + if [ -z "$TALK_APP_ID" ]; then + echo "⚠ F7Talk не включен. Попытка включить..." + sudo -u $APACHE_USER php occ app:enable f7talk 2>/dev/null || sudo -u $APACHE_USER php occ app:enable spreed 2>/dev/null || true + TALK_APP_ID=$(sudo -u $APACHE_USER php occ app:list 2>/dev/null | grep -E "(f7talk|spreed)" | grep enabled | awk '{print $1}' | head -1) + fi + + if [ -n "$TALK_APP_ID" ]; then + # Если есть файл конфига - читаем из него + if [ -f "$TALK_CONFIG_FILE" ]; then + # Читаем настройки из PHP файла через php + TALK_FEDERATION=$(php -r "require '$TALK_CONFIG_FILE'; echo \$config['federation_enabled'] ?? 'no';" 2>/dev/null || echo "no") + TALK_ALLOWED_GROUPS=$(php -r "require '$TALK_CONFIG_FILE'; echo json_encode(\$config['allowed_groups'] ?? []);" 2>/dev/null || echo "[]") + TALK_START_CONVERSATIONS=$(php -r "require '$TALK_CONFIG_FILE'; echo json_encode(\$config['start_conversations'] ?? []);" 2>/dev/null || echo "[]") + TALK_STUN_SERVERS=$(php -r "require '$TALK_CONFIG_FILE'; echo json_encode(\$config['stun_servers'] ?? []);" 2>/dev/null || echo "[]") + TALK_BREAKOUT_ROOMS=$(php -r "require '$TALK_CONFIG_FILE'; echo \$config['breakout_rooms'] ?? 'yes';" 2>/dev/null || echo "yes") + TALK_CALL_RECORDING=$(php -r "require '$TALK_CONFIG_FILE'; echo \$config['call_recording'] ?? 'yes';" 2>/dev/null || echo "yes") + TALK_ATTACHMENT_FOLDER=$(php -r "require '$TALK_CONFIG_FILE'; echo \$config['default_attachment_folder'] ?? '/Talk';" 2>/dev/null || echo "/Talk") + + echo "✓ Настройки прочитаны из $TALK_CONFIG_FILE" + else + # Интерактивный ввод + read -p "Включить федерацию Talk? (y/N): " TALK_FEDERATION_INPUT + TALK_FEDERATION=$([ "$TALK_FEDERATION_INPUT" = "y" ] || [ "$TALK_FEDERATION_INPUT" = "Y" ] && echo "yes" || echo "no") + + read -p "Группы для доступа к Talk (через запятую, Enter для всех): " TALK_ALLOWED_GROUPS_INPUT + if [ -n "$TALK_ALLOWED_GROUPS_INPUT" ]; then + TALK_ALLOWED_GROUPS=$(echo "$TALK_ALLOWED_GROUPS_INPUT" | awk -F',' '{printf "["; for(i=1;i<=NF;i++) {gsub(/^[ \t]+|[ \t]+$/, "", $i); if(i>1) printf ","; printf "\"%s\"", $i} printf "]"}') + else + TALK_ALLOWED_GROUPS="[]" + fi + + read -p "STUN серверы (через запятую, Enter для пропуска): " TALK_STUN_SERVERS_INPUT + if [ -n "$TALK_STUN_SERVERS_INPUT" ]; then + TALK_STUN_SERVERS=$(echo "$TALK_STUN_SERVERS_INPUT" | awk -F',' '{printf "["; for(i=1;i<=NF;i++) {gsub(/^[ \t]+|[ \t]+$/, "", $i); if(i>1) printf ","; printf "\"%s\"", $i} printf "]"}') + else + TALK_STUN_SERVERS="[]" + fi + + TALK_START_CONVERSATIONS="[]" + TALK_BREAKOUT_ROOMS="yes" + TALK_CALL_RECORDING="yes" + TALK_ATTACHMENT_FOLDER="/Talk" + fi + + # Применение настроек через occ + if [ "$TALK_FEDERATION" = "yes" ]; then + sudo -u $APACHE_USER php occ config:app:set "$TALK_APP_ID" federation_enabled --value="yes" 2>/dev/null || true + echo "✓ Федерация Talk включена" + fi + + if [ "$TALK_ALLOWED_GROUPS" != "[]" ]; then + sudo -u $APACHE_USER php occ config:app:set "$TALK_APP_ID" allowed_groups --value="$TALK_ALLOWED_GROUPS" 2>/dev/null || true + echo "✓ Группы для Talk настроены: $TALK_ALLOWED_GROUPS" + fi + + if [ "$TALK_START_CONVERSATIONS" != "[]" ]; then + sudo -u $APACHE_USER php occ config:app:set "$TALK_APP_ID" start_conversations --value="$TALK_START_CONVERSATIONS" 2>/dev/null || true + echo "✓ Группы для создания бесед настроены" + fi + + if [ "$TALK_STUN_SERVERS" != "[]" ]; then + sudo -u $APACHE_USER php occ config:app:set "$TALK_APP_ID" stun_servers --value="$TALK_STUN_SERVERS" 2>/dev/null || true + echo "✓ STUN серверы настроены: $TALK_STUN_SERVERS" + fi + + sudo -u $APACHE_USER php occ config:app:set "$TALK_APP_ID" breakout_rooms --value="$TALK_BREAKOUT_ROOMS" 2>/dev/null || true + sudo -u $APACHE_USER php occ config:app:set "$TALK_APP_ID" call_recording --value="$TALK_CALL_RECORDING" 2>/dev/null || true + sudo -u $APACHE_USER php occ config:app:set "$TALK_APP_ID" default_attachment_folder --value="$TALK_ATTACHMENT_FOLDER" 2>/dev/null || true + + echo "✓ Настройки F7Talk применены" + else + echo "⚠ F7Talk не найден. Убедитесь, что приложение установлено." + fi + fi + +else + echo "⚠ Ошибка при запуске occ maintenance:install" + echo " Проверьте логи и убедитесь, что база данных создана" + exit 1 +fi + +echo "" +echo "==========================================" +echo "Установка завершена!" +echo "==========================================" +echo "" +echo "F7cloud успешно установлен и настроен." +echo "" +echo "Данные для входа:" +echo " URL: https://$DOMAIN" +echo " Логин: $ADMIN_USER" +echo " Пароль: <указанный вами>" +echo "" +echo "Конфигурация сохранена в: $CONFIG_FILE" +echo "Директория данных: $DATA_DIR" +echo "" +echo "Примечание: SSL сертификаты должны быть настроены на прокси-сервере." +echo ""