From 91b216abb5b73986925617e9f96e51b185881d5b Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Wed, 1 Apr 2026 20:28:42 +0200 Subject: [PATCH 1/6] Add test docker files --- docker-compose.yml | 40 +++++++++ docker/README.md | 60 +++++++++++++ docker/config/gitinfo-connect.php | 6 ++ docker/config/roslogin-connect.php | 35 ++++++++ docker/config/testman-connect.php | 6 ++ docker/ldap/Dockerfile | 10 +++ docker/mysql/init.sql | 136 +++++++++++++++++++++++++++++ docker/web/Dockerfile | 11 +++ docker/web/apache.conf | 30 +++++++ 9 files changed, 334 insertions(+) create mode 100644 docker-compose.yml create mode 100644 docker/README.md create mode 100644 docker/config/gitinfo-connect.php create mode 100644 docker/config/roslogin-connect.php create mode 100644 docker/config/testman-connect.php create mode 100644 docker/ldap/Dockerfile create mode 100644 docker/mysql/init.sql create mode 100644 docker/web/Dockerfile create mode 100644 docker/web/apache.conf diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..e9c74f96 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,40 @@ +services: + web: + build: docker/web + ports: + - "80:80" + volumes: + - ./www:/var/www/html + - ./docker/config/roslogin-connect.php:/var/www/html/www.reactos.org_config/roslogin-connect.php + - ./docker/config/testman-connect.php:/var/www/html/www.reactos.org_config/testman-connect.php + - ./docker/config/gitinfo-connect.php:/var/www/html/www.reactos.org_config/gitinfo-connect.php + depends_on: + db: + condition: service_healthy + ldap: + condition: service_started + + db: + image: mysql:8.0 + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + volumes: + - ./docker/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql + - db_data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 5s + timeout: 5s + retries: 10 + + ldap: + build: + context: docker/ldap + dockerfile: Dockerfile + volumes: + - ./resources/ldaptest/testserver.py:/app/testserver.py + ports: + - "389:389" + +volumes: + db_data: diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 00000000..53af49e5 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,60 @@ +# Docker Development Environment + +Runs the ReactOS web services locally using three containers: + +| Container | Description | +|-----------|-------------| +| `web` | Apache + PHP 8.2 serving all four services | +| `db` | MySQL 8.0 with roslogin, testman, and gitinfo databases | +| `ldap` | In-memory LDAP stub (replaces real LDAP for local testing) | + +## Starting + +```bash +docker compose up --build +``` + +The `--build` flag is only needed the first time or after changing files in `docker/web/` or `docker/ldap/`. On subsequent runs, `docker compose up` is sufficient. + +## Services + +Once running, the following URLs are available: + +| URL | Service | +|-----|---------| +| http://localhost/roslogin/ | Authentication / user management | +| http://localhost/testman/ | Build and test results | +| http://localhost/getbuilds/ | Pre-built revision downloads | +| http://localhost/rosweb/ | Shared interface component | + +## Test Credentials + +The LDAP stub is pre-populated with these test accounts: + +| Username | Password | Groups | +|----------|----------|--------| +| test | test12 | — | +| test2 | test12 | — | +| test3 | test12 | — | +| testmod | test12 | Moderators | +| testadmin | test12 | Moderators, Administrators | + +## Database Access + +Connect directly to the database for debugging: + +```bash +docker compose exec db mysql -u roslogin roslogin +docker compose exec db mysql -u testman testman +``` + +## Configuration + +The files in `docker/config/` are Docker-specific overrides for the connection settings in `www/www.reactos.org_config/`. They redirect database connections to the `db` container and LDAP to the `ldap` container. The original config files are not modified. + +## Stopping + +```bash +docker compose down # stop containers, keep database volume +docker compose down -v # stop containers and delete database volume +``` diff --git a/docker/config/gitinfo-connect.php b/docker/config/gitinfo-connect.php new file mode 100644 index 00000000..459f338c --- /dev/null +++ b/docker/config/gitinfo-connect.php @@ -0,0 +1,6 @@ +"); + define("ROSLOGIN_MAIL_LINK", "http://localhost/roslogin/?p=confirm&"); + define("ROSLOGIN_MAIL_VALIDITY", "1 DAY"); + + // Captcha Settings + define("ROSLOGIN_RECAPTCHA_SITEKEY", "YOUR_GOOGLE_RECAPTCHA_SITEKEY_HERE"); + define("ROSLOGIN_RECAPTCHA_SECRET", "YOUR_GOOGLE_RECAPTCHA_SECRET_HERE"); + + // Miscellaneous Website Settings + define("ROSLOGIN_TITLE_SUFFIX", " | ReactOS Project"); + + // Admin panel settings + define("ROSLOGIN_ADMIN_GROUP", "LDAP Administrators"); + define("ROSLOGIN_MODERATOR_GROUP", "Moderators"); + define("ROSLOGIN_MATTERMOST_URL", "https://chat.reactos.org"); + define("ROSLOGIN_MATTERMOST_TOKEN", "YOUR_MATTERMOST_TOKEN_HERE"); diff --git a/docker/config/testman-connect.php b/docker/config/testman-connect.php new file mode 100644 index 00000000..5b4c6329 --- /dev/null +++ b/docker/config/testman-connect.php @@ -0,0 +1,6 @@ + + DocumentRoot /var/www/html/www.reactos.org + DirectoryIndex index.php + + + Options -Indexes + AllowOverride None + Require all granted + + + # PHP services: getbuilds, roslogin, rosweb, testman + + + SetHandler application/x-httpd-php + + + + # Fallback for non-service paths: serve static content + AliasMatch "^/(?!getbuilds|roslogin|rosweb|testman)(.*)" /var/www/html/www.reactos.org_content/$1 + + + Options -Indexes + AllowOverride None + Require all granted + php_admin_flag engine off + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + From 1627ac55dd8bb64a6fb3c515943c0466727693cb Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Wed, 1 Apr 2026 20:37:06 +0200 Subject: [PATCH 2/6] Fix --- docker-compose.yml | 6 ++---- docker/ldap/Dockerfile | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index e9c74f96..e31a6c22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,10 +29,8 @@ services: ldap: build: - context: docker/ldap - dockerfile: Dockerfile - volumes: - - ./resources/ldaptest/testserver.py:/app/testserver.py + context: . + dockerfile: docker/ldap/Dockerfile ports: - "389:389" diff --git a/docker/ldap/Dockerfile b/docker/ldap/Dockerfile index 40e3d33f..272e4215 100644 --- a/docker/ldap/Dockerfile +++ b/docker/ldap/Dockerfile @@ -3,7 +3,7 @@ FROM python:3.11-slim RUN pip install --no-cache-dir ldaptor twisted WORKDIR /app -COPY testserver.py . +COPY resources/ldaptest/testserver.py . EXPOSE 389 From dde7073f877e6dd50af4ca406c16e1eea30853b4 Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Wed, 1 Apr 2026 20:48:26 +0200 Subject: [PATCH 3/6] Fix 2 --- docker/web/apache.conf | 7 ------- 1 file changed, 7 deletions(-) diff --git a/docker/web/apache.conf b/docker/web/apache.conf index a6ee5ebd..0ab65a29 100644 --- a/docker/web/apache.conf +++ b/docker/web/apache.conf @@ -8,13 +8,6 @@ Require all granted - # PHP services: getbuilds, roslogin, rosweb, testman - - - SetHandler application/x-httpd-php - - - # Fallback for non-service paths: serve static content AliasMatch "^/(?!getbuilds|roslogin|rosweb|testman)(.*)" /var/www/html/www.reactos.org_content/$1 From a599d573b7233d5e999dfac8068f1117a37790f3 Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Wed, 1 Apr 2026 20:52:05 +0200 Subject: [PATCH 4/6] Fix 3 --- docker/web/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile index 8c7279a6..67e38e10 100644 --- a/docker/web/Dockerfile +++ b/docker/web/Dockerfile @@ -4,7 +4,7 @@ RUN apt-get update && apt-get install -y \ libldap2-dev \ libonig-dev \ && docker-php-ext-configure ldap \ - && docker-php-ext-install mysqli ldap mbstring \ + && docker-php-ext-install mysqli pdo_mysql ldap mbstring \ && a2enmod rewrite \ && rm -rf /var/lib/apt/lists/* From 413ad6c641d7cfc0afdd0efb0688cc2832b06bfb Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Wed, 1 Apr 2026 21:02:27 +0200 Subject: [PATCH 5/6] Hide php errors, fix headers displaying --- docker-compose.yml | 1 + docker/parts/footer.html | 3 +++ docker/parts/head.html | 4 ++++ docker/parts/header.html | 12 ++++++++++++ docker/web/Dockerfile | 1 + docker/web/php.ini | 3 +++ 6 files changed, 24 insertions(+) create mode 100644 docker/parts/footer.html create mode 100644 docker/parts/head.html create mode 100644 docker/parts/header.html create mode 100644 docker/web/php.ini diff --git a/docker-compose.yml b/docker-compose.yml index e31a6c22..36d9aac6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,7 @@ services: - ./docker/config/roslogin-connect.php:/var/www/html/www.reactos.org_config/roslogin-connect.php - ./docker/config/testman-connect.php:/var/www/html/www.reactos.org_config/testman-connect.php - ./docker/config/gitinfo-connect.php:/var/www/html/www.reactos.org_config/gitinfo-connect.php + - ./docker/parts:/srv/www/www.reactos.org_content/parts:ro depends_on: db: condition: service_healthy diff --git a/docker/parts/footer.html b/docker/parts/footer.html new file mode 100644 index 00000000..990cf7a5 --- /dev/null +++ b/docker/parts/footer.html @@ -0,0 +1,3 @@ +
+

ReactOS development environment

+
diff --git a/docker/parts/head.html b/docker/parts/head.html new file mode 100644 index 00000000..3f9c87b9 --- /dev/null +++ b/docker/parts/head.html @@ -0,0 +1,4 @@ + + + + diff --git a/docker/parts/header.html b/docker/parts/header.html new file mode 100644 index 00000000..d98351ad --- /dev/null +++ b/docker/parts/header.html @@ -0,0 +1,12 @@ + diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile index 67e38e10..eec1f538 100644 --- a/docker/web/Dockerfile +++ b/docker/web/Dockerfile @@ -9,3 +9,4 @@ RUN apt-get update && apt-get install -y \ && rm -rf /var/lib/apt/lists/* COPY apache.conf /etc/apache2/sites-available/000-default.conf +COPY php.ini /usr/local/etc/php/conf.d/docker-custom.ini diff --git a/docker/web/php.ini b/docker/web/php.ini new file mode 100644 index 00000000..3f2f4e37 --- /dev/null +++ b/docker/web/php.ini @@ -0,0 +1,3 @@ +display_errors = Off +log_errors = On +error_reporting = E_ALL From 103f0a2d5c0d4395b9e4e9022ebb541a08a3c35b Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Wed, 1 Apr 2026 21:07:08 +0200 Subject: [PATCH 6/6] Fix 4 --- docker/web/apache.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker/web/apache.conf b/docker/web/apache.conf index 0ab65a29..9917b8fb 100644 --- a/docker/web/apache.conf +++ b/docker/web/apache.conf @@ -2,6 +2,9 @@ DocumentRoot /var/www/html/www.reactos.org DirectoryIndex index.php + # Tell PHP it's running over HTTPS so roslogin doesn't redirect to https:// + SetEnv HTTPS on + Options -Indexes AllowOverride None