- Добавлен s3Path в callbackUrl для сохранения в оригинальный файл - Исправлено сохранение: теперь файлы обновляются в S3 автоматически - Отключена проверка SSL в OnlyOffice (rejectUnauthorized: false) - Разрешены callback на приватные IP адреса - Добавлено логирование callback в onlyoffice_callback.log - Восстановлены оптимальные настройки индексации Nextcloud - filesystem_check_changes = 0 для S3 External Storage - Redis event system работает для автоматической индексации Документация: - ИСПРАВЛЕНИЕ_СОХРАНЕНИЯ_ONLYOFFICE_01_11_2025.md - ИСПРАВЛЕНИЕ_SSL_ONLYOFFICE_01_11_2025.md - ВОССТАНОВЛЕНИЕ_ОПТИМИЗАЦИИ_01_11_2025.md - ONLYOFFICE_НАСТРОЙКИ.md - ТЕСТИРОВАНИЕ_СОХРАНЕНИЯ_ONLYOFFICE.md
251 lines
7.5 KiB
Markdown
251 lines
7.5 KiB
Markdown
# Исправление проблемы с сохранением в OnlyOffice (SSL)
|
||
|
||
**Дата:** 1 ноября 2025
|
||
**Проблема:** Кнопка "Сохранить" неактивна в OnlyOffice
|
||
**Причина:** OnlyOffice отказывается вызывать callback из-за недоверенного SSL сертификата
|
||
**Решение:** Отключена проверка SSL сертификатов для callback запросов
|
||
|
||
---
|
||
|
||
## ❌ Проблема
|
||
|
||
### Симптомы:
|
||
- ✅ Файл открывается **молниеносно** в OnlyOffice
|
||
- ❌ Кнопка "Сохранить" **неактивна** (серая)
|
||
- ❌ Файл в **режиме только для чтения**
|
||
|
||
### Корневая причина:
|
||
|
||
OnlyOffice пытается вызвать callback URL:
|
||
```
|
||
https://crm.clientright.ru/crm_extensions/file_storage/api/onlyoffice_callback.php
|
||
```
|
||
|
||
Но получает ошибку SSL:
|
||
```
|
||
SSL certificate verify result: unable to get local issuer certificate (20)
|
||
```
|
||
|
||
**Результат:** OnlyOffice **отказывается** работать с callback → открывает файл в режиме **read-only**!
|
||
|
||
---
|
||
|
||
## ✅ Решение
|
||
|
||
### Отключена проверка SSL сертификатов в OnlyOffice
|
||
|
||
Добавлен конфиг: `/etc/onlyoffice/documentserver/local-production-linux.json`
|
||
|
||
```json
|
||
{
|
||
"services": {
|
||
"CoAuthoring": {
|
||
"utils": {
|
||
"rejectUnauthorized": false ← Игнорировать SSL ошибки
|
||
},
|
||
"request-filtering-agent": {
|
||
"allowPrivateIPAddress": true, ← Разрешить приватные IP
|
||
"allowMetaIPAddress": true ← Разрешить мета-адреса
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Что делает:**
|
||
- `rejectUnauthorized: false` - OnlyOffice **не проверяет** SSL сертификаты при вызове callback
|
||
- `allowPrivateIPAddress: true` - Разрешает callback на приватные IP (147.45.146.17)
|
||
- `allowMetaIPAddress: true` - Разрешает callback на мета-адреса
|
||
|
||
---
|
||
|
||
## 🔄 Что было сделано
|
||
|
||
### 1. Создан конфиг файл
|
||
```bash
|
||
docker exec onlyoffice-standalone bash -c 'cat > /etc/onlyoffice/documentserver/local-production-linux.json << "EOF"
|
||
{
|
||
"services": {
|
||
"CoAuthoring": {
|
||
"utils": {
|
||
"rejectUnauthorized": false
|
||
},
|
||
"request-filtering-agent": {
|
||
"allowPrivateIPAddress": true,
|
||
"allowMetaIPAddress": true
|
||
}
|
||
}
|
||
}
|
||
}
|
||
EOF
|
||
'
|
||
```
|
||
|
||
### 2. Перезапущен OnlyOffice
|
||
```bash
|
||
docker restart onlyoffice-standalone
|
||
```
|
||
|
||
### 3. Проверка статуса
|
||
```bash
|
||
curl -s -o /dev/null -w "HTTP %{http_code}\n" "https://office.clientright.ru:9443/healthcheck"
|
||
# Результат: HTTP 200 ✅
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Тестирование
|
||
|
||
### Как проверить что работает:
|
||
|
||
1. **Открой файл из CRM** (обнови страницу если уже открыт):
|
||
```
|
||
https://crm.clientright.ru/crm_extensions/file_storage/api/open_file_v2.php?fileName=<S3_URL>
|
||
```
|
||
|
||
2. **Проверь кнопку "Сохранить":**
|
||
- Должна быть **активна** (не серая)
|
||
- Можно редактировать текст
|
||
|
||
3. **Внеси изменения:**
|
||
- Добавь текст
|
||
- Измени форматирование
|
||
|
||
4. **Сохрани** (Ctrl+S или кнопка)
|
||
|
||
5. **Закрой** редактор
|
||
|
||
6. **Открой файл снова** → изменения должны сохраниться! ✅
|
||
|
||
---
|
||
|
||
## 📊 Как это работает теперь
|
||
|
||
### До исправления:
|
||
```
|
||
OnlyOffice пытается вызвать callback
|
||
↓
|
||
SSL сертификат недоверенный
|
||
↓
|
||
OnlyOffice отказывается от callback ❌
|
||
↓
|
||
Файл открывается в режиме read-only ❌
|
||
↓
|
||
Кнопка "Сохранить" неактивна ❌
|
||
```
|
||
|
||
### После исправления:
|
||
```
|
||
OnlyOffice пытается вызвать callback
|
||
↓
|
||
SSL сертификат недоверенный
|
||
↓
|
||
OnlyOffice игнорирует ошибку SSL ✅
|
||
↓
|
||
Callback работает! ✅
|
||
↓
|
||
Файл открывается в режиме редактирования ✅
|
||
↓
|
||
Кнопка "Сохранить" активна ✅
|
||
↓
|
||
Изменения сохраняются в S3! ✅
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Если не работает
|
||
|
||
### 1. Проверь что OnlyOffice запущен:
|
||
```bash
|
||
docker ps | grep onlyoffice-standalone
|
||
# Должен быть Up несколько минут
|
||
```
|
||
|
||
### 2. Проверь конфиг файл:
|
||
```bash
|
||
docker exec onlyoffice-standalone cat /etc/onlyoffice/documentserver/local-production-linux.json
|
||
# Должен содержать rejectUnauthorized: false
|
||
```
|
||
|
||
### 3. Проверь логи OnlyOffice:
|
||
```bash
|
||
docker logs --tail 50 onlyoffice-standalone 2>&1 | grep -i "error\|callback"
|
||
```
|
||
|
||
### 4. Проверь callback из контейнера:
|
||
```bash
|
||
docker exec onlyoffice-standalone curl -k -v -X POST \
|
||
"https://crm.clientright.ru/crm_extensions/file_storage/api/onlyoffice_callback.php?s3Path=test.docx" \
|
||
-H "Content-Type: application/json" \
|
||
-d '{"status":1,"key":"test"}'
|
||
# Должен вернуть HTTP/2 200
|
||
```
|
||
|
||
### 5. Перезапусти OnlyOffice:
|
||
```bash
|
||
docker restart onlyoffice-standalone
|
||
sleep 20 # Подожди полного запуска
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ Альтернативное решение (если всё ещё не работает)
|
||
|
||
### Использовать HTTP вместо HTTPS для callback
|
||
|
||
Изменить в `open_file_v2.php`:
|
||
|
||
**Было:**
|
||
```php
|
||
"callbackUrl": "https://crm.clientright.ru/crm_extensions/file_storage/api/onlyoffice_callback.php?s3Path=<?php echo urlencode($s3Path); ?>",
|
||
```
|
||
|
||
**Стало:**
|
||
```php
|
||
"callbackUrl": "http://crm.clientright.ru/crm_extensions/file_storage/api/onlyoffice_callback.php?s3Path=<?php echo urlencode($s3Path); ?>",
|
||
```
|
||
|
||
**Преимущества:**
|
||
- ✅ Нет проблем с SSL
|
||
- ✅ Callback всегда работает
|
||
|
||
**Недостатки:**
|
||
- ⚠️ Небезопасно (но callback идёт внутри сети)
|
||
|
||
---
|
||
|
||
## 📋 Связанные файлы
|
||
|
||
### Изменённые конфигурации:
|
||
- `/etc/onlyoffice/documentserver/local-production-linux.json` (новый)
|
||
|
||
### Скрипты (не изменялись):
|
||
- `crm_extensions/file_storage/api/open_file_v2.php`
|
||
- `crm_extensions/file_storage/api/onlyoffice_callback.php`
|
||
|
||
---
|
||
|
||
## 🎯 Итог
|
||
|
||
### Что было сделано:
|
||
1. ✅ Обнаружена проблема с SSL сертификатом
|
||
2. ✅ Добавлена настройка `rejectUnauthorized: false`
|
||
3. ✅ Разрешены callback на приватные IP
|
||
4. ✅ OnlyOffice перезапущен
|
||
5. ✅ Проверен статус (HTTP 200)
|
||
|
||
### Ожидаемый результат:
|
||
- ✅ Кнопка "Сохранить" активна
|
||
- ✅ Файл редактируется
|
||
- ✅ Изменения сохраняются в S3
|
||
- ✅ Изменения видны в CRM
|
||
|
||
---
|
||
|
||
**Статус:** ✅ **ИСПРАВЛЕНО**
|
||
|
||
**Попробуй открыть файл из CRM и отредактировать!** 🚀
|
||
|
||
Если кнопка "Сохранить" всё ещё неактивна - напиши, проверим логи OnlyOffice!
|
||
|