7.5 KiB
⚠️ Устарело ⚠️ OCCWeb terminal
Read in English.
Веб-терминал для администраторов для запуска occ-команд Nextcloud
⚠️ Устарело ⚠️
Поскольку Nextcloud не имеет встроенной поддержки асинхронных операций (из-за использования PHP), это приложение считается устаревшим и больше не будет поддерживать будущие версии Nextcloud (19+). Автору не удалось найти способ реализовать полноценную поддержку интерактивных и долгих occ-задач в веб-терминале без введения дополнительных зависимостей (например, через websockets), а отсутствие настоящей асинхронности может привести к серьёзным проблемам на больших инсталляциях. Этот issue объясняет, почему разработчик решил больше не поддерживать это приложение.
Установка
Сборка не нужна (чистый PHP + vanilla JS). Клонируйте прямо в apps/
целевого сервера и запустите установочный скрипт:
cd /var/www/nextcloud/apps
git clone https://github.com/fanategorius/occweb.git
bash occweb/install.sh
install.sh удаляет dev/CI-файлы, не нужные для работающей установки
(tests/, .travis.yml, phpunit*.xml, composer.json, composer.lock,
Makefile), выставляет chown -R на пользователя веб-сервера и выполняет
occ app:enable. По умолчанию считает, что Nextcloud лежит в
/var/www/nextcloud, а пользователь веб-сервера — www-data; если у вас
иначе, передайте своими аргументами:
bash occweb/install.sh /path/to/nextcloud custom-web-user
occ app:enable сам корректно проставит версию приложения в базе, поэтому
оговорки из раздела «Обновление кода на сервере» ниже к свежей установке не
относятся — они актуальны только когда приложение уже включено и вы
обновляете его на месте.
Перед установкой сверьте версию вашего Nextcloud с диапазоном в
appinfo/info.xml (dependencies/nextcloud, min-version/max-version)
— occ app:enable откажется включать приложение вне этого диапазона.
Учтите: install.sh удаляет файлы, отслеживаемые в git. Если планируете
дальше обновлять эту установку через git pull, а не пере-клонированием —
имейте в виду, что будущее изменение одного из удалённых файлов в апстриме
может привести к отказу git pull смёржить изменения. Git сам сообщит об
этом, и файл можно вернуть командой git checkout -- <file>.
Режим 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, например:
sudo systemctl restart php8.3-fpm # укажите свою версию PHP
sudo systemctl restart apache2 # если PHP работает как модуль Apache
Если меняете <version> в appinfo/info.xml
Nextcloud хранит установленную версию каждого приложения в базе
(installed_version в oc_appconfig) отдельно от <version> в
info.xml. Если вы правите файлы на месте (копированием/git pull), а не
через App Store или occ upgrade, эти два значения расходятся — и
Nextcloud считает, что «инстансу нужен апгрейд», блокируя большинство
occ-команд за CLI-визардом обновления, хотя само ядро Nextcloud никак не
менялось. После бампа версии синхронизируйте её вручную:
sudo -u www-data php /var/www/nextcloud/occ config:app:set occweb installed_version --value="X.Y.Z"
(то же значение X.Y.Z, что и в новом <version>), затем перезапустите
PHP, как описано выше. На свежую установку через occ app:enable это не
распространяется — там версия проставляется корректно автоматически.
Планы (TODO):
См. открытые issues
