podman で Caddy + CakePHP5 を動かす
前回の続きです。php-fpm コンテナに CakePHP5 をインストールできたのでいよいよ CaddyServer を入れます。
目的の構成
一旦、今回 podman で建てようとしているコンテナとポートの構成を説明しておきます。
- CaddyServer ホストポート:8080 > コンテナポート:80
- php-fpm ホストポート: – > コンテナポート:9000
- MariaDB ホストポート:3306 > コンテナポート:3306
- ./html フォルダを作り CaddyServer と php-fpm からそれぞれリンクする
手順
Caddy コンテナ
Caddyfile を作成します。 / で CakePHP をホストする場合はシンプルです。
$ mkdir conf
$ vi conf/Caddyfile
:80 {
# Set this path to your site's directory.
root * /usr/share/caddy/app/webroot
encode gzip
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
php_fastcgi localhost:9000
# log
}
最初 /app などのサブディレクトリでホストしようとしましたが、参考リンクによるとサブディレクトリでホストするのは難しいらしいのでそうそうにあきらめました。
$ podman run --name caddy -p 8080:80/tcp \
-v ./conf/Caddyfile:/etc/caddy/Caddyfile \
-v ./html:/usr/share/caddy \
caddy:latest
ここまでで MariaDB、Caddy、php−fpm の3つのコンテナが揃いました。podman 的には kubernetes の yaml ファイルにしろってことなので簡単に生成するために、podman-desktop で pod を作ります。
そのまま pod を yaml に吐き出したものを少し修正します。修正した結果はこんな感じです。
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-3.4.4
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2024-04-29T05:49:28Z"
labels:
app: caddy-pod
name: caddy-pod
spec:
containers:
- args:
- mariadbd
image: docker.io/library/mariadb:11.3
name: maria
ports:
- containerPort: 3306
hostPort: 3306
- containerPort: 80
hostPort: 8080
resources: {}
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
volumeMounts:
- mountPath: /var/lib/mysql
name: maria-data
- image: docker.io/library/caddy:latest
name: caddy
resources: {}
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
volumeMounts:
- mountPath: /etc/caddy/Caddyfile
name: caddy-file
- mountPath: /usr/share/caddy
name: html-caddy
- args:
- php-fpm
image: localhost/my-php:latest
name: php
resources: {}
securityContext:
capabilities:
drop:
- CAP_MKNOD
- CAP_NET_RAW
- CAP_AUDIT_WRITE
volumeMounts:
- mountPath: /usr/share/caddy
name: html-fpm
- mountPath: /usr/local/etc/php/php-fpm.conf
name: fpm-conf
- mountPath: /usr/local/etc/php/php.ini
name: php-ini
restartPolicy: Never
volumes:
- hostPath:
path: /opt/ws/podman-caddy/maria/data
type: Directory
name: maria-data
- hostPath:
path: /opt/ws/podman-caddy/conf/Caddyfile
type: File
name: caddy-file
- hostPath:
path: /opt/ws/podman-caddy/html
type: Directory
name: html-caddy
- hostPath:
path: /opt/ws/podman-caddy/html
type: Directory
name: html-fpm
- hostPath:
path: /opt/ws/podman-caddy/php-fpm/php/php-fpm.conf
type: File
name: fpm-conf
- hostPath:
path: /opt/ws/podman-caddy/php-fpm/php/php.ini-development
type: File
name: php-ini
status: {}
この yaml ファイルで pod を起動してみます。
$ podman play kube caddy-pod.yaml
localhost:8080 にブラウザアクセスしてみます。

MariaDB との接続がまだできていませんが、動作するところまで到達しました。