✅ Что реализовано: - 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 редакторе!
179 lines
8.1 KiB
Markdown
179 lines
8.1 KiB
Markdown
# Настройка 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 конфиг
|
||
|