Was untracked locally and stale (referenced apps/ instead of custom_apps/, git clone inside the container instead of our tar-based deploy). Documents the two things that just caused a production incident on nc01: files extracted from a tarball keep the source uid/gid and need an explicit chown to www-data, and skipping the installed_version sync after bumping <version> puts the whole instance in "needs upgrade" state, which blocks not just occ commands but the web login page too. Link it from README.md's install section.
4.0 KiB
occweb installeren/updaten in Nextcloud AIO
Fork van de originele OCCWeb-app (upstream fanategorius/occweb toont weinig activiteit;
laatste bekende versie daar is nog altijd 0.3.3, geen tags/releases). Deze fork
(dillardblom/occweb, gespiegeld op git.ensembia.net/Ensembia/occweb) is de actief
onderhouden versie en draait op nc01.
Versie: zie <version> in appinfo/info.xml.
Waar de app hoort
/var/www/html/custom_apps/occweb — niet /var/www/html/apps/occweb. AIO's
config.php heeft apps_paths met apps/ op writable:false (beheerd door
Nextcloud's core-appstore-sync, kan custom code overschrijven) en custom_apps/ op
writable:true (de bedoelde plek voor third-party apps als deze).
Deploy/update-procedure
De container heeft geen (werkende) git-toegang naar GitHub; deploy lokaal een tarball
i.p.v. git clone/git pull in de container.
# 1. Lokaal: clean checkout van main (dev-bestanden eruit) als tar
cd ~/Next/Documents/Development/Nextcloud/occweb
STAGE=$(mktemp -d)
git archive main | tar -x -C "$STAGE"
rm -rf "$STAGE"/{tests,.travis.yml,phpunit.xml,phpunit.integration.xml,composer.json,composer.lock,Makefile}
tar -C "$STAGE" -cf /tmp/occweb-deploy.tar .
# 2. Naar nc01, in de container uitpakken over de bestaande app
scp /tmp/occweb-deploy.tar nc01:/tmp/occweb-deploy.tar
ssh nc01 "docker cp /tmp/occweb-deploy.tar nextcloud-aio-nextcloud:/tmp/occweb-deploy.tar && \
docker exec nextcloud-aio-nextcloud sh -c 'mkdir -p /var/www/html/custom_apps/occweb && \
tar -xf /tmp/occweb-deploy.tar -C /var/www/html/custom_apps/occweb && rm /tmp/occweb-deploy.tar'"
# 3. Eigendom herstellen — tar bewaart de lokale uid (bv. 1000), niet www-data
ssh nc01 "docker exec nextcloud-aio-nextcloud chown -R www-data:www-data /var/www/html/custom_apps/occweb"
# 4. Alleen bij een fresh install nodig (overslaan bij een update van een al-enabled app):
ssh nc01 "docker exec -u www-data nextcloud-aio-nextcloud php occ app:enable occweb"
Gotcha — nooit
ssh host "docker exec container bash -c 'cat > file'"met lokale stdin gebruiken: dat maakt een leeg bestand. Altijdscp→docker cp, zoals hierboven.
⚠️ Cruciaal bij een <version>-bump in appinfo/info.xml
Dit is niet optioneel en blokkeert bij overslaan niet alleen occ-commando's maar ook
gewoon inloggen op de webinterface (zelf ondervonden op 2026-09-25: na een deploy met
een nieuwe <version> maar zonder onderstaande stap toonde Nextcloud voor iedereen een
upgrade-scherm i.p.v. de loginpagina).
Nextcloud houdt installed_version per app bij in de database (oc_appconfig), los van
<version> in info.xml. Na het handmatig vervangen van bestanden (i.p.v. via de appstore
of occ upgrade) lopen die twee uit elkaar → Nextcloud zet de hele instantie op
"needs upgrade", wat ook de login blokkeert totdat je dit synct:
ssh nc01 "docker exec -u www-data nextcloud-aio-nextcloud php occ config:app:set occweb installed_version --value='X.Y.Z'"
(zelfde X.Y.Z als de nieuwe <version>). Verifieer met occ status dat
needsDbUpgrade: false weer klopt.
PHP-FPM herstarten na elke deploy
occ app:disable/app:enable leegt PHP's opcache niet — een update kan zonder restart
onopgemerkt niet actief worden (routes die stil 404'en is het typische symptoom). Graceful
reload i.p.v. hard restart (behoudt actieve requests):
ssh nc01 "docker exec nextcloud-aio-nextcloud ps aux | grep 'php-fpm: master'" # zoek de PID
ssh nc01 "docker exec nextcloud-aio-nextcloud kill -USR2 <master-pid>"
supervisorctl werkt hier niet direct (de supervisord-socket zit niet op het standaardpad
binnen deze AIO-container) — vandaar de handmatige PID-lookup.
Verwijderen
ssh nc01 "docker exec -u www-data nextcloud-aio-nextcloud php occ app:disable occweb && \
docker exec nextcloud-aio-nextcloud rm -rf /var/www/html/custom_apps/occweb"
SQL query mode
Type sql in de OCCWeb-terminal voor directe SQL-queries tegen de NC-database.
Statements scheiden met ;, Shift+Enter voor nieuwe regel, Enter om te sturen.