2026-06-01 23:01:28 +02:00
2026-06-01 23:01:28 +02:00
2026-03-09 11:03:45 +01:00
2025-01-29 14:27:44 +01:00
2026-03-09 11:03:45 +01:00

Copenhagen Truck Wash API

Backend API for Copenhagen Truck Wash services.

Architecture & Stack

  • Edge Proxy: Traefik 2.11 (Handles TLS termination, routing, and rate limiting).
  • Web Server: Caddy 2.7 (Serves the PHP application via FastCGI).
  • PHP Runtime: PHP 8.2-FPM (Scale out with workers php1 to php5).
  • Cache/Queue: Redis 7.
  • Observability: Jaeger (Tracing), Prometheus (Metrics).

Getting Started

Prerequisites

  • Docker Desktop 4.x+
  • PHP 8.2 CLI (optional, for host-side testing)

Local Development

To bring up the minimal development stack (Traefik, Redis, Caddy, and one PHP worker):

docker compose up -d traefik redis php1 caddy

The API is accessible at:

  • http://localhost
  • https://localhost (using Traefik default cert)
  • http(s)://localhost/api/ (proxied with /api prefix stripped)

To start all services including multiple PHP workers and development tools (Jaeger, Portainer):

docker compose --profile dev up -d

Configuration

Configuration is primarily managed via environment variables.

  • The application root is located at services/nginx/app.
  • services/nginx/app/config.php loads configuration from the environment (requires USE_ENV=true).
  • php1 performs an automatic composer install on startup if AUTO_COMPOSER_INSTALL=true.

Testing

The project now uses Pest as the primary test runner in services/nginx/app.

Running Tests

All commands are run from services/nginx/app:

composer test
composer test:unit
composer test:integration
composer test:coverage

Integration tests are opt-in and should be run with required services available:

$env:RUN_INTEGRATION_TESTS='1'
composer test:integration

Test Layout

  • tests/Unit/*: isolated unit and route-level behavior tests.
  • tests/Integration/*: Redis/DB-backed tests intended for Docker/CI environments.
  • tests/<legacy-domain>/*: legacy procedural scripts retained during migration; keep them runnable until matching Pest coverage exists.

Logs & Monitoring

  • Logs: docker compose logs -f [service_name] (e.g., php1, caddy, traefik).
  • Traefik Dashboard: http://traefik.localhost (available in dev).
  • Jaeger (Tracing): http://localhost:16686 (when running with --profile dev).
  • Portainer: http://localhost:9000 (when running with --profile dev).

API Documentation

  • OpenAPI: The authoritative OpenAPI 3.0 contract is at openapi.yaml.
  • Writerside: Documentation projects are located in /Writerside and /Writerside2.
S
Description
Staging repo for api (CI + promotion to GitHub)
Readme
40 MiB
Languages
PHP 93.5%
HTML 3.5%
JavaScript 1.9%
Shell 0.4%
Python 0.3%
Other 0.3%