6 Commits

Author SHA1 Message Date
jcabillot 37cf75f7b0 Merge pull request 'fix: remove obsolete jcabillot/phpapache references' (#23) from fix/remove-phpapache-renovate into master
Main Release / hadolint (push) Successful in 8s
Main Release / test (push) Successful in 18s
Main Release / build (push) Successful in 21s
Main Release / tag (push) Successful in 34s
Tag Release / test (push) Successful in 22s
Tag Release / hadolint (push) Successful in 23s
Tag Release / build-push (push) Successful in 3m18s
Reviewed-on: #23
2026-06-29 15:33:47 -04:00
Hermes Agent 4e10bdc92d fix: remove obsolete jcabillot/phpapache references
PR Checks / hadolint (pull_request) Successful in 20s
PR Checks / build-test (pull_request) Successful in 20s
- Delete renovate.json: custom manager for jcabillot/phpapache ARG VERSION
  is obsolete since migration to dunglas/frankenphp.
- Update AGENTS.md: reflect FrankenPHP/Caddy base image, /app/public,
  no ARG VERSION, fixed tag.
2026-06-29 19:32:35 +00:00
jcabillot b9ee6ab52b Merge pull request 'fix: migrate from jcabillot/phpapache to dunglas/frankenphp' (#22) from fix/frankenphp-migration into master
Main Release / hadolint (push) Successful in 10s
Main Release / test (push) Successful in 15s
Main Release / build (push) Successful in 11s
Main Release / tag (push) Successful in 34s
Tag Release / hadolint (push) Successful in 10s
Tag Release / test (push) Successful in 16s
Tag Release / build-push (push) Successful in 56s
Reviewed-on: #22
2026-06-29 08:54:45 -04:00
Sagent 7a5a53b3db fix: migrate from jcabillot/phpapache to dunglas/frankenphp
PR Checks / hadolint (pull_request) Successful in 9s
PR Checks / build-test (pull_request) Successful in 15s
2026-06-29 12:50:50 +00:00
jcabillot 7c780311e1 Merge pull request 'fix(ci): correct corrupted docker/login-action SHA (41 chars)' (#21) from fix/login-action-sha into master
Main Release / hadolint (push) Successful in 7s
Main Release / test (push) Successful in 14s
Main Release / build (push) Successful in 13s
Main Release / tag (push) Successful in 14s
Tag Release / hadolint (push) Successful in 8s
Tag Release / test (push) Successful in 15s
Tag Release / build-push (push) Successful in 47s
Reviewed-on: #21
2026-06-29 08:16:55 -04:00
cloudix_mcp_server eaa33a9d74 fix(ci): correct corrupted docker/login-action SHA (41 chars)
PR Checks / hadolint (pull_request) Successful in 11s
PR Checks / build-test (pull_request) Successful in 18s
Extra "f" character inserted at position 29 made the SHA 41 chars
instead of 40, causing "reference not found" on Gitea Actions runner.

Fixes CI run #2440 job #6174.
2026-06-29 12:13:57 +00:00
6 changed files with 24 additions and 25 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4 - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4
- uses: docker/login-action@650006c6eb7dba73a995cc03b0b2df7f5ca915bee # v4 - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
+1 -1
View File
@@ -28,7 +28,7 @@ jobs:
steps: steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
- uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4 - uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4
- uses: docker/login-action@650006c6eb7dba73a995cc03b0b2df7f5ca915bee # v4 - uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
+4 -3
View File
@@ -6,18 +6,19 @@ Lightweight PHP micro-service that returns the client's public IP address as JSO
## 2. Folder Structure ## 2. Folder Structure
- `root/`: Application source code served by Apache. - `root/`: Application source code served by FrankenPHP/Caddy.
- `index.php`: Single endpoint returning `REMOTE_ADDR` as JSON. - `index.php`: Single endpoint returning `REMOTE_ADDR` as JSON.
- `Caddyfile`: FrankenPHP/Caddy web server configuration — PHP handler on `:8080` with `try_files` + `php_server`.
- `.gitea/workflows/`: Gitea Actions CI pipelines. - `.gitea/workflows/`: Gitea Actions CI pipelines.
- `docker-build.yaml`: Build and push Docker image to Docker Hub on push/PR to master + daily cron. - `docker-build.yaml`: Build and push Docker image to Docker Hub on push/PR to master + daily cron.
- `Dockerfile`: Multi-stage build extending `jcabillot/phpapache` base image, copies `root/` into `/var/www/html`. - `Dockerfile`: Single-stage build from `dunglas/frankenphp:1-php8.5-alpine`, copies `root/` into `/app/public`.
- `.gitlab-ci.yml`: Legacy GitLab CI config (deprecated, replaced by Gitea Actions). - `.gitlab-ci.yml`: Legacy GitLab CI config (deprecated, replaced by Gitea Actions).
- `Jenkinsfile`: Legacy Jenkins pipeline (deprecated, replaced by Gitea Actions). - `Jenkinsfile`: Legacy Jenkins pipeline (deprecated, replaced by Gitea Actions).
## 3. Core Behaviors & Patterns ## 3. Core Behaviors & Patterns
- **Request/Response Flow**: Single PHP endpoint sets `Content-Type: application/json` header and returns `$_SERVER['REMOTE_ADDR']` encoded as JSON string. No routing, no framework, no state. - **Request/Response Flow**: Single PHP endpoint sets `Content-Type: application/json` header and returns `$_SERVER['REMOTE_ADDR']` encoded as JSON string. No routing, no framework, no state.
- **Container Base Image Pattern**: `Dockerfile` uses `ARG VERSION="latest"` to allow version pinning at build time, extends `jcabillot/phpapache` which provides PHP + Apache pre-configured. Application code is layered on top via `COPY root /var/www/html`. - **Container Base Image Pattern**: `Dockerfile` is a single-stage build from a fixed `dunglas/frankenphp:1-php8.5-alpine` tag (Alpine-based FrankenPHP with Caddy). No `ARG VERSION` — the tag is pinned, Renovate auto-detects it. Application code is layered via `COPY root /app/public`. FrankenPHP provides PHP + Caddy pre-configured.
- **Traefik IngressRoute with HTTPS Redirect**: Two IngressRoute resources handle traffic — `ip-websecure` serves HTTPS on the `websecure` entrypoint, `ip-web` catches HTTP on `web` entrypoint and applies a `redirectScheme` middleware for permanent HTTPS redirect. The Service reference in the HTTP IngressRoute is required by Traefik even though the middleware intercepts before reaching it. - **Traefik IngressRoute with HTTPS Redirect**: Two IngressRoute resources handle traffic — `ip-websecure` serves HTTPS on the `websecure` entrypoint, `ip-web` catches HTTP on `web` entrypoint and applies a `redirectScheme` middleware 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 `livenessProbe` and `readinessProbe` using `httpGet` on `/` at the named `http` port (8080). Kubernetes uses these to restart unhealthy pods and exclude unready pods from the Service endpoints. - **Health Probes**: Deployment defines both `livenessProbe` and `readinessProbe` using `httpGet` on `/` at the named `http` port (8080). Kubernetes uses these to restart unhealthy pods and exclude unready pods from the Service endpoints.
- **Security Hardening**: Pod spec sets `automountServiceAccountToken: false` to prevent unnecessary Kubernetes API access from the container. - **Security Hardening**: Pod spec sets `automountServiceAccountToken: false` to prevent unnecessary Kubernetes API access from the container.
+11
View File
@@ -0,0 +1,11 @@
{
auto_https off
frankenphp
}
:8080 {
root * /app/public
encode zstd br gzip
try_files {path} /index.php?{query}
php_server
}
+7 -3
View File
@@ -1,5 +1,9 @@
ARG VERSION="latest" FROM dunglas/frankenphp:1-php8.5-alpine
FROM "jcabillot/phpapache:${VERSION}"
LABEL maintainer="Julien Cabillot <dockerimages@cabillot.eu>" LABEL maintainer="Julien Cabillot <dockerimages@cabillot.eu>"
COPY "root" "/var/www/html" WORKDIR /app
COPY Caddyfile /etc/frankenphp/Caddyfile
COPY --chown=www-data:www-data root /app/public
USER www-data
-17
View File
@@ -1,17 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"customManagers": [
{
"customType": "regex",
"description": "Detect ARG VERSION pin for jcabillot/phpapache base image",
"managerFilePatterns": [
"/^Dockerfile$/"
],
"matchStrings": [
"ARG\\s+VERSION=\"(?<currentValue>[^\"]+)\""
],
"depNameTemplate": "jcabillot/phpapache",
"datasourceTemplate": "docker"
}
]
}