2.6 KiB
2.6 KiB
AGENTS.md
1. Overview
Lightweight PHP micro-service that returns the client's public IP address as JSON. Containerized with Docker and deployed on Kubernetes.
2. Folder Structure
root/: Application source code served by Apache.index.php: Single endpoint returningREMOTE_ADDRas JSON.
.gitea/workflows/: Gitea Actions CI pipelines.docker-build.yaml: Build and push Docker image to Docker Hub on push/PR to master + daily cron.
Dockerfile: Multi-stage build extendingjcabillot/phpapachebase image, copiesroot/into/var/www/html..gitlab-ci.yml: Legacy GitLab CI config (deprecated, replaced by Gitea Actions).Jenkinsfile: Legacy Jenkins pipeline (deprecated, replaced by Gitea Actions).
3. Core Behaviors & Patterns
- Request/Response Flow: Single PHP endpoint sets
Content-Type: application/jsonheader and returns$_SERVER['REMOTE_ADDR']encoded as JSON string. No routing, no framework, no state. - Container Base Image Pattern:
DockerfileusesARG VERSION="latest"to allow version pinning at build time, extendsjcabillot/phpapachewhich provides PHP + Apache pre-configured. Application code is layered on top viaCOPY root /var/www/html. - Traefik IngressRoute with HTTPS Redirect: Two IngressRoute resources handle traffic —
ip-websecureserves HTTPS on thewebsecureentrypoint,ip-webcatches HTTP onwebentrypoint and applies aredirectSchememiddleware for permanent HTTPS redirect. The Service reference in the HTTP IngressRoute is required by Traefik even though the middleware intercepts before reaching it. - Health Probes: Deployment defines both
livenessProbeandreadinessProbeusinghttpGeton/at the namedhttpport (8080). Kubernetes uses these to restart unhealthy pods and exclude unready pods from the Service endpoints. - Security Hardening: Pod spec sets
automountServiceAccountToken: falseto prevent unnecessary Kubernetes API access from the container.
4. Conventions
- Kubernetes Labels: Pods use
app: "front"for Service selector matching andowner: "jcabillot"for resource attribution. Deployment-level labels useapp: "front". - Named Ports: Container port is named
http(8080) and referenced by name in probes and Service targetPort, avoiding hardcoded port numbers. - Docker Image Tagging: CI uses
docker/metadata-actionto generate tags —latestfor master branch pushes, branch/PR/SHA tags for other events. Push is skipped on pull requests. - CI Secrets: Docker Hub credentials are stored as Gitea Actions secrets (
DOCKERHUB_USERNAME,DOCKERHUB_TOKEN), never hardcoded.