# Features — indawo_docker

Evidence date: 2026-10-12. Revision: `main` `76c21e3` (2025-03-08, "updating container").

The current README is the upstream sprintcube LAMP README. Several features it lists have no directory in this tree. The February commits implemented a smaller Indawo-oriented stack that `76c21e3` replaced.

No feature flag, issue tracker, or changelog is in git. `todo.md` is the only planned-work list.

## Current features (`main`)

| Feature | What it does | Evidence | Status |
|---|---|---|---|
| Compose project | Declares `webserver`, `database`, `phpmyadmin`, and `redis` under Compose file version `3` | `docker-compose.yml` | Implemented |
| Configurable container prefix | `container_name` uses `COMPOSE_PROJECT_NAME`. Sample value is `lamp` | `docker-compose.yml`, `sample.env` | Implemented |
| PHP 5.6 Apache image | `FROM php:5.6-apache`, Stretch archive repos, Apache in the foreground, ports 80 and 443 | `bin/php56/Dockerfile` | Implemented. This is the file Compose builds for `PHPVERSION=php56` |
| Alternate PHP 5.6 image | Same base and PHP extensions without ODBC, FreeTDS, `headers` as its own step, `ServerName`, or `phpinfo` | `bin/php56/Dockerfile2` | Implemented file. Not referenced by Compose. Role is **Unknown** |
| PHP extensions | `curl`, `tokenizer`, `json`, `bcmath`, `mcrypt`, `pdo_mysql`, `pdo_sqlite`, `mysqli`, `zip`, `intl`, `mbstring`, `gd`, Xdebug 2.5.5 | Both PHP Dockerfiles | Implemented |
| Composer in the image | Installs Composer to `/usr/local/bin/composer` | Both PHP Dockerfiles | Implemented |
| ODBC and FreeTDS | Builds `odbc.so` from PHP 5.6.40 sources, writes a FreeTDS `[mssql]` section and an `odbcinst.ini` driver | `bin/php56/Dockerfile` | Implemented. Host is the placeholder `your_sql_server_host` |
| Default phpinfo page | Writes `<?php phpinfo();` to `/var/www/html/index.php` in the image | `bin/php56/Dockerfile` | Implemented. Hidden when `./www` is mounted over `/var/www/html` (**Inferred**) |
| Apache modules | `ssl`, `rewrite`, and `headers` | `bin/php56/Dockerfile` (`a2enmod`). `Dockerfile2` enables `ssl` and `rewrite`, then `rewrite` and `headers` | Implemented |
| MySQL 5.7 | Image is `FROM mysql:5.7` with no further instructions | `bin/mysql57/Dockerfile` | Implemented |
| MySQL published on localhost | `127.0.0.1:${HOST_MACHINE_MYSQL_PORT}:3306` | `docker-compose.yml` | Implemented |
| MySQL init and data mounts | Initdb, data, and log directories have defaults under `./config/initdb`, `./data/mysql`, and `./logs/mysql` | `docker-compose.yml` | Implemented. Those directories are gitignored and are not in the commit |
| phpMyAdmin | Image `phpmyadmin`, host `database`, user `root`, ports from `HOST_MACHINE_PMA_PORT` (sample 8080) and `HOST_MACHINE_PMA_SECURE_PORT` (sample 8443) | `docker-compose.yml`, `sample.env`, README "phpMyAdmin" | Implemented. README documents URL, user, and password `tiger` |
| Redis | Image `redis:latest`, bound to `127.0.0.1` on `HOST_MACHINE_REDIS_PORT` (sample 6379) | `docker-compose.yml`, `sample.env` | Implemented. No password and no volume |
| Sample environment | Documents PHP and database choices, ports, Xdebug port, upload limits, and MySQL accounts | `sample.env` | Implemented. Active accounts are `docker` / `docker` and root password `tiger`. A commented account uses database `indawo_online` |
| Document root mount | `${DOCUMENT_ROOT-./www}` to `/var/www/html` | `docker-compose.yml` | Implemented. `www/` is gitignored |
| Virtual hosts, PHP ini, SSL, Apache logs, Xdebug logs | Optional host paths with defaults under `./config` and `./logs` | `docker-compose.yml` | Implemented as mounts. The files are not in git |
| Restart policy | `restart: always` on `webserver` and `database` | `docker-compose.yml` | Implemented. phpMyAdmin and Redis have no restart policy |
| Host gateway name | `host.docker.internal:host-gateway` on `webserver` | `docker-compose.yml` | Implemented |
| Xdebug client settings | `xdebug.remote_enable=1` in the image; `XDEBUG_CONFIG` from `XDEBUG_PORT` | Dockerfiles, `docker-compose.yml`, `sample.env` | Implemented. Sample port is 9003 while the installed Xdebug is 2.5.5. See PRD W7 |
| Linux build matrix | Builds combinations of PHP and database versions and curls two PHP scripts | `dev_build_container.sh` | Implemented script. Depends on image directories and test scripts that are not in git |
| Ignore local state | Ignores `.env`, `config/`, `data/`, `logs/`, `www/`, `buildtest/`, `.vscode` | `.gitignore` added in `76c21e3` | Implemented |
| MIT license | Upstream copyright notices from 2017 and 2019 | `LICENSE` | Documented |
| Local-only guidance | README section "Why you shouldn't use this stack unmodified in production" | `README.md` | Documented. php-fpm and MySQL source-IP limits are not in the Dockerfiles |

## Documented in the README, not present as files on `main`

| Claim in `README.md` | What the tree has | Status |
|---|---|---|
| PHP 5.4, 5.6, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2, 8.3 | Directory `bin/php56` only | Documented. Not in this checkout except 5.6 |
| Enable extra Apache modules by editing `./bin/phpX/Dockerfile` | `bin/php56/Dockerfile` exists. No other `phpX` directory | Partially true for `php56` only |
| Install extra PHP extensions by editing `./bin/webserver/Dockerfile` | That path does not exist | Documented path is absent |
| `config/vhosts`, `config/php/php.ini`, `config/ssl`, `config/initdb` | Ignored by git, not committed | Documented. Local-only if a developer creates them |
| HTTPS by editing `config/vhosts/default.conf` | File not in git | Documented procedure. File absent |
| Xdebug settings inside `./config/php/php.ini` | File not in git. Image writes `xdebug.remote_enable=1` into the container `php.ini`, which the compose mount then replaces if the host file exists | Documented and, for the image line, Implemented |
| Clone `https://github.com/sprintcube/docker-compose-lamp.git` | This remote is Bitbucket `overdrive/indawo_docker` | Documented upstream instruction |
| Contributing against a GitHub `master` branch | This repository's only branch is `main` | Documented upstream workflow |
| Landing-page image on `user-images.githubusercontent.com` | Markdown image only | Documented link. Not fetched |

`sample.env` repeats the same PHP and database menu, and adds an Apple Silicon note: choose MariaDB because Oracle SQL images are not built for ARM. No MariaDB directory is committed. Provenance: **Documented**.

## Removed features

Removed in `76c21e3` (present in `2567dfc`, absent on `main`):

| Feature | What it did | Evidence |
|---|---|---|
| Two-service compose | Services `php` and `mysql` only | `docker-compose.yml` at `2567dfc` |
| Application mount `./src` | Host `./src` at `/var/www/html` | Same file. README directory diagram |
| External drive mount | `/external/drive:/external` | Same file. README "External drive" section |
| Named MySQL volume | `mysql_data` at `/var/lib/mysql` | Same file |
| Database name `indawo` | `MYSQL_DATABASE: indawo` with user `user` | Same file and that README's connection section |
| Microsoft ODBC image | `Dockerfile-php`: `msodbcsql`, `pdo_odbc`, `odbc.ini` DSN `[MSSQL]` using `${MSSQL_HOST}` | `Dockerfile-php` deleted in `76c21e3` |
| MSSQL environment placeholders | `MSSQL_HOST`, `MSSQL_DATABASE`, `MSSQL_USER`, `MSSQL_PASSWORD` on the PHP service | Compose at `2567dfc` |
| Indawo README | Setup, troubleshooting, host-side MySQL ODBC, and MSSQL connection examples | `README.md` at `2567dfc`, replaced in `76c21e3` |

`cc17467` had the two-service compose and the external-drive README without the ODBC Dockerfile. Provenance: **Removed**.

The commit message `obdc update done` is the only statement that the Microsoft ODBC work was finished. Provenance: **Documented** in that message. The following commit replaced it with FreeTDS inside the sprintcube-style image.

## Planned features

| Item | Source | Status |
|---|---|---|
| Redesign `readme.md` for readability | `todo.md` | Planned. The current README is still the upstream LAMP document |
| Update issue templates | `todo.md` | Planned. No issue-template directory is in the tree |

No other roadmap, ticket id, or version target is in the repository.

## Not features of this repository

- SonarQube scanning. `sonar-project.properties` and `sonarqube_scan.bat` were listed on the scan host on 2026-09-28 and are not in `76c21e3`.
- A changelog. `CHANGELOG.md` was listed on the scan host and is not in git.
- A `docs/` tree. Listed on the scan host and not in git.
- Application screens, APIs, or Indawo domain workflows. No PHP application is committed.
- CI. No `bitbucket-pipelines.yml`.
- The empty repository `indawo_online_docker` and the Indawo deploy notes inside `quantiviaLive`. See the project plan. They are not implemented here.

## Recently changed

The only functional change after the initial ignore file is the pair of commits on 2025-02-20 (Indawo PHP/MySQL compose, then ODBC) and the replacement on 2025-03-08 (`76c21e3`, author Ettiene). Nothing in git is newer than 2025-03-08.
