From 247b3a63fde7ee9135bbf88749dab099dd7e45b7 Mon Sep 17 00:00:00 2001 From: bidi47 Date: Mon, 28 Sep 2026 12:45:58 +0300 Subject: [PATCH 1/3] synched wsl2 page - twig from md Signed-off-by: bidi47 --- src/App/templates/layout/default.html.twig | 1 + src/Page/templates/page/wsl2.html.twig | 128 ++++++++++++++------- 2 files changed, 90 insertions(+), 39 deletions(-) diff --git a/src/App/templates/layout/default.html.twig b/src/App/templates/layout/default.html.twig index 112286c..a4075a5 100644 --- a/src/App/templates/layout/default.html.twig +++ b/src/App/templates/layout/default.html.twig @@ -53,6 +53,7 @@
  • Dotboost
  • Light
  • Frontend
  • +
  • WSL2 Dev Stack
  • diff --git a/src/Page/templates/page/wsl2.html.twig b/src/Page/templates/page/wsl2.html.twig index 749525b..80df6b8 100644 --- a/src/Page/templates/page/wsl2.html.twig +++ b/src/Page/templates/page/wsl2.html.twig @@ -4,7 +4,7 @@ {% set meta = { title: 'Development Environment | AlmaLinux 10 on WSL 2', description: 'AlmaLinux 10 on WSL 2 for a RHEL-compatible local stack. One Ansible playbook installs PHP, Apache, ' - ~ 'MariaDB, Composer, Node.js and phpMyAdmin, and provisions a virtualhost for every project you add.', + ~ 'MariaDB, Composer, Node.js and phpMyAdmin, and a second provisions a virtualhost for every project you add.', openGraphImage: '/opengraph/pages/twitter-card-wsl2.png', } %} @@ -24,6 +24,7 @@ .spec-table td { color: var(--text); } .spec-note { margin-top: 14px; font-size: 13.5px; color: var(--text-dim); } .step-cmd { display: block; margin-top: 12px; font-family: var(--mono); font-size: 12.5px; color: var(--teal); overflow-x: auto; } + pre.step-cmd { margin-bottom: 0; white-space: pre; } /* Windows/AlmaLinux boundary diagram in the hero - scoped to this page. */ .ws-flow { display: block; width: 100%; height: auto; margin-top: 6px; } @@ -48,7 +49,7 @@
    Development environment . AlmaLinux 10 . WSL2 -

    AlmaLinux development, one playbook away on WSL2

    +

    Development Environment

    Dotkernel's local environment runs AlmaLinux 10 - inside WSL 2 on Windows, or on bare metal with no WSL at all. One Ansible playbook installs PHP, Apache, MariaDB, Composer, Node.js and @@ -75,7 +76,7 @@

    Windows host, Linux environment
    - + @@ -113,9 +114,6 @@ Git & Composer - - - Ansible
    @@ -134,8 +132,9 @@ Windows-native rebuild of every tool.

    - Everything here also runs the same way without WSL, directly on a bare AlmaLinux 10 host - the - Ansible playbooks do not know or care which one they are provisioning. + Everything from Setup Packages onwards also runs on a bare AlmaLinux 10 host without WSL - the + Ansible playbooks do not know or care which one they are provisioning. Connect over SSH, and use + the server's IP address instead of localhost when you test it.

    @@ -167,34 +166,50 @@
    Setup

    Three steps to a running shell

    -

    Each step runs in a different place - Windows Terminal for the first two, the AlmaLinux 10 shell for - the third. The full walkthrough, prompts and all, is in the docs.

    +

    Steps 1 and 2 run in Windows Terminal and step 3 in the AlmaLinux 10 shell; step 2 ends inside the + new distro with a quick systemd check. The full walkthrough, prompts and all, is in the docs.

    1 . Terminal & requirements

    -

    Install Windows Terminal, then confirm WSL 2 is enabled - Hyper-V, Virtual Machine Platform and - Windows Subsystem for Linux, all turned on in Windows features.

    - wsl -v +

    On Windows 11, install Windows Terminal, then check for a modern WSL 2 install. If + wsl --version isn't recognized, install WSL 2 with + wsl --install --no-distribution and restart when prompted.

    + wsl --version

    2 . Install AlmaLinux 10

    Stop any other running distro, then install AlmaLinux 10 and create your Unix username and password when prompted.

    wsl --install -d AlmaLinux-10 +

    Before moving on, confirm systemd is active inside AlmaLinux 10 - the playbook needs it. If the + check below prints an error instead of a status, add systemd=true under + [boot] in /etc/wsl.conf, run wsl --shutdown from Windows + Terminal and reopen the distro.

    + systemctl is-system-running

    3 . Setup packages

    -

    Clone dotkernel/development, fill in config.yml with your Git identity and MariaDB - root password, and let Ansible provision the rest.

    +

    Inside AlmaLinux 10, update the system, add the EPEL and Remi repositories, and install + ansible-core with the community.general and community.mysql + collections. Then clone the alma-linux-10 branch of dotkernel/development, + copy wsl/config.yml.dist to config.yml, fill in your Git identity and + MariaDB root password, and run the playbook from development/wsl.

    ansible-playbook -i hosts install.yml --ask-become-pass

    Not using WSL? Skip straight to Setup Packages on a bare AlmaLinux 10 host - the same playbook runs - there unchanged. + there unchanged; test it with the server's IP address instead of localhost. +

    +

    + After setup, + Editor Integration + connects VS Code or PhpStorm, and + WSL Configuration + covers where to keep projects and how to cap WSL's memory and CPU.

    @@ -223,11 +238,11 @@ Database - MariaDB 11.4 LTS, plus phpMyAdmin for browsing it. + MariaDB 12.3 from the MariaDB repository, plus phpMyAdmin for browsing it. PHP - 8.4 by default via the Remi repository; php81 … php85 aliases switch + 8.5 by default via the Remi repository; php81 … php85 aliases switch versions. @@ -236,13 +251,8 @@ Git & Composer - Your Git identity from config.yml, and the latest Composer, kept current with - composer self-update. - - - Ansible - community.general and community.mysql collections - the same tool that just - installed itself. + Your Git identity from config.yml, and the latest Composer at install time; update + it later with composer self-update. @@ -261,7 +271,9 @@ file - any *.localhost domain is routed automatically.

    - List the domains you want under config.yml's virtualhosts key and run the playbook. + List the domains you want under config.yml's virtualhosts key and run + create-virtualhost.yml - a separate playbook you re-run for every new project, without + repeating install.yml. Existing entries are left untouched, so you keep adding to the same file as your project grows.

    @@ -270,13 +282,23 @@

    One playbook, every domain

    -

    In development/wsl/config.yml, under virtualhosts:

    - api.dotkernel.localhost +

    In development/wsl/config.yml, under config.virtualhosts:

    +
    config:
    +  virtualhosts:
    +    - "api.dotkernel.localhost"
    +

    + api.dotkernel.localhost is only an example - use any name your project needs, such as + laravel.localhost or shop.localhost, as long as it ends in + .localhost and uses only lowercase letters, numbers and hyphens. Add one list item per + project. +

    Then provision it:

    ansible-playbook -i hosts create-virtualhost.yml --ask-become-pass

    - Files go under /var/www/api.dotkernel.localhost/html, with the document root at - html/public. + Files go under /var/www/<your-domain>/html - for example + /var/www/api.dotkernel.localhost/html - with the document root at + html/public. html/public doesn't exist until you place a project there, + so the URL shows an error until then.

    @@ -310,18 +332,18 @@ How do I fix permission issues? +

    Local development only: chmod -R 777 data, log or - public/uploads, whichever directory the error names.

    + public/uploads, whichever directory the error names. Don't carry this into + staging or production.

    Where are the error logs? +
    -

    Apache: /var/log/httpd/error_log. PHP-FPM: /var/log/php-fpm/error.log and - www-error.log.

    +

    Apache: /var/log/httpd/error_log, plus + /var/www/<virtualhost>/log/error.log for each virtualhost. PHP-FPM: + /var/log/php-fpm/error.log and www-error.log.

    - -
    How do I update Composer? +
    @@ -336,6 +358,8 @@ it like any other command.

    +
    +
    How do I delete a virtualhost? +
    @@ -343,10 +367,35 @@ sudo systemctl restart httpd.

    +
    + Why does the playbook fail with a systemd error? + +
    +

    systemd isn't active in the distro yet. Add systemd=true under [boot] in + /etc/wsl.conf, run wsl --shutdown from Windows Terminal, reopen + AlmaLinux 10 and re-run install.yml.

    +
    +
    +
    + What if port 80 is already in use? + +
    +

    Find the Windows service holding it with netstat -ano | findstr :80 and stop it, or + change Apache's Listen port in /etc/httpd/conf/httpd.conf and restart + httpd.

    +
    +
    +
    + Is this environment safe to expose beyond localhost? + +
    +

    No. It is for local development only: the MariaDB root password is stored in plaintext, + phpMyAdmin allows root login and the firewall is off by default.

    +
    +
    Can I run this without WSL? +
    -

    Yes - every instruction here works the same way on a bare AlmaLinux 10 host.

    +

    Yes - from Setup Packages onwards the steps are the same on a bare AlmaLinux 10 host. Skip the + WSL steps, connect over SSH, and use the server's IP address instead of + localhost.

    @@ -358,13 +407,14 @@
    Built for how the platform ships -

    Provision once, match production everywhere.

    +

    Provision once, match your production OS

    The WSL 2 + AlmaLinux 10 setup is maintained by the same team behind the rest of the Headless - Platform, so the local environment stays in step with what actually runs in production - not a - Docker approximation of it. + Platform, so the local environment stays on the same OS family as production - not a Docker + approximation of it. It is a local development environment only: security is relaxed by default, + so never expose it to a network.

    Talk to us -> From 0e774d94e1f007258be3255fc674ae52772836a4 Mon Sep 17 00:00:00 2001 From: bidi47 Date: Mon, 28 Sep 2026 15:13:47 +0300 Subject: [PATCH 2/3] synced pages Signed-off-by: bidi47 --- public/admin.md | 7 +- public/api.md | 11 +++- public/architecture.md | 2 +- public/frontend.md | 2 +- public/queue.md | 2 +- src/Page/templates/page/admin.html.twig | 2 +- src/Page/templates/page/api.html.twig | 2 +- .../templates/page/architecture.html.twig | 2 +- src/Page/templates/page/dotboost.html.twig | 4 +- src/Page/templates/page/frontend.html.twig | 65 ++++++++++--------- src/Page/templates/page/light.html.twig | 41 +++++------- src/Page/templates/page/queue.html.twig | 4 +- 12 files changed, 77 insertions(+), 67 deletions(-) diff --git a/public/admin.md b/public/admin.md index d06c975..854de63 100644 --- a/public/admin.md +++ b/public/admin.md @@ -16,6 +16,11 @@ A fast, reliable way to manage the records in your database with a simple table- - [View on GitHub](https://github.com/dotkernel/admin) - [Live demo](https://admin7.dotkernel.net/) +![PHP version for dotkernel/admin](https://img.shields.io/packagist/dependency-v/dotkernel/admin/php?style=flat&label=php) +![Latest release of dotkernel/admin](https://img.shields.io/packagist/v/dotkernel/admin?style=flat) +![License of dotkernel/admin](https://img.shields.io/github/license/dotkernel/admin?style=flat) +![GitHub stars for dotkernel/admin](https://img.shields.io/github/stars/dotkernel/admin?style=flat&label=%E2%98%85) + | | | | --- | --- | | Runtime | Mezzio + Laminas | @@ -210,7 +215,7 @@ If the fixtures ran, sign in with user `admin` and password `dotadmin` - the sam | Operating system | A \*nix based system is strongly recommended for production. | | PHP | 8.3 or newer, mod_php or FCGI (FPM). `memory_limit` at least 128M; `upload_max_filesize` and `post_max_size` at least 100M depending on your data. | | Web server | Apache 2.2+ with `mod_rewrite` and `.htaccess` support (`AllowOverride All`) - a default `.htaccess` ships in `public/`. On Nginx, translate it into server configuration. | -| Database | MariaDB 10.7, 10.11 LTS, 11.4 LTS and 11.8 LTS, or PostgreSQL 13 and above. **MySQL is not supported**, as it has no UUID support. | +| Database | MariaDB 11.4 LTS, 11.8 LTS and 12.3 LTS, or PostgreSQL 13 and above. **MySQL is not supported**, as it has no UUID support. | | Required extensions | `mbstring`, the CLI SAPI for cron jobs, and Composer available on `$PATH`. | | Recommended extensions | `opcache`; `pdo_mysql`, `pdo_pgsql` or `mysqli` to match your database; `dom` and `simplexml` for markup; `gd` and `exif` for images; `zlib`, `zip`, `bz2` for compression; `curl` when calling APIs; `sqlite3` for the test suite. | diff --git a/public/api.md b/public/api.md index 31d0cda..d720714 100644 --- a/public/api.md +++ b/public/api.md @@ -16,6 +16,11 @@ OAuth 2.0, RBAC authorization, HAL payloads, standardized error responses and an - [View on GitHub](https://github.com/dotkernel/api) - [Live demo](https://api.dotkernel.net/) +![PHP version for dotkernel/api](https://img.shields.io/packagist/dependency-v/dotkernel/api/php?style=flat&label=php) +![Latest release of dotkernel/api](https://img.shields.io/packagist/v/dotkernel/api?style=flat) +![License of dotkernel/api](https://img.shields.io/github/license/dotkernel/api?style=flat) +![GitHub stars for dotkernel/api](https://img.shields.io/github/stars/dotkernel/api?style=flat&label=%E2%98%85) + | | | | --- | --- | | Runtime | Mezzio + Laminas | @@ -130,7 +135,7 @@ You keep full control of the UUID version without depending on database extensio ### PostgreSQL support PostgreSQL joins the supported databases. -Because native UUID is required, you need PostgreSQL or MariaDB 10.7 or later; MySQL is no longer supported, as it has no UUID data type. +Because native UUID is required, you need PostgreSQL 13+ or MariaDB 11.4 or later; MySQL is no longer supported, as it has no UUID data type. ### PHP 8.5 @@ -175,7 +180,7 @@ The comparison below is drawn from the full side-by-side write-up on our blog. | --- | --- | --- | | First release | 2012 | 2018 | | Architecture | MVC, event driven | Middleware | -| OSS lifecycle | Archived | Active | +| OSS lifecycle | Archived | ![OSS lifecycle for dotkernel/api](https://img.shields.io/osslifecycle/dotkernel/api?style=flat) | | PHP version | ≤ 8.2 | See the PHP version badge for `dotkernel/api` | | Style | REST, RPC | REST | | Change management | Versioning | Deprecations (API evolution) | @@ -283,7 +288,7 @@ Updates arrive with bugfixes and improvements from the PHP community, and breaki ## Install it and call an endpoint -Create the project with Composer, point it at PostgreSQL or MariaDB 10.7+, run the migrations, and you have an authenticated REST API with a browsable OpenAPI specification. +Create the project with Composer, point it at PostgreSQL 13+ or MariaDB 11.4+, run the migrations, and you have an authenticated REST API with a browsable OpenAPI specification. - [Installation guide](https://docs.dotkernel.org/api-documentation/) - [Try the demo](https://api.dotkernel.net/) diff --git a/public/architecture.md b/public/architecture.md index 6cac3ab..6d98ad1 100644 --- a/public/architecture.md +++ b/public/architecture.md @@ -22,7 +22,7 @@ A request enters at the error boundary, passes through routing, negotiation, aut | Container | PSR-11 | | Logging | PSR-3 | -## Five phases, 19 stages +## Six phases, 19 stages Error boundary (1 stage) -> Request preparation (4 stages) -> Routing (4 stages) -> Contract & headers (4 stages) -> Identity (2 stages) -> Dispatch & fallback (4 stages). diff --git a/public/frontend.md b/public/frontend.md index 99c5880..53b88f2 100644 --- a/public/frontend.md +++ b/public/frontend.md @@ -221,7 +221,7 @@ Duplicating `local.test.php.dist` gives your tests an in-memory database. | Required extensions | `curl`, `gettext`, `intl`, `json`, `mbstring`, the CLI SAPI for cron jobs, and Composer on `$PATH`. | | Recommended extensions | `opcache`; `pdo_mysql` for MySQL or MariaDB; `dom` and `simplexml` for markup; `gd` and `exif` for images; `zlib`, `zip`, `bz2` for compression; `sqlite3` for the test suite. | -Note that Frontend still supports MySQL - unlike API and Admin v7, which require native UUID support and therefore PostgreSQL or MariaDB 10.7+. +Note that Frontend still supports MySQL - unlike API and Admin v7, which require native UUID support and therefore PostgreSQL 13+ or MariaDB 11.4+. ## Where Frontend sits diff --git a/public/queue.md b/public/queue.md index a82ac48..b47fbfe 100644 --- a/public/queue.md +++ b/public/queue.md @@ -201,7 +201,7 @@ valkey-cli ping ### 4 . Clone and configure -Clone the queue branch, then copy each `.dist` configuration file into place - local, log, messenger and swoole - and fill them in. +Clone the queue repo, then copy each `.dist` configuration file into place - local, log, messenger and swoole - and fill them in. ```shell git clone https://github.com/dotkernel/queue.git diff --git a/src/Page/templates/page/admin.html.twig b/src/Page/templates/page/admin.html.twig index 4feadf4..9f96b33 100644 --- a/src/Page/templates/page/admin.html.twig +++ b/src/Page/templates/page/admin.html.twig @@ -432,7 +432,7 @@ PHP - 8.2 or newer, mod_php or FCGI (FPM). memory_limit at least 128M; + 8.3 or newer, mod_php or FCGI (FPM). memory_limit at least 128M; upload_max_filesize and post_max_size at least 100M depending on your data. diff --git a/src/Page/templates/page/api.html.twig b/src/Page/templates/page/api.html.twig index 2b73003..62fb5ec 100644 --- a/src/Page/templates/page/api.html.twig +++ b/src/Page/templates/page/api.html.twig @@ -383,7 +383,7 @@

    PHP 8.5

    -

    The API and Admin target PHP 8.5. Dependencies are kept current, and the +

    The API targets PHP 8.5, with Dotkernel Admin on 8.4. Dependencies are kept current, and the ecosystem's own packages track the versions Laminas and Doctrine support.

    diff --git a/src/Page/templates/page/architecture.html.twig b/src/Page/templates/page/architecture.html.twig index f496261..9ef4348 100644 --- a/src/Page/templates/page/architecture.html.twig +++ b/src/Page/templates/page/architecture.html.twig @@ -107,7 +107,7 @@
    -
    Five phases19 stages
    +
    Six phases19 stages
    Error boundary1 stage
    Request preparation4 stages
    diff --git a/src/Page/templates/page/dotboost.html.twig b/src/Page/templates/page/dotboost.html.twig index f1641dd..f84a30a 100644 --- a/src/Page/templates/page/dotboost.html.twig +++ b/src/Page/templates/page/dotboost.html.twig @@ -266,8 +266,8 @@ git rebaseaskblocks doctrine-migrations migrate / executeaskblocks fixtures:execute, schema:drop, schema:updateask, via bin/cli.phpblocks - composer development-enable / -disable—blocks - pip install, git checkout --, git filter-branch—blocks + composer development-enable / -disable-blocks + pip install, git checkout --, git filter-branch-blocks
    diff --git a/src/Page/templates/page/frontend.html.twig b/src/Page/templates/page/frontend.html.twig index cf8ca33..8ade451 100644 --- a/src/Page/templates/page/frontend.html.twig +++ b/src/Page/templates/page/frontend.html.twig @@ -53,7 +53,7 @@ real, running features whose only job is to show you where your own code goes.

    - + Read the docs @@ -169,8 +169,8 @@
    - User accounts, from register to unregister -

    User accounts, from register to unregister

    + User accounts, from registration to account deletion +

    User accounts, from registration to account deletion

    @@ -208,9 +208,10 @@

    The whole account lifecycle, already routed.

    - Login, registration and account management, including avatar upload, password change and - unregistering. Password reset and account activation emails are part of the flow, which is why - the skeleton stores a name and an email address and nothing more. + Login, registration and account management, including activation, password reset, avatar upload, + profile details, password change and account deletion. Password reset and account activation + emails are part of the flow, which is why the only personal details on a user profile are a name + and an email address.

    @@ -246,10 +247,11 @@

    A public form that does not become a spam relay.

    - The contact form uses Google reCAPTCHA, with the site and secret keys read from local - configuration and the message recipients - to and any number of - cc addresses - configured alongside them. Whitelist localhost while - developing, and take it out again for production. + The contact form uses score-based Google reCAPTCHA, with the site key, secret key and score + threshold read from local configuration, and the message recipients - to, + cc and bcc addresses - configured alongside them. The contact page will + not render until the keys are set; whitelist localhost while developing, and take it + out again for production.

    @@ -294,9 +296,9 @@
    Delivery . HTTP

    Headers & CORS

    -

    Response headers declared per route.

    +

    Response headers declared globally or per route.

    - dot-response-header sets custom headers per route from + dot-response-header sets custom headers for all routes or for individual routes from response-header.global.php, while mezzio-cors handles origins, headers and cookies from cors.global.php.

    @@ -329,9 +331,10 @@ second option, because deleting a user row is rarely what your foreign keys want.

    - The skeleton stores only what it needs to run those flows: first name, last name and the email - address used as the identity, for password reset and account activation. Anonymizing replaces - exactly those. + On the user profile, the skeleton stores only what it needs to run those flows: first name, last + name and the email address used as the identity, for password reset and account activation. + Anonymizing replaces exactly those; contact form messages and remember-me records are kept as they + are.

    Anonymization reference @@ -340,11 +343,12 @@

    What anonymization changes

      -
    • First and last name become anonymous plus the current UNIX timestamp - for example - anonymous1725980747.
    • +
    • First and last name become anonymous plus the current date and time in + dmYHis format - for example anonymous23092026155300.
    • The email becomes the same value plus whatever you set in userAnonymizeAppend - - anonymous1725980747@example.com.
    • -
    • The avatar image and its database record are deleted.
    • + anonymous23092026155300@example.com. +
    • The account status is set to deleted; the row itself is kept.
    • +
    • On account deletion, the avatar image and its database record are deleted.

    Point userAnonymizeAppend at a domain you control and it doubles as a catch-all @@ -389,8 +393,9 @@

    Module contents

    Controller, Entity, Repository and - Service folders, plus InputFilter, EventListener, - Helper, Command or Factory as needed.

    + Service folders, plus Form, Fieldset, + InputFilter, EventListener, Factory, + Middleware or Enum as needed.

    @@ -423,9 +428,11 @@

    4 . Prepare the config files

    -

    Copy the .dist files into place - local.php, - development.local.php, mail.local.php, - debugbar.local.php - then fill in the database, SMTP and reCAPTCHA details.

    +

    composer install has already created local.php and + mail.global.php, and development mode created development.local.php; + fill in the database and reCAPTCHA details in local.php, and copy + mail.global.php to mail.local.php for the sender and SMTP details, so + credentials stay out of git.

    5 . Migrate and seed

    @@ -474,7 +481,7 @@ PHP - 8.2 or newer, mod_php or FCGI (FPM). memory_limit at least 128M; + 8.2 or 8.3, mod_php or FCGI (FPM). memory_limit at least 128M; upload_max_filesize and post_max_size at least 100M depending on your data. @@ -491,16 +498,16 @@ Required extensions - mbstring, the CLI SAPI for cron jobs, and Composer on + curl, gettext, intl, json, + mbstring, the CLI SAPI for cron jobs, and Composer on $PATH. Recommended extensions - opcache; pdo_mysql or mysqli; + opcache; pdo_mysql for MySQL or MariaDB; dom and simplexml for markup; gd and exif for images; zlib, zip, - bz2 for compression; curl when calling APIs; - sqlite3 for the test suite. + bz2 for compression; sqlite3 for the test suite. diff --git a/src/Page/templates/page/light.html.twig b/src/Page/templates/page/light.html.twig index c2014e2..ab7ab38 100644 --- a/src/Page/templates/page/light.html.twig +++ b/src/Page/templates/page/light.html.twig @@ -298,8 +298,8 @@

    Vite concatenates and compresses CSS and JavaScript, preprocesses SCSS, and copies fonts and images - avoiding the network bottleneck of many separate files. npm run watch - recompiles on change; npm run build compiles once. Node.js v20 is the minimum - supported version. + recompiles on change; npm run build compiles once. Node.js ^20.19.0 + or >=22.12.0 is required.

    @@ -373,45 +373,38 @@
    Installation

    Running in minutes, honestly

    -

    No database to create, no fixtures to seed. Clone, install, set a URL, open it.

    +

    No database to create, no fixtures to seed. Create the project, set a URL, open it.

    -

    1 . Clone into an empty folder

    -

    Git refuses a directory that is not empty, and you need write permissions on it.

    - git clone https://github.com/dotkernel/light.git . +

    1 . Create the project

    +

    One Composer command creates the directory, installs dependencies, and enables development mode + for you. Decline the config provider injection when prompted - Light already includes its + own.

    + composer create-project dotkernel/light dk
    cd dk
    -

    2 . Install dependencies

    -

    Run it from the CLI so the prompts stay interactive. Decline the config provider injection - - Light already includes its own.

    - composer install -
    -
    -

    3 . Enable development mode

    -

    Local work only. composer development-status reports where you stand.

    - composer development-enable -
    -
    -

    4 . Set the base URL

    +

    2 . Set the base URL

    Point $baseUrl in config/autoload/local.php at your virtual host.

    -

    5 . Fix the writable folders

    +

    3 . Fix the writable folders

    The two directories the application writes to. Most first-run errors are this and nothing - else.

    - chmod -R 777 ./data ./log + else. Give the web server group write access instead of opening the folders to everyone:

    + sudo chown -R "$USER":www-data data log
    sudo chmod -R 775 data log
    -

    6 . Open it in a browser

    +

    4 . Open it in a browser

    The Dotkernel Light welcome page is waiting. Errors about missing services usually mean a stale config cache.

    - php ./bin/clear-config-cache.php + composer clear-config-cache

    + Do not run this with sudo - that leaves the regenerated + data/cache/config-cache.php owned by root, which the application can no longer rewrite. A cached data/cache/config-cache.php is loaded regardless of the ConfigAggregator::ENABLE_CACHE setting - which is exactly why clearing it fixes so much. On Windows, WSL2 with AlmaLinux is the recommended development environment. @@ -441,7 +434,7 @@ PHP - 8.2+ with mod_php or FCGI (FPM). memory_limit at least + 8.3, 8.4 or 8.5, with mod_php or FCGI (FPM). memory_limit at least 128M. diff --git a/src/Page/templates/page/queue.html.twig b/src/Page/templates/page/queue.html.twig index 62c7fec..ab262ab 100644 --- a/src/Page/templates/page/queue.html.twig +++ b/src/Page/templates/page/queue.html.twig @@ -478,9 +478,9 @@

    4 . Clone and configure

    -

    Clone the queue branch, then copy each .dist configuration file into place - local, +

    Clone the queue repo, then copy each .dist configuration file into place - local, log, messenger and swoole - and fill them in.

    - git clone -b default-queue https://github.com/dotkernel/queue.git
    composer install --no-dev
    + git clone https://github.com/dotkernel/queue.git
    composer install --no-dev

    5 . Register the daemons

    From 74ef38e6c1b445cf222454484e235d3e387ed241 Mon Sep 17 00:00:00 2001 From: bidi47 Date: Mon, 28 Sep 2026 19:13:10 +0300 Subject: [PATCH 3/3] updated based on review Signed-off-by: bidi47 --- public/admin.md | 5 +---- public/api.md | 11 ++++------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/public/admin.md b/public/admin.md index 854de63..1f78bba 100644 --- a/public/admin.md +++ b/public/admin.md @@ -16,10 +16,7 @@ A fast, reliable way to manage the records in your database with a simple table- - [View on GitHub](https://github.com/dotkernel/admin) - [Live demo](https://admin7.dotkernel.net/) -![PHP version for dotkernel/admin](https://img.shields.io/packagist/dependency-v/dotkernel/admin/php?style=flat&label=php) -![Latest release of dotkernel/admin](https://img.shields.io/packagist/v/dotkernel/admin?style=flat) -![License of dotkernel/admin](https://img.shields.io/github/license/dotkernel/admin?style=flat) -![GitHub stars for dotkernel/admin](https://img.shields.io/github/stars/dotkernel/admin?style=flat&label=%E2%98%85) +PHP 8.3, 8.4 or 8.5 . [Latest release](https://github.com/dotkernel/admin/releases/latest) | | | | --- | --- | diff --git a/public/api.md b/public/api.md index d720714..3886a4f 100644 --- a/public/api.md +++ b/public/api.md @@ -16,10 +16,7 @@ OAuth 2.0, RBAC authorization, HAL payloads, standardized error responses and an - [View on GitHub](https://github.com/dotkernel/api) - [Live demo](https://api.dotkernel.net/) -![PHP version for dotkernel/api](https://img.shields.io/packagist/dependency-v/dotkernel/api/php?style=flat&label=php) -![Latest release of dotkernel/api](https://img.shields.io/packagist/v/dotkernel/api?style=flat) -![License of dotkernel/api](https://img.shields.io/github/license/dotkernel/api?style=flat) -![GitHub stars for dotkernel/api](https://img.shields.io/github/stars/dotkernel/api?style=flat&label=%E2%98%85) +PHP 8.3, 8.4 or 8.5 . [Latest release](https://github.com/dotkernel/api/releases/latest) | | | | --- | --- | @@ -139,7 +136,7 @@ Because native UUID is required, you need PostgreSQL 13+ or MariaDB 11.4 or late ### PHP 8.5 -The API targets PHP 8.5, with Dotkernel Admin on 8.4. +The API and Admin target PHP 8.5. Dependencies are kept current, and the ecosystem's own packages track the versions Laminas and Doctrine support. ### Table prefixes @@ -180,8 +177,8 @@ The comparison below is drawn from the full side-by-side write-up on our blog. | --- | --- | --- | | First release | 2012 | 2018 | | Architecture | MVC, event driven | Middleware | -| OSS lifecycle | Archived | ![OSS lifecycle for dotkernel/api](https://img.shields.io/osslifecycle/dotkernel/api?style=flat) | -| PHP version | ≤ 8.2 | See the PHP version badge for `dotkernel/api` | +| OSS lifecycle | Archived | Active | +| PHP version | ≤ 8.2 | 8.3, 8.4 or 8.5 | | Style | REST, RPC | REST | | Change management | Versioning | Deprecations (API evolution) | | Documentation | Swagger (automated) | OpenAPI 3.0 (Swagger) and Postman (manual) |