# ⚠️ Устарело ⚠️ OCCWeb terminal *Read in [English](README.md).* ### Веб-терминал для администраторов для запуска occ-команд Nextcloud ![occweb](https://github.com/Adphi/OCCWeb/raw/main/appinfo/screenshot.png) ## ⚠️ Устарело ⚠️ Поскольку Nextcloud не имеет встроенной поддержки асинхронных операций (из-за использования PHP), это приложение считается устаревшим и больше не будет поддерживать будущие версии Nextcloud (19+). Автору не удалось найти способ реализовать полноценную поддержку интерактивных и долгих occ-задач в веб-терминале без введения дополнительных зависимостей (например, через websockets), а отсутствие настоящей асинхронности может привести к серьёзным проблемам на больших инсталляциях. [Этот issue](https://github.com/nextcloud/server/issues/16726) объясняет, почему разработчик решил больше не поддерживать это приложение. ## Установка Сборка не нужна (чистый PHP + vanilla JS). Клонируйте прямо в `apps/` целевого сервера и включите приложение: ```bash cd /var/www/nextcloud/apps git clone https://github.com/fanategorius/occweb.git chown -R www-data:www-data occweb # укажите вашего пользователя веб-сервера sudo -u www-data php /var/www/nextcloud/occ app:enable occweb ``` `occ app:enable` сам корректно проставит версию приложения в базе, поэтому оговорки из раздела «Обновление кода на сервере» ниже к свежей установке не относятся — они актуальны только когда приложение уже включено и вы обновляете его на месте. Перед установкой сверьте версию вашего Nextcloud с диапазоном в `appinfo/info.xml` (`dependencies/nextcloud`, `min-version`/`max-version`) — `occ app:enable` откажется включать приложение вне этого диапазона. Если нет доступа к GitHub — соберите tar.gz через `make dist` (есть готовый Makefile) и распакуйте его в `apps/` на целевом сервере. ## Режим SQL-запросов Введите `sql` в терминале, чтобы переключиться в режим SQL-запросов и выполнять произвольные SQL-запросы напрямую к базе данных Nextcloud (только для администраторов). Запросы разделяются `;`. Используйте **Shift+Enter** для перехода на новую строку и **Enter**, чтобы отправить весь блок одним запросом — это важно для скриптов вида `SET vars.x = 'value'; SELECT current_setting('vars.x');`, так как все запросы, отправленные одним блоком, выполняются в рамках одного соединения (сессии) с базой данных. Введите `occ`, чтобы вернуться в обычный режим occ-команд. ⚠️ Для `DELETE`/`UPDATE` нет отмены — внимательно проверяйте, что вы собираетесь выполнить, желательно сначала на некритичной записи/пользователе. ## ⚠️ Предупреждения ⚠️ - Это приложение не является настоящим интерактивным терминалом и не поддерживает долгие задачи. Поэтому на крупных инсталляциях команды вроде `occ files:scan` могут завершаться по таймауту с ошибкой. - Не используйте `occ maintenance:mode --on`, это очевидно... ## Обновление кода на сервере После того как новый код скопирован/спуллен в `nextcloud/apps/occweb/`, обязательно перезапустите PHP, иначе изменения не применятся. `occ app:disable`/`app:enable` **не помогает** — эта команда не сбрасывает opcode-кэш PHP, из-за чего может продолжать работать старая закэшированная версия кода (характерный симптом — маршруты внезапно отвечают 404). Перезапустите сам процесс PHP, например: ```bash sudo systemctl restart php8.3-fpm # укажите свою версию PHP sudo systemctl restart apache2 # если PHP работает как модуль Apache ``` ### Если меняете `` в `appinfo/info.xml` Nextcloud хранит установленную версию каждого приложения в базе (`installed_version` в `oc_appconfig`) отдельно от `` в `info.xml`. Если вы правите файлы на месте (копированием/`git pull`), а не через App Store или `occ upgrade`, эти два значения расходятся — и Nextcloud считает, что «инстансу нужен апгрейд», блокируя большинство `occ`-команд за CLI-визардом обновления, хотя само ядро Nextcloud никак не менялось. После бампа версии синхронизируйте её вручную: ```bash sudo -u www-data php /var/www/nextcloud/occ config:app:set occweb installed_version --value="X.Y.Z" ``` (то же значение `X.Y.Z`, что и в новом ``), затем перезапустите PHP, как описано выше. На свежую установку через `occ app:enable` это не распространяется — там версия проставляется корректно автоматически. ## Планы (TODO): См. [открытые issues](https://github.com/Adphi/occweb/issues)