feat: OnlyOffice Document Server integration with auto-save

- Добавлен 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
This commit is contained in:
Fedor
2025-11-01 10:32:51 +03:00
parent 3e8c3968a0
commit 3a1635ec4d
7 changed files with 1563 additions and 9 deletions

View File

@@ -0,0 +1,301 @@
# Тестирование сохранения в OnlyOffice
**Дата:** 1 ноября 2025
**Цель:** Проверить что файлы сохраняются после редактирования
---
## ✅ Что уже сделано
### 1. OnlyOffice настроен:
- ✅ SSL проверка отключена (`rejectUnauthorized: false`)
- ✅ Разрешены callback на приватные IP
- ✅ OnlyOffice запущен и работает
- ✅ Healthcheck: `true`
- ✅ API доступен
### 2. Скрипты обновлены:
-`open_file_v2.php`: callbackUrl с параметром `s3Path`
-`onlyoffice_callback.php`: сохранение в оригинальный файл
- ✅ Permissions: `edit: true`
- ✅ Mode: `edit`
### 3. Логирование включено:
- ✅ Логи callback: `/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log`
---
## 🧪 Как протестировать
### Шаг 1: Открой файл из CRM
**Пример URL:**
```
https://crm.clientright.ru/crm_extensions/file_storage/api/open_file_v2.php?recordId=395695&fileName=https%3A%2F%2Fs3.twcstorage.ru%2Ff9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c%2Fcrm2%2FCRM_Active_Files%2FDocuments%2FProject%2F...
```
---
### Шаг 2: Проверь кнопку "Сохранить"
**Что должно быть:**
- ✅ Кнопка "Сохранить" **активна** (не серая)
- ✅ Можно редактировать текст
-В правом верхнем углу есть меню "Файл"
**Если кнопка НЕАКТИВНА:**
1. Открой консоль браузера (F12)
2. Посмотри на ошибки (красные строки)
3. Сделай скриншот и покажи
---
### Шаг 3: Внеси изменения
1. **Добавь текст** в документ (например: "ТЕСТ 123")
2. **Нажми Ctrl+S** или кнопку "Сохранить"
3. **Подожди 2-3 секунды**
---
### Шаг 4: Проверь логи
```bash
# Смотрим логи callback
tail -f /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log
```
**Что должно быть в логах:**
```
=== ONLYOFFICE CALLBACK ===
Method: POST
Body: {"status":2,"key":"...","url":"http://..."}
Callback Status: 2, Key: ...
File saved! Download URL: http://...
Downloaded file: ... bytes
Saving to original path: CRM_Active_Files/Documents/Project/.../file.docx
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
File saved to S3: CRM_Active_Files/Documents/Project/.../file.docx
```
**Если логов НЕТ:**
- OnlyOffice НЕ вызывает callback
- Проблема с SSL или доступностью
---
### Шаг 5: Закрой файл и открой снова
1. **Закрой** вкладку с редактором
2. **Открой тот же файл** из CRM заново
3. **Проверь** - изменения должны быть видны! ✅
---
## 🔍 Отладка
### Если кнопка "Сохранить" неактивна:
#### 1. Консоль браузера (F12):
```javascript
// Смотри на ошибки в консоли
// Ищи красные строки с "error", "callback", "ssl"
```
#### 2. Network tab (вкладка "Сеть"):
```
- Открой вкладку "Network" (Сеть)
- Обнови страницу с файлом
- Найди запрос к "api.js"
- Посмотри статус (должен быть 200)
```
#### 3. Проверь OnlyOffice логи:
```bash
docker logs --tail 50 onlyoffice-standalone 2>&1 | grep -i "error\|callback"
```
#### 4. Проверь доступность callback из браузера:
```bash
curl -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"}'
# Должен вернуть: {"error":0}
```
---
### Если файл НЕ сохраняется:
#### 1. Проверь логи callback:
```bash
tail -100 /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log
```
**Что искать:**
- `=== ONLYOFFICE CALLBACK ===` - есть ли вызовы?
- `Callback Status: 2` - статус сохранения
- `Saving to original path:` - путь к файлу
- `File saved to S3:` - успешное сохранение
- `ERROR:` - ошибки
#### 2. Проверь S3 доступ:
```bash
# Проверяем что файл есть в S3
grep "File saved to S3:" /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log | tail -1
```
#### 3. Проверь размер файла:
```bash
# Если callback сработал, проверяем размер сохранённого файла
grep "Downloaded file:" /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log | tail -1
# Должен быть > 0 bytes
```
---
## 📊 Статусы OnlyOffice callback
| Status | Что происходит | Callback вызывается? |
|--------|----------------|----------------------|
| 0 | Документ не готов | ❌ Нет |
| 1 | Документ открыт для редактирования | ✅ Да (status=1) |
| 2 | **Документ сохранён** | ✅ **Да (status=2)** |
| 3 | Ошибка при сохранении | ✅ Да (с ошибкой) |
| 4 | Документ закрыт без изменений | ✅ Да (status=4) |
| 6 | Документ редактируется | ❌ Нет |
| 7 | Форсированное сохранение | ✅ Да (status=7) |
**Важно:** Мы обрабатываем только **status=2** (документ сохранён)!
---
## 🛠️ Команды для проверки
### Проверка OnlyOffice:
```bash
# Статус
docker ps | grep onlyoffice-standalone
# Healthcheck
curl -s https://office.clientright.ru:9443/healthcheck
# Логи
docker logs --tail 50 onlyoffice-standalone
```
### Проверка callback:
```bash
# Логи callback
tail -f /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log
# Тест callback
curl -X POST "https://crm.clientright.ru/crm_extensions/file_storage/api/onlyoffice_callback.php?s3Path=test.docx" \
-H "Content-Type: application/json" \
-d '{"status":2,"key":"test123","url":"http://test.com/file.docx"}'
```
### Очистка логов (если нужно):
```bash
# Очистить логи
> /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log
# Проверить что пустой
cat /var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log
```
---
## 🎯 Что делать если НЕ работает
### Вариант 1: Проблема с SSL (наиболее вероятно)
```bash
# Проверить конфиг OnlyOffice
docker exec onlyoffice-standalone cat /etc/onlyoffice/documentserver/local-production-linux.json
# Должно быть:
# "rejectUnauthorized": false
# Если нет - добавить:
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
'
# Перезапустить
docker restart onlyoffice-standalone
```
### Вариант 2: Использовать HTTP для callback (временно)
Изменить в `open_file_v2.php`:
```php
// Было:
"callbackUrl": "https://crm.clientright.ru/..."
// Стало:
"callbackUrl": "http://crm.clientright.ru/..."
```
### Вариант 3: Добавить логирование в консоль браузера
Добавить в `open_file_v2.php` перед `new DocsAPI.DocEditor`:
```javascript
console.log('📋 OnlyOffice Config:', {
documentType: "<?php echo $fileType; ?>",
fileType: "<?php echo $ext; ?>",
key: "<?php echo $documentKey; ?>",
url: <?php echo json_encode($fileUrl); ?>,
callbackUrl: "<?php echo $redirectUrl; ?>",
mode: "edit",
permissions: { edit: true }
});
```
---
## ✅ Успешный результат
**Если всё работает, ты увидишь:**
1. **Кнопка "Сохранить" активна**
2. **В консоли браузера:**
```
📁 Файл: Исковоеаявление_(проект)_395695.docx
🔗 S3 URL: https://s3.twcstorage.ru/...
🔑 Document Key (unique): abc123...
✅ Standalone OnlyOffice (9443) + Direct S3 URL!
✅ Editor ready!
✅ Document loaded!
```
3. **В логах callback:**
```
=== ONLYOFFICE CALLBACK ===
Callback Status: 2
File saved! Download URL: ...
Saving to original path: CRM_Active_Files/...
✅ File saved to S3
```
4. **После повторного открытия:**
- Изменения сохранены! ✅
- Текст "ТЕСТ 123" виден!
---
**Начни с Шага 1 и отпишись о результатах!** 🚀