Add installation script with Talk config support

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
root 2026-02-18 13:54:46 +00:00
parent 8b6a0139db
commit 0af50038fe
3 changed files with 713 additions and 0 deletions

162
README_INSTALL.md Normal file
View File

@ -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`

View File

@ -0,0 +1,51 @@
<?php
/**
* Пример конфигурации F7Talk
*
* Скопируйте этот файл в talk-config.php и заполните нужные значения.
* Скрипт install.sh автоматически применит эти настройки после установки.
*/
return [
// Включить федерацию Talk
'federation_enabled' => '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' => '',
];

500
install.sh Executable file
View File

@ -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 <bytes>/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" <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
DocumentRoot $INSTALL_PATH
<Directory $INSTALL_PATH>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/f7cloud_error.log
CustomLog \${APACHE_LOG_DIR}/f7cloud_access.log combined
</VirtualHost>
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" <<EOF
<?php
\$CONFIG = array (
'passwordsalt' => '$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" <<EOF
),
EOF
# Trusted proxies
if [ -n "$TRUSTED_PROXIES" ]; then
echo " 'trusted_proxies' => " >> "$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" <<EOF
'datadirectory' => '$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 ""