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