# Исправление проблемы с сохранением в 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= ``` 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 "callbackUrl": "http://crm.clientright.ru/crm_extensions/file_storage/api/onlyoffice_callback.php?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!