Docker上でAmazonLinux2023にApache2とPHP8とXdebugを動かす。

嗚呼キャンプ行きたい❗️ハワイ🌺もいいな。
「ワイハでバカンス」ってここに響く〜染み渡る〜嗚呼行きたいって思う今日この頃です。
IT技術で荒稼ぎしたいです。でも日本の法律をよく守り、公序良俗に添い、品行方正で、ダンディーに行きたいです。
大人ですがアダルトはお断りしています。ぼくにとって女性は尊厳の対象です。
基本みんなが尊敬の対象。だからあなたのことも尊重します。

さて、
Amazon Linux 2023をDockerに載せてApache2とPHP8を動かしXdebugの起動のところまで持って行けたので共有します。

結論から言うと、amazonlinux2023 は Apache2 でのPHPモジュール動作をデフォルトで止めてますね。
これをしたかったんですが、できませんでした。

で、Apache2 に PHP-FPM を組み合わせて動作させるための方法を紹介します。
とっても簡単です！にも関わらずドキュメントがどこにもない❗️
う〜んどういうことだ。

おかげで気分は逃避行動✈️ハワイへ飛んで行ってます。
嗚呼、もっと稼ぎたいし、このインフレの中でモリモリマックが欲しいんです。（銀のやつです。黄色のじゃないです）

# 前提：Dockerで動かす。
Docker上で動かすことになるので、systemctl は使えません。いや、特権モードにすれば使えるんだけど、やっぱり使いません。

まずは必要なサービス一式をインストールできるように

#### Dockerfile
```Dockerfile
dnf -y update
dnf -y install wget \
    tar \
    gzip \
    gcc \
    make \
    procps \
    which \
    git \
    autoconf \
    httpd \
    httpd-devel \
    bison \
    re2c \
    vim \
    libxml2-devel \
    libcurl-devel \
    libpng-devel \
    libjpeg-devel \
    libicu-devel \
    libxslt-devel \
    readline-devel \
    libedit-devel \
    libzip-devel \
    sqlite-devel \
    bzip2-devel \
    oniguruma-devel

# PHPをインストール
## この記事を書いた時点ではPHP8.2が最新でしたので、これでPHP8.2がインストールされました。
dnf install -y php php-fpm php-mbstring php-mysqlnd php-pdo php-xml php-gd php-curl php-pear php-devel php-bcmath

# xdebugをインストール
RUN pecl install xdebug

# PHP動作確認ファイル
WORKDIR /var/www/html
RUN echo "<?php phpinfo(); " > ./index.php

# php-fpm 起動設定
## 本来パーミッションは慎重に考慮すべきです。あなたのセキュリーティーポリシーに基づいて制限してね。
WORKDIR /run
RUN mkdir php-fpm
RUN chmod 777 php-fpm

# .bashrc
RUN echo "export PS1='\[\033[37m\][\t \[\033[36m\]\u\[\033[37m\]@\h \[\033[32m\]\W\[\033[37m\]]$ '" > ~/.bashrc

# ポート80を開放します
EXPOSE 80

# Apacheをバックグラウンド起動
## どうもこれでは初回の自動起動はしないようなので下記に追記あります
RUN php-fpm -R
RUN httpd -k start
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

```
これでイメージファイルの基本定義ができました。
以下を実行して、イメージファイルを拵えてもらいます。

```bash
docker build -t php82xdebugOnal23 .
```
一連のインストールが完了しイメージファイルが出来上がったようなら確認をしましょう。
```bash
docker images
REPOSITORY        TAG      IMAGE ID       CREATED        SIZE
php82xdebugOnal23 latest   1df5b80dxxxx   2 hours ago    859MB
```
多分こんな感じで出力されているはず

続いて`docker-compse.yml`を描きます。
```yaml
version: "3"
services:
  web:
    image: php82xdebugOnal23:latest
    ports:
      - 8080:80
    container_name: web
    restart: always
    command: bash -c "exec httpd -DFOREGROUND"
    volumes:
      - /Users/yourpc/docker-data:/var/docker-data

```
これで起動します。
```bash
docker-compose up -d
```
起動させても、きっとウェブサーバーは動いていないはず。`php.ini`を修正しましょう。
ウェブサーバーにログインして起動コマンドを叩きましょう。
```bash
docker exec -it web bash
```
### `php.ini`ファイルに加筆修正
```bash
vi /etc/php.ini
```

以下の情報をファイルの最後に加筆してください。
```vim
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.start_with_request=yes
```


上記の設定のままならログインするとこんな感じです。
```bash
[09:11:43 root@53921fe28866 run]$ 
```
起動コマンドは以下。
```bash
php-fpm -R
httpd -k start
```
これで動き始めました。ありがとうございました！


【もしかしたらこんなエラーが】
```
bash$ php-fpm -R
ERROR: unable to bind listening socket for address '/run/php-fpm/www.sock': No such file or directory (2)
ERROR: FPM initialization failed
bash$
```
となりましたら、`/run/php-fpm/`ディレクトリがないかもしれません。
```
$ cd /run
$ mkdir php-fpm
$ chmod 777 php-fpm
```
本来は**パーミッションは慎重に考慮する必要**があります。が、Dockerで急ぎ動かすためなんで、とりあえず。

ps.
記事の一部にChatGPT4から技術支援を受けました。もちろん動作検証しています。AL2023の情報は持っていないので何度かやり取りする必要がありましたが、xdebugの設定は一発でした。これはこれで使えるので引き続き、支援を受けながら充実させる予定。