Podmanで PHP-8.2 FPM + Nginx 環境構築

Tech > 各種技術情報

AlomaLinux 8 で環境を作成しましたがRedHat系のOSならどれも一緒だと思います

Podman関連のインストール

# dnf module install -y container-tools
# dnf install -y dnsmasq

dockerコマンドのエミュレートパッケージを入れておく

# dnf install -y podman-docker.noarch

PHP-8.2 FPMイメージの作成

develbox/docker-php-fpm から取得する

# git clone https://github.com/devilbox/docker-php-fpm-8.2.git

ビルド

イメージをビルドするため開発系パッケージを入れる

# dnf install -y make

イメージをビルドする、完了後にイメージが登録されるのでユーザー権限は必要に応じて設定してください、ビルド時のオプションもあるのでMakefileを参照してください

# cd docker-php-fpm-8.2
# make build TAG=php-fpm82 ARCH=linux/amd64
################################################################################
# Building devilbox/php-fpm-8.2:php-fpm82 (platform: linux/amd64)
################################################################################
docker build \
         \
         \
        $( if [ -n "" ]; then echo "--target "; fi; ) \
        --network host \
        --platform linux/amd64 \
        --label "org.opencontainers.image.created"="$(date --rfc-3339=s)" \
        --label "org.opencontainers.image.revision"="$(git rev-parse HEAD)" \
        --label "org.opencontainers.image.name"="PHP" \
        --label "org.opencontainers.image.version"="8.2" \
        --tag devilbox/php-fpm-8.2:php-fpm82 \
        --file Dockerfiles/Dockerfile Dockerfiles
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
STEP 1/27: FROM debian:bullseye-slim
Resolved "debian" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/debian:bullseye-slim...
...
...
STEP 26/27: LABEL "org.opencontainers.image.name"="PHP"
--> c10db5b37a3
STEP 27/27: LABEL "org.opencontainers.image.version"="8.2"
COMMIT devilbox/php-fpm-8.2:php-fpm82
--> 44b3ada602e
[Warning] one or more build args were not consumed: [TARGETARCH TARGETOS TARGETPLATFORM]
Successfully tagged localhost/devilbox/php-fpm-8.2:php-fpm82
44b3ada602e0f2ec6070627e96a7e2b902bd32f0fd05a5fedbfbc3690b683c11

作成されたイメージを確認

[root@alma8-dev docker-php-fpm-8.2]# podman images
REPOSITORY                      TAG            IMAGE ID      CREATED         SIZE
localhost/devilbox/php-fpm-8.2  php-fpm82      44b3ada602e0  10 minutes ago  475 MB
docker.io/library/debian        bullseye-slim  a36a86fb63b1  9 days ago      84 MB

ワークディレクトリ作成

ユーザー権限でPHPスクリプトを修正することができる想定でユーザーディレクトリしたへワークディレクトリを作成、PHPやnginxの設定も適当にいじりたいので、ホスト側へ volume で永続化する

[user@alma8-dev ~]$ pwd
/home/user
[user@alma8-dev ~]$ mkdir container
[user@alma8-dev ~]$ mkdir -p container/html
[user@alma8-dev ~]$ mkdir -p container/etc/php
[user@alma8-dev ~]$ mkdir -p container/etc/nginx/conf.d
項番 ファイル 備考
1 etc.tar PHPの設定、/home/user/container/etc/php へ展開
2 nginx.tar nginxの設定、/home/user/container/etc/nginx/conf.d へ展開

最終的に展開したtreeは以下の通り

[user@alma8-dev ~]$ tree container/
container/
├── etc
│   ├── nginx
│   │   └── conf.d
│   │       └── default.conf・・・修正
│   └── php・・・以下そのまま配置
│       ├── pear.conf
│       ├── php
│       │   ├── conf.d
│       │   │   └── docker-php-ext-sodium.ini
│       │   ├── php.ini
│       │   ├── php.ini-development
│       │   └── php.ini-production
│       ├── php-fpm.conf
│       ├── php-fpm.conf.default
│       └── php-fpm.d
│           ├── docker.conf
│           ├── www.conf
│           ├── www.conf.default
│           └── zz-docker.conf
└── html
    └── index.php・・・作成

index.phpを書いておく

echo '<?php phpinfo();' > container/html/index.php

ngxinの設定を書き換える

ポート9000で動作しているPHP FPMへ接続するため default.conf の設定を少々いじる

server {
    listen 80;
    server_name localhost;
    root /var/www/html;

    location / {
        try_files $uri $uri/ /index.php?$uri&$args;
        index index.php index.html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # fastcgi_pass    localhost:9000;
        fastcgi_pass    php82:9000;

        include         fastcgi_params;
       
        # ※1    
        # fastcgi_param   PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
 }

fastcgi_pass のところを php82:9000 にする

今回のケースだとloaclhostでも動作するようですが、Podの作りによっては内部IPなどにする必要もあるかもしれません

ポート 80:80 などでホストした場合に以下のエラーが発生する

 "Primary script unknown" while reading response header from upstream,...

エラーが発生する、その場合は fastcgi_param パラメータを調整する、 default.conf 内 ※1 参照

コンテナを作成する

面倒なので rootful で作成していく

Pod作成

利用するポートを指定して作成する

[root@alma8-dev ~]# podman pod create --name websrv -p 80:80 -p 9000:9000
451ac60b015c6102b409483fcc0aa80bbc9f81a31f9f2471587a662bb0b2a853

php-fpm82作成

先ほどビルドしたイメージから作成

[root@alma8-dev ~]# podman run -d --name php82 --pod websrv -v /home/user/container/etc/php/:/usr/local/etc/ -v /home/user/container/html/:/var/www/html localhost/devilbox/php-fpm-8.2:php-fpm82
799c2fdd2ba225ad361753cb83783fe3690630630bfb5b84b152c3edd98f3718

nginx作成

[root@alma8-dev ~]# podman run -d --name nginx --pod websrv -v /home/user/container/etc/nginx/conf.d:/etc/nginx/conf.d -v /home/user/container/html:/var/www/html docker.io/library/nginx
Trying to pull docker.io/library/nginx:latest...
 Getting image source signatures
Copying blob 7e9b29976cce done  
...
...
Writing manifest to image destination
Storing signatures
4becf59ba434fd2cfbd9e4d7c25c2e0fda38604797c6b97fd6204d81a87afe4d

動作確認

Podが動作しているか確認

[root@alma8-dev ~]# podman pod ps
POD ID        NAME        STATUS      CREATED        INFRA ID      # OF CONTAINERS
451ac60b015c  websrv      Running     7 minutes ago  e9f018f7f521  3

コンテナの確認

[root@alma8-dev ~]# podman ps
e9f018f7f521  localhost/podman-pause:4.2.0-1673541578                         7 minutes ago  Up 6 minutes ago  0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp  451ac60b015c-infra
799c2fdd2ba2  localhost/devilbox/php-fpm-8.2:php-fpm82  php-fpm               6 minutes ago  Up 6 minutes ago  0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp  php82
bf32e48709bb  docker.io/library/nginx:latest            nginx -g daemon o...  4 minutes ago  Up 4 minutes ago  0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp  nginx

http://localhost/ へアクセスしてみる

Server APIが FPM/FatCGI であることを確認する、以上でございます

Posted on 2023-02-18 20:28:43

はじめまして

お茶の国静岡で、焼酎のお茶割なんか罰当たりで飲んだことはありません、常に一番搾りを嗜む静岡極東のBBQerです、最近まわりのエンジニアの方々がお料理を上手にやっている姿を恨めしそうに横目に見ながら、軟骨ピリ辛チクワを食べています、みなさんよろしく。

Posted

Amazon

tags

家系 日本酒池 広井酒店 やがら やっぱた 刺身 丸干し 鯵 東京マラソン fpm php82 servant thread spawn Rust Oracle Linux 8 microcode firmware linux openzfs zfs gitea 麒麟 真野鶴 金鶴 日本酒 docker oracle pod podman cli virtualbox VirtualBox epub mobi calibre mask lens ワンライナー php 海 redmine Linux Oracle Map OMap omap map 夏 BBQ カテゴリ管理 カテゴリ timestamp date oracle database string 麦焼酎 ダービー process 磨き蒸留 広井酒店、日本酒 芋焼酎 酒 焼酎 ゆるキャン 広井酒店、日本酒池 spring framework java persistent spring session session spring hdbc-odbc persistent-odbc odbc day utctime スィート レマンの森 elm初期化 elm バイク xlr80 esqueleto database xl2tpd strongswan vpn l2tp ipsec 正月 ゲーム grub nginx systemctl portage 豚骨 圧力鍋 yesod-auth-hashdb yesod-auth