Add installation script with Talk config support
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
8b6a0139db
commit
0af50038fe
162
README_INSTALL.md
Normal file
162
README_INSTALL.md
Normal 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`
|
||||||
51
config/talk-config.example.php
Normal file
51
config/talk-config.example.php
Normal 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
500
install.sh
Executable 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 ""
|
||||||
Loading…
Reference in New Issue
Block a user