✅ Что реализовано: - 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 редакторе!
8.1 KiB
Настройка 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
Добавлены параметры:
// 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 к той же сети и настроили кэширование:
# Подключение 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. Выполнены команды оптимизации
# Добавлены отсутствующие индексы для производительности
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. Перезапущены службы
# Перезагрузка 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 для внутреннего и внешнего подключения:
# Внутренний 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 контейнеры
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 конфиг