| Tool | Minimum Version |
|---|---|
| Docker | 20.x+ |
| Docker Compose | v2+ |
| Git | 2.x+ |
| Composer | 2.x+ |
git clone <repo-url> ci4ms
cd ci4ms
composer installdocker compose up -d --buildThis command creates 3 services:
| Service | Container | Access URL | Description |
|---|---|---|---|
| app | ci4ms_app |
http://ci4ms.loc |
PHP 8.2 + Apache |
| db | ci4ms_db |
localhost:3307 |
MariaDB 12.0.2 |
| phpmyadmin | ci4ms_phpmyadmin |
http://localhost:8081 |
phpMyAdmin Interface |
docker compose psThe ci4ms_db service should be in healthy state. For detailed logs:
docker compose logs -f dbYou can proceed once you see the ready for connections message.
First, add 127.0.0.1 ci4ms.loc to your /etc/hosts file.
Open http://ci4ms.loc in your browser. The CI4MS installation wizard will appear automatically.
Fill in the following information:
| Field | Value |
|---|---|
| Base URL | http://ci4ms.loc/ |
| Site Name | (your preferred name) |
| Field | Value |
|---|---|
| Hostname | db |
| Database | ci4ms_test |
| Username | ci4ms_user |
| Password | ci4ms_pass |
| Port | 3306 |
| Prefix | ci4ms_ |
| Driver | MySQLi |
⚠️ Hostname must bedb, notlocalhost. Containers communicate with each other using service names within the Docker internal network.
| Field | Value |
|---|---|
| First Name | (your first name) |
| Last Name | (your last name) |
| Username | (min 3 characters) |
| (valid email address) | |
| Password | (min 8 characters) |
After submitting the form, the wizard will automatically:
- Create and configure the
.envfile - Generate an encryption key
- Run all migrations (table creation)
- Insert default data (settings, languages, permission groups)
- Create the superadmin account
- Regenerate the routes file
- Create required directories (
writable/backups,public/media/.tmb,public/media/.trash)
Once installation is complete, you will be redirected to the homepage.
# Start
docker compose up -d
# Stop
docker compose down
# Rebuild (after Dockerfile changes)
docker compose up -d --build
# Watch logs
docker compose logs -f app
docker compose logs -f db# Connect to the container
docker exec -it ci4ms_app bash
# Clear cache
php spark cache:clear
# Run migrations
php spark migrate
# Clear logs
php spark log:clearTo start the installation from scratch:
# Stop containers and delete the database volume
docker compose down -v
# Remove .env and reset Routes file (the install module will recreate them)
rm -f .env
rm -f app/Config/Routes.php
cp app/Config/DefaultRoutes.php app/Config/Routes.php
# Restart
docker compose up -d --buildThen go to http://ci4ms.loc and run the installation again.
http://localhost:8081
| Field | Value |
|---|---|
| Username | root |
| Password | ci4ms_secret |
Host Machine Docker Network (ci4ms_network)
──────────── ──────────────────────────────
localhost:80 ──────────────► ci4ms_app:80 (Apache + PHP 8.2)
localhost:3307 ──────────────► ci4ms_db:3306 (MariaDB 12.0.2)
localhost:8081 ──────────────► ci4ms_phpmyadmin:80 (phpMyAdmin)
| Setting | Value |
|---|---|
upload_max_filesize |
64M |
post_max_size |
64M |
memory_limit |
256M |
max_execution_time |
120 |
display_errors |
On |
date.timezone |
Europe/Istanbul |
| Setting | Value |
|---|---|
| Version | 12.0.2 |
| Storage Engine | InnoDB |
| Charset | utf8mb4 |
| Collation | utf8mb4_unicode_ci |
| Buffer Pool | 256MB |
Cause: The DB container is not ready yet or the hostname is incorrect.
Solution:
- Verify the
ci4ms_dbservice ishealthyby runningdocker compose ps - Make sure you entered
dbin the hostname field (notlocalhost) - Enter
3306for the port (3307is the port exposed to the host machine)
Cause: The Docker container name (ci4ms_app) is not accepted as a valid FQDN by the remote SMTP server.
Solution: Disable Email 2FA and EmailActivator in the development environment:
// modules/Auth/Config/Auth.php
public array $actions = [
'login' => null,
'register' => null,
];Change the app port in docker-compose.yml:
ports:
- "80:80" # Use 8080 instead of 80Then enter http://ci4ms.loc/ as the Base URL in the installation form.
Go to System Settings → General → AirDrop & Handoff and disable the AirPlay Receiver option.
ci4ms/
├── .docker/
│ ├── Dockerfile # PHP 8.2 + Apache image
│ ├── apache/000-default.conf # VirtualHost configuration
│ └── php/php.ini # PHP settings
├── docker-compose.yml # Service definitions
├── modules/
│ └── Install/ # Installation wizard module
│ ├── Controllers/Install.php
│ ├── Services/InstallService.php
│ └── Views/install.php
└── ...
- Make code changes — Reflected instantly in the container via volume mount
- After module menu changes — Admin Panel → Modules → "Module Scan"
- For cache issues —
docker exec -it ci4ms_app php spark cache:clear - For a clean start —
docker compose down -v→rm .env→cp app/Config/DefaultRoutes.php app/Config/Routes.php→docker compose up -d --build