Error 500 seems served by nginx itself, as PHP log is empty.
PHP log: /var/log/www/dereckson.be/zed51-php.log
nginx log: undefined, we should probably start by ensueing EACH vhost has its own log file
Error 500 seems served by nginx itself, as PHP log is empty.
PHP log: /var/log/www/dereckson.be/zed51-php.log
nginx log: undefined, we should probably start by ensueing EACH vhost has its own log file
| Status | Subtype | Assigned | Task | ||
|---|---|---|---|---|---|
| Open | dereckson | T2305 zed51 currently serves 500 | |||
| Open | None | T1394 Deprecate Keruald global functions | |||
| Resolved | dereckson | T1395 Migrate keruald/globalfunctions content to Keruald OmniTools | |||
| Open | None | T1399 Migrate from globalfunctions to OmniTools | |||
| Open | dereckson | T2306 Serve a staging copy of Keruald libraries available for web applications on devserver |
Thanks to D4057 we now have a direct nginx error log to parse:
2026/04/13 12:44:21 [crit] 97679#103893: *318885 stat() "request_filename" failed (13: Permission denied), client: 109.136.70.8, server: zed51.dereckson.be, request: "GET / HTTP/2.0", host: "zed51.dereckson.be"
2026/04/13 12:44:21 [error] 97679#103893: *318885 FastCGI sent in stderr: "PHP message: PHP Warning: require(/var/51-wwwroot/zed/vendor/composer/../keruald/globalfunctions/core.php): Failed to open stream: Permission denied in /var/51-wwwroot/zed/vendor/composer/autoload_real.php on line 41; PHP message: PHP Stack trace:; PHP message: PHP 1. {main}() /var/51-wwwroot/zed/index.php:0; PHP message: PHP 2. include() /var/51-wwwroot/zed/index.php:35; PHP message: PHP 3. require_once() /var/51-wwwroot/zed/includes/core.php:31; PHP message: PHP 4. ComposerAutoloaderInitff32094fb9a7501219475afc8d453f8d::getLoader() /var/51-wwwroot/zed/vendor/autoload.php:25; PHP message: PHP 5. {closure:/var/51-wwwroot/zed/vendor/composer/autoload_real.php:37-43}($fileIdentifier = '06d7f4e16a8ba7b9126fea18d243b55e', $file = '/var/51-wwwroot/zed/vendor/composer/../keruald/globalfunctions/core.php') /var/51-wwwroot/zed/vendor/composer/autoload_real.php:45; PHP message: PHP Fatal error: Uncaught Error: Failed opening required '/var/51-wwwroot/zed/vendor/composer/../keruald/globalfunctions/core.php' (include_path='.:/usr/local/share/pear') in /var/51-wwwroot/zed/vendor/composer/autoload_real.php:41
Stack trace:
#0 /var/51-wwwroot/zed/vendor/composer/autoload_real.php(45): {closure}('06d7f4e16a8ba7b...', '/var/51-wwwroot...')
#1 /var/51-wwwroot/zed/vendor/autoload.php(25): ComposerAutoloaderInitff32094fb9a7501219475afc8d453f8d::getLoader()
#2 /var/51-wwwroot/zed/includes/core.php(31): require_once('/var/51-wwwroot...')
#3 /var/51-wwwroot/zed/index.php(35): include('/var/51-wwwroot...')
#4 {main}
thrown in /var/51-wwwroot/zed/vendor/composer/autoload_real.php on line 41" while reading response header from upstream, client: 109.136.70.8, server: zed51.dereckson.be, request: "GET / HTTP/2.0", upstream: "fastcgi://unix:/var/run/web/zed51.dereckson.be/php-fpm.sock:", host: "zed51.dereckson.be"There are several issues here:
This issue has probably been introduced symlinking in vendor folder keruald/ to the Keruald monorepo:
$ pwd /var/51-wwwroot/zed/vendor $ file keruald keruald: symbolic link to /home/dereckson/dev/keruald/_monorepo/core
A clean way would be to symlink to /var/51-wwwroot/keruald
That makes sense to move _monorepo/core there as that folder is intended to serve web applications and supporting libraries: if Keruald is developed not only for CLI applications / pure libraries unit tests but also for web applications, it really needs to live in /var/51-wwwroot (same issue than for mediawiki).
That won't solve the globalfunctions issue, so I'd suggest a two step config:
(1) recreate keruald as directory, symlink needed libraries from keruald here + clone rKGF
(2) after globalfunctions isn't needed, keruald -> /var/51-wwwroot/keruald
First step of the plan is done.
Next bag of issues: configure local MariaDB
2026/04/13 13:23:53 [error] 97670#103960: *319791 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'zed'@'localhost' (using password: YES) in /var/51-wwwroot/keruald/database/src/Engines/MySQLiEngine.php:56
Issue 1 is obvious: we need to ensure we've a local Zed database.
Issue 2 is the existence of start.html file from old laptop development/demo to invite to start MySQL server. It was the page to use in the past if we couldn't connect to database. Current code doesn't seem to refer to it anymore. We can prune it.
Issue 3 is the services registration code: we have no error handling when a service can't be created.
____
After creating the database with a combo of dev/schema-mysql.sql + doc/database/migrations/001_allow_longer_password_hashes/up.sql + dev/test_content.sql, the following issues remain:
(1) update keys to ensure 1000 bytes key max (varchar 255 is too big, as utf8mb4 can use up to 4 bytes): perso flags can be InnoDB, content_locations can reduce location_local to 240
(2) user_actkey tries to import NULL in dev/test_content.sql, code expects ""
Finally, we're in a "normal" error for the migration of the library code to Keruald:
2026/04/13 15:23:06 [error] 97677#223350: *329051 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Class "Cache" not found in /var/51-wwwroot/zed/Models/Geo/SceneIndex.php:115
Stack trace:
#0 /var/51-wwwroot/zed/Models/Geo/SceneIndex.php(97): Zed\Models\Geo\SceneIndex->get_cached_information()
#1 /var/51-wwwroot/zed/Models/Geo/SceneIndex.php(84): Zed\Models\Geo\SceneIndex->__construct('/var/dataroot/z...')
#2 /var/51-wwwroot/zed/Models/Geo/Scene.php(95): Zed\Models\Geo\SceneIndex::load('/var/dataroot/z...')
#3 /var/51-wwwroot/zed/Models/Geo/Scene.php(72): Zed\Models\Geo\Scene->get_local_scene()
#4 /var/51-wwwroot/zed/controllers/home.php(67): Zed\Models\Geo\Scene->__construct(Object(Zed\Models\Geo\Location))
#5 /var/51-wwwroot/zed/index.php(108): include('/var/51-wwwroot...')
#6 {main}
thrown in /var/51-wwwroot/zed/Models/Geo/SceneIndex.php on line 115" while reading response header from upstream, client: 109.136.70.8, server: zed51.dereckson.be, request: "GET / HTTP/2.0", upstream: "fastcgi://unix:/var/run/web/zed51.dereckson.be/php-fpm.sock:", host: "zed51.dereckson.be"This is out of the scope of this issue about devserver role configuration.
We've a last nginx fix to apply to simplify the configuration, and we'll be good to close this task.