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

8.1 KiB
Raw Blame History

Настройка 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

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 конфиг