LoginSignup
1
0

Apache2 on Docker + php-fpm on Docker

Last updated at Posted at 2023-05-05

当研究室のシステム

概要

ソケット経由でApache2 on Dockerのコンテナとphp-fpm on Dockerのコンテナを一緒に動かす.

前提

  • Apache2 on Dockerを設定
    • ~/Docker/www/以下にDockerfile
  • php-fpm on Dockerを設定
    • ~/Docker/php-fpm/以下にDockerfile
  • SSL/TLS接続の場合: 443ポート使用の場合のみ考慮
    • 80使わないので

設定

apache2については,Apache2 on Dockerが出来ているところから開始,差分を説明.

apache2

~/Docker/www/Dockerfileにてproxy_fcgisetenvifのモジュールを有効化,またphpモジュールの無効化.
phpモジュールはコンテナの中に入って/etc/apache2/mods-enableの中を見て名前を確認(自分はphp8.1だった).

~/Docker/www/Dockerfile
...
    /usr/sbin/a2dismod php8.1 && \ # /usr/sbin/a2enconf fqdn && \ の後にでも追加
    /usr/sbin/a2enmod proxy_fcgi && \
    /usr/sbin/a2enmod setenvif && \
...

~/Docker/www/sites-available/default-ssl.confにphp-fpm用の設定を追記.
以下のSetHandler...の行を追記している.

~/Docker/www/sites-available/default-ssl.conf
...
                <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
                                SSLOptions +StdEnvVars
                </FilesMatch>
...

docker-compose.ymlの準備

~/Docker/docker-compose.ymlを準備.wwwphp-fpmの両方を起動するので,それぞれのディレクトリの上に配置している.

~/Docker/docker-compose.yml
version: '3.9'

services:
  www:
    build: ./www
    image: nek/www:latest
    container_name: www
    hostname: www
    ports:
      - 443:443
    restart: always
    depends_on:
      - php-fpm
    volumes:
      - www_data:/var/www
      - socket:/var/run/php-fpm

  php-fpm:
    build: ./php-fpm
    image: nek/php-fpm:latest
    container_name: php-fpm
    hostname: php-fpm
    restart: always
    volumes:
      - www_data:/var/www
      - socket:/var/run/php-fpm
      - /etc/group:/etc/group:ro
      - /etc/passwd:/etc/passwd:ro

volumes:
  socket:
  www_data:
    driver_opts:
      type: nfs
      o: "port=2049,addr=192.168.0.2,rw,nfsvers=4"
      device: ":/apache2/www"

ビルド&起動

docker compose up -d --build

運用

起動

docker compose up -dを実行するディレクトリに注意.~/Docker/docker-compose.ymlを起動するのでそのディレクトリとなる.

cd ~/Docker
docker compose up -d

DocumentRoot(/var/www/html)に以下のファイルを置いて,ブラウザでアクセスし ServerAPIがFastCGIになってたらオッケー.

my_php_test.php
<?php phpinfo(); ?>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0