{"id":37236037,"url":"https://github.com/joomlatools/joomlatools-server","last_synced_at":"2026-01-16T04:51:51.895Z","repository":{"id":37928888,"uuid":"412229695","full_name":"joomlatools/joomlatools-server","owner":"joomlatools","description":"Cloud native dev evironment for Joomla CMS, Wordpress and Joomlatools Pages","archived":false,"fork":false,"pushed_at":"2023-07-15T15:08:46.000Z","size":25468,"stargazers_count":4,"open_issues_count":13,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-14T14:49:41.405Z","etag":null,"topics":["apache2","cloud-native","docker","joomla","mysql","php","ubuntu","wordpress"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joomlatools.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-30T21:12:45.000Z","updated_at":"2025-09-01T19:11:06.000Z","dependencies_parsed_at":"2023-01-21T14:00:34.028Z","dependency_job_id":null,"html_url":"https://github.com/joomlatools/joomlatools-server","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joomlatools/joomlatools-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomlatools%2Fjoomlatools-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomlatools%2Fjoomlatools-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomlatools%2Fjoomlatools-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomlatools%2Fjoomlatools-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joomlatools","download_url":"https://codeload.github.com/joomlatools/joomlatools-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joomlatools%2Fjoomlatools-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache2","cloud-native","docker","joomla","mysql","php","ubuntu","wordpress"],"created_at":"2026-01-15T04:06:22.724Z","updated_at":"2026-01-15T04:06:23.922Z","avatar_url":"https://github.com/joomlatools.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003ch1\u003eJoomlatools Server\u003c/h1\u003e\n  \u003cstrong\u003eCloud Native development environment for Joomla\u003c/strong\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.php.net\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/PHP-v8.1-green.svg\" alt=\"php version\"\u003e\n  \u003c/a\u003e\n   \u003ca href=\"https://gitpod.io/from-referrer/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod\" alt=\"GitPod badge\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nWelcome to the Joomlatools Server codebase, our home-grown **cloud native development environment** for Joomla CMS, Wordpress and [Joomlatools Pages](https://github.com/joomlatools/joomlatools-pages).\n\n### What is Joomlatools Server?\n\nJoomlatools Server is Docker container that is specially tailored for developing websites with Joomla CMS and [Joomlatools Pages](https://github.com/joomlatools/joomlatools-pages) and is supported on  macOS, Linux, and Windows (via WSL2).\n\nIt offers support for both Joomla 3 and 4 and can be used as a local/remote development environment. You can run it locally using Docker Desktop, or remotely using Gitpod.\n\n## Getting started\n\n### Installation\n\nGetting started is very easy, first you need to install the source code on your local machine or create a new Git repo (in case you want to use Gitpod).\n\n#### Via Download\n\nThe easiest way to get the code is to just download it. Click the `code` button and select `Download Zip` or use the following terminal command:\n\n```\ncurl https://github.com/joomlatools/joomlatools-server/archive/refs/heads/master.tar.gz | tar -xz\n```\n\n#### Via Composer\n\nYou may also download Joomlatools Server by issuing the [Composer](https://getcomposer.org/) `create-project` command in your terminal:\n\n```\ncomposer create-project joomlatools/server [directory] --stability dev\n```\n\nFor more info: https://getcomposer.org/doc/03-cli.md#create-project\n\n#### Via Clone\n\nYou can also **clone** the repository using Git by issueing the following command in your terminal:\n\n```\ngit clone https://github.com/joomlatools/joomlatools-server\n```\n\nFor more info: https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository\n\n\n#### Via Fork\n\nFinally you can also **fork** the repository through Github, this can only be done through the Github user interface. For mor information: https://docs.github.com/en/get-started/quickstart/fork-a-repo#fork-an-example-repository\n\n\n### Using your own IDE\n\nMake sure you have [Docker Desktop installed](https://www.docker.com/products/docker-desktop) and local installation of this repo. Go to the root directory of your installation and in the terminal and execute following command:\n\n```\ndocker compose up\n```\n\n### Using Gitpod IDE\n\n[Gitpod](https://www.gitpod.io/) provides a super simple way to develop with Joomlatools Server using [VSCode](https://code.visualstudio.com/), straight from the browser. To get started make sure you have a clone or fork this repo, Gitpod offers support for  [GitHub](https://github.com/), [GitLab](https://gitlab.com) or [Bitbucket](https://bitbucket.org/) and either:\n\n1. Install the [Gitpod Chrome or Firefox extension](https://www.gitpod.io/docs/browser-extension/) and click the `Gitpod` button in the toolbar.\n2. Go to `http://gitpod.io#[my-repo-url-goes-here]`\n\nYou can find all the documentation for Gitpod here: [https://www.gitpod.io/docs/](https://www.gitpod.io/docs/)\n\n**Gitpod Demo**: If you want to give this repo a spin in Gitpod, just click this button to launch Joomlatools Server in Gitpod and automatically install the latest version of Joomla.\n\n[![Launch Joomla 4 in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#JOOMLA_SITE=joomla/https://github.com/joomlatools/joomlatools-server)\n\n## Architecture\n\nJoomlatools Server runs applications as a multi-process Docker container. The processes are supervised using S6\noverlay. While init systems like supervisord are better known, s6 is powerful, lightweight, easy to use, and plays nicely with docker (e.g. avoiding the pid 1 / zombie problem).\n\n\nEach application is build on the [`joomlatools-server`](https://github.com/joomlatools/joomlatools-server/pkgs/container/server) base image. It contains following:\n\n- [Ubuntu 20.4](https://ubuntu.com/)\n- [S6 Overlay v2.2](https://github.com/just-containers/s6-overlay)\n- [Apache 2.4](https://httpd.apache.org/)\n- [PHP 8.1 or 7.4](https://www.php.net/)\n\nOptional\n\n- [MySQL 8.0](https://www.mysql.com/)\n\n#### Tools\n\n- [Composer](https://getcomposer.org/)\n- [Phive](https://phar.io/)\n- [Xdebug](https://xdebug.org/)\n\n### Multi-process Docker\n\nOne of the oft-repeated Docker mantras is \"one process per container\". There's nothing inherently bad about running multiple processes in a Docker container. The more abstract \"one thing per container\" is our policy - a container should do one thing, such as \"run a chat service\" or \"run gitlab.\" This may involve multiple processes, which is fine.\n\nThe other reason image authors shy away from process supervisors is they believe a process supervisor must restart failed services, meaning the Docker container will never die.\n\nThis does effectively break the Docker ecosystem - most images run one process that will exit when there's an error. By exiting on error, you allow the system administrator to handle failures however they prefer. If your image will never exit, you now need some alternative method of error recovery and failure notification.\n\nOur policy is that if \"the thing\" fails, then the container should fail, too. We do this by determining which processes can restart, and which should bring down the container. For example, if cron or syslog fails, your container can most likely restart it without any ill effects, but if ejabberd fails, the container should exit so the system administrator can take action.\n\nOur interpretation of \"The Docker Way\" is thus:\n\n\u003e Containers should do one thing. Containers should stop when that thing stops.\n\nand the S6 init system is designed to do exactly that! Joomlatools Server still behaves like other Docker images and fit in with the existing ecosystem of images.\n\n## Composer\n\nAn application only contains a single composer `/vendor` directory which contains all PHP libraries used by the application libraries, sites and services. The `/vendor` directory is located in `/srv/www/vendor`and composer installation happens during the Docker image build phase.\n\nComposer requires are being handled in 2 stage\n\n#### 1. During image build\n\nWith delay during `ONBUILD`, the base defines the minimal composer requires and the app that extends from base can define additional requires.\n\nThe [Composer Merge Plugin](https://github.com/wikimedia/composer-merge-plugin) is used to merge composer.json files from following locations:\n\n- `/srv/www/config/composer/*.json`\n- `/var/www/composer.json`\n- `/srv/www/services/composer.json`\n- `/var/www/services/composer.json`\n- `/srv/www/sites/composer.json`\n- `/var/www/sites/composer.json`\n\nDuring image build, when Composer is run it will parse these files and merge their configuration settings into the base configuration. This combined configuration will then be used when downloading additional libraries and generating the autoloader.\n\n#### 2. During container run\n\nIf the app is running in development mode, `APP_ENV` = `development`, composer will be re-run. This allows to update dependencies and install\n`require-dev` dependencies without needing to rebuild the container or trigger composer manually. To make composer install dev dependencies add `COMPOSER_NO_DEV=0` to you `.env` file or runtime environment.\n\n### composer.lock\n\nIf the application contains a `/var/www/compooser.lock` file composer will run `composer install` to install the specific versions of the libraries, if there is no `composer.lock`, it will run `composer update` to install the latest versions of the libraries.\n\nIf no `composer.lock` is provided the generated `composer.lock` is copied to `/var/www/composer.lock` to make it easy to commit it in the repo. Removing an existing lock file ensure the dependencies are updated.\n\n### opcache preload\n\nBy default the complete `/vendor` directory is preloaded in opcache unless `APP_PRELOAD` is disabled. To ignore a specific directory or file paths from being preloaded add a `/var/www/config/opcache/preload_ignore.php` file that returns an array of\nfile paths relative to `.../vendor` to be ignored.\n\n```php\n\u003c?php\nreturn [\n    '/path/to/file',\n];\n```\n\n## Environment\n\nThe following is a list of application environment variables. Defaults are provided (or generated in case of APP_APIKEY and APP_NONCE) for each except if not provided\n\n- `APP_NAME=jt-base`\n  The application name (default)\n\n- `APP_ENV=production`\n  The application environment _(default)_\n\n- `APP_USER=www-data`\n  The application user _(default)_\n\n- `APP_ROOT=/var/www`\n  Location of the Apache root _(default)_\n\n- `APP_DATA=/srv/www`\n  Location of the common code, /vendor etc. _(default)_\n\n- `APP_VOLUME=/mnt/www`\n  Location of the persistent storage _(default)_\n\n- `APP_PRELOAD=on`\n  Defines if opcache is preloaded from APP_DATA _(default)_\n\n- `APP_CACHE=on`\n  Globally enable the application cache _(default)_\n\n- `APP_DEBUG=off`\n  Globally enable application debug mode _(default)_\n\n- `APP_HTTP=8080`\n  External HTTP port the app is listening on _(default)_\n\n- `APP_HTTP=8443`\n  External HTTPS port the app is listening on _(default)_\n\n- `APP_APIKEY=`\n  Bearer authentication token _(generated if not provided)_\n\n- `APP_NONCE=`\n  Random number specific for the application _(generated if not provided)_\n\nA complete list of all environment variables can be found in [.env.default](https://github.com/joomlatools/joomlatools/joomlatools-server/.env.default)\n\n\n## Endpoints\n\nThe server provides following default HTTP(s) endpoints\n\n### Status\n\n- http://localhost:8080/__ping (php-fpm ping, local only)\n- http://localhost:8080/__status-php (php-fpm status, local only)\n- http://localhost:8080/__status-apache (apache status, local only)\n\n### Info\n\n- http://localhost:8080/__info/php-info\n- http://localhost:8080/__info/php-apc\n- http://localhost:8080/__info/php-fpm\n- http://localhost:8080/__info/php-opcache\n- http://localhost:8080/__info/php-xdebug (only if xdebug is enabled)\n\n## Documentation\n\nYou can find all the documentation for Joomlatools Server [in the wiki](https://github.com/joomlatools/joomlatools-server/wiki). Happy coding!\n\n## Contributing\n\nJoomlatools Server is an open source, community-driven project. Contributions are welcome from everyone.\nWe have [contributing guidelines](CONTRIBUTING.md) to help you get started.\n\n## Contributors\n\nSee the list of [contributors](https://github.com/joomlatools/joomlatools-server/contributors).\n\n## License\n\nJoomlatools Server is open-source software licensed under the [AGPLv3 license](LICENSE.txt).\n\n## Community\n\nKeep track of development and community news.\n\n* Follow [@joomlatoolsdev on Twitter](https://twitter.com/joomlatoolsdev)\n* Read the [Joomlatools Developer Blog](https://www.joomlatools.com/developer/blog/)\n* Subscribe to the [Joomlatools Developer Newsletter](https://www.joomlatools.com/developer/newsletter/)\n\n\n[⬆ Back to Top](#Table-of-contents)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoomlatools%2Fjoomlatools-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoomlatools%2Fjoomlatools-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoomlatools%2Fjoomlatools-server/lists"}