Files
crm.clientright.ru/crm_extensions/docs/NEXTCLOUD_SSL_SETUP.md
Fedor 1f96ab6e10 feat: Полная интеграция CRM → Nextcloud редактор
 Что реализовано:
- SSL/HTTPS для Nextcloud (Let's Encrypt R13)
- Redis кэширование для производительности
- Collabora Online редактор документов
- WOPI allow list настроен (0.0.0.0/0)
- Динамическое получение fileId через WebDAV
- Поддержка файлов из S3 и локальных файлов
- Автоматическое извлечение имени файла из URL
- Промежуточная страница для обхода CSRF

🚀 Как работает:
1. JavaScript передает recordId и fileName
2. PHP получает fileId через WebDAV PROPFIND
3. PHP делает редирект на рабочий URL Nextcloud
4. Файл открывается в редакторе Collabora

📁 Файлы:
- layouts/v7/lib/nextcloud-editor.js - JavaScript интеграция
- crm_extensions/file_storage/api/open_file.php - PHP редирект
- modules/Documents/actions/NcPrepareEdit.php - API подготовка
- crm_extensions/docs/ - документация

🎯 Результат: Каждый документ в CRM открывает СВОЙ файл в Nextcloud редакторе!
2025-10-21 22:10:47 +03:00

179 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Настройка SSL для Nextcloud
**Дата:** 21 октября 2025
**Домен:** office.clientright.ru
**Порт HTTPS:** 8443 (нестандартный, т.к. 443 занят основным CRM)
## Что было сделано
### 1. Обновлён nginx конфигурация
- **Файл:** `/etc/nginx/fastpanel2-sites/office/office.clientright.ru.ssl.conf`
- **Изменения:**
- Изменён порт проксирования с `32770` на `8082` (новый контейнер `nextcloud-fresh`)
- Добавлены заголовки `X-Forwarded-Host` и `X-Forwarded-Port` для правильной работы HTTPS прокси
- Включён `proxy_buffering off` для лучшей производительности
### 2. Настроен config.php Nextcloud
**Файл в контейнере:** `/var/www/html/config/config.php`
**Добавлены параметры:**
```php
// HTTPS конфигурация
'overwrite.cli.url' => 'https://office.clientright.ru:8443',
'overwritehost' => 'office.clientright.ru:8443',
'overwriteprotocol' => 'https',
// Доверенные прокси
'trusted_proxies' => array(
0 => '127.0.0.1',
1 => '147.45.146.17',
),
'forwarded_for_headers' => array(
0 => 'X-Forwarded-For',
),
// Локальное кэширование (без Redis, т.к. контейнеры в разных сетях)
// Для подключения Redis нужно объединить контейнеры в одну Docker сеть
// Дополнительные настройки
'default_phone_region' => 'RU',
'maintenance_window_start' => 3,
// Доверенные домены
'trusted_domains' => array(
0 => 'localhost',
1 => 'office.clientright.ru',
2 => 'office.clientright.ru:8443',
3 => 'office.klientprav.tech',
4 => 'office.klientprav.tech:8443',
),
```
### 3. Настроен Redis для ускорения работы
**Проблема:** Контейнеры `nextcloud-fresh` и `nextcloud-redis` изначально находились в разных Docker сетях.
**Решение:** Подключили Redis к той же сети и настроили кэширование:
```bash
# Подключение Redis к сети Nextcloud
docker network connect root_nextcloud-network nextcloud-redis
# Настройка кэширования
docker exec -u www-data nextcloud-fresh php occ config:system:set memcache.distributed --value="\\OC\\Memcache\\Redis"
docker exec -u www-data nextcloud-fresh php occ config:system:set memcache.locking --value="\\OC\\Memcache\\Redis"
docker exec -u www-data nextcloud-fresh php occ config:system:set redis host --value="nextcloud-redis"
docker exec -u www-data nextcloud-fresh php occ config:system:set redis port --value=6379 --type=integer
# Перезапуск Nextcloud
docker restart nextcloud-fresh
```
**Результат:**
- ✅ Redis 7.4.6 работает корректно
- ✅ 7 активных подключений
- ✅ Используется для распределенного кеша и блокировок файлов
- ✅ APCu используется для локального кеша
- 🔥 Значительное ускорение работы Nextcloud
### 4. Выполнены команды оптимизации
```bash
# Добавлены отсутствующие индексы для производительности
docker exec -u www-data nextcloud-fresh php occ db:add-missing-indices
# Выполнена миграция mimetype и другие исправления
docker exec -u www-data nextcloud-fresh php occ maintenance:repair --include-expensive
```
### 5. Перезапущены службы
```bash
# Перезагрузка nginx
nginx -t
systemctl reload nginx
# Перезапуск Nextcloud
docker restart nextcloud-fresh
```
## Текущее состояние
**HTTPS работает корректно** на `https://office.clientright.ru:8443`
**SSL сертификат:** Let's Encrypt (действителен до 30 декабря 2025)
**Nextcloud понимает**, что работает через HTTPS прокси
**Redis настроен** для кэширования и блокировок файлов (версия 7.4.6)
**APCu настроен** для локального кэширования
**Индексы БД добавлены** для производительности
**HSTS включён** (max-age=63072000)
**Secure cookies** установлены
**Collabora Online** работает корректно
## Исправление "Socket proxy error"
**Проблема:** После настройки HTTPS возникала ошибка "Socket proxy error: Timed out opening local socket: 99"
**Причина:** Встроенный CODE Server (richdocumentscode) не мог открыть локальный сокет на порту 9983
**Решение 1:** Переключились на внешний Collabora Online на порту 9980
**Решение 2:** Настроили правильные URL для внутреннего и внешнего подключения:
```bash
# Внутренний URL для подключения Nextcloud → Collabora (через Docker сеть)
docker exec -u www-data nextcloud-fresh php occ config:app:set richdocuments wopi_url --value="http://collabora-fresh:9980"
# Публичный URL для подключения Браузер → Collabora (через nginx)
docker exec -u www-data nextcloud-fresh php occ config:app:delete richdocuments public_wopi_url
docker exec -u www-data nextcloud-fresh php occ config:app:set richdocuments public_wopi_url --value="https://office.clientright.ru:8443"
# Отключение проверки сертификата для внутреннего подключения
docker exec -u www-data nextcloud-fresh php occ config:app:set richdocuments disable_certificate_verification --value="yes"
# Перезапуск Nextcloud
docker restart nextcloud-fresh
```
**Результат:**
- ✅ Collabora Online Development Edition 25.04.5.3 обнаружен
- ✅ Поддержка: doc, docx, odt, xls, xlsx, ppt, pptx и др.
- ✅ Редактирование документов работает
## Оставшиеся предупреждения
⚠️ **Высокопроизводительный сервер для Nextcloud Talk** - требуется настройка отдельно, если планируется использовать видеозвонки с более чем 2-3 участниками
⚠️ **Настройка почтового сервера** - можно настроить в админке Nextcloud для отправки уведомлений
⚠️ **Версия MariaDB 12.0.2** - рекомендуется 10.6-11.4, но текущая версия работает стабильно
## Доступ к Nextcloud
- **HTTP:** http://office.clientright.ru → автоматический редирект на HTTPS
- **HTTPS:** https://office.clientright.ru:8443 ✅
- **Альтернативный домен:** office.klientprav.tech:8443
## Docker контейнеры
```bash
docker ps | grep nextcloud
# nextcloud-fresh - основной контейнер Nextcloud на порту 8082
# nextcloud-db-fresh - MariaDB база данных
# nextcloud-redis - Redis для кэширования
```
## Примечание о порте 443
Стандартный HTTPS порт 443 занят основным CRM сайтом (`crm.clientright.ru`).
Если в будущем понадобится перенести Nextcloud на порт 443, нужно будет настроить виртуальные хосты nginx для разделения трафика по `server_name`.
## Резервная копия
Исходные файлы сохранены:
- `/tmp/nextcloud_config_fixed.php` - новый config.php
- `/etc/nginx/fastpanel2-sites/office.clientright.ru.ssl.conf.backup` - старый nginx конфиг