RockyLinux9.4におけるPHPの開発環境構築


# 環境の構築

## この記事をまとめるに至った背景

開発環境を作成することはよくあると思いますが、久しぶりに構築してみると忘れていることもあったりして、思い通りにいかないこともあります。時間をかけて解決することも重要なのですが、時間をかけるべき場所は別にあるので、あまり手間取るのはよくないと思います。内容をきちんと理解しておくのは当然ですが、ケアレスミスで時間を無駄にすることがないようにまとめておこうと思います。

## 注意事項

あくまでも開発環境（自身のPC上）の構築となります。セキュリティの設定などがかなり甘いので、ご注意ください。

## 前提条件

- ホスト
    - Windows10 Home
    - Hyper-V


- ゲスト
    - Rocky Linux 9.4


- ゲストOSはインストール済みの状態

## 今回のゴール

- 新規インストールした直後のRocky Linuxに、PHPの動作環境を構築する
    - PHPのバージョン: 8.0
    - nginxのバージョン: 1.24

## 初回ログイン

- ユーザーの追加
```
# useradd rocky
# passwd rocky
```

- 追加ユーザーで接続
    - パッケージの更新
```
$ sudo dnf update
$ sudo yum install -y epel-release
$ sudo yum update -y
$ sudo yum install -y vim
```

- nginxのインストール
``` 
$ sudo yum install -y @nginx:1.24
```

- phpのインストール
```
$ sudo yum install -y php php-fpm
```

- php-fpmの設定を変更
```
$ sudo vim /etc/php-fpm.d/www.conf
$ sudo diff /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.bak
24,25c24
< ;user = apache
< user = nginx
---
> user = apache
27,28c26
< ;group = apache
< group = nginx
---
> group = apache
263,264c261
< ;access.log = log/www.access.log
< access.log = /var/log/php-fpm/www-access.log
---
> ;access.log = log/$pool.access.log
324d320
< access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{HTTP_HOST}e %{REQUEST_URI}e %q %{seconds}d %{kilo}M %C%% %{HTTP_REFERER}e"
```

- nginx, php-fpmの起動
```
$ sudo systemctl enable php-fpm
$ sudo systemctl enable nginx

$ sudo systemctl start php-fpm
$ sudo systemctl start nginx
```

- 外部からhttpリクエストを受け付けるようにする
```
$ sudo firewall-cmd --get-active-zones
public
  interfaces: eth0

$ sudo firewall-cmd --list-all --zone public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

$ sudo firewall-cmd --add-service http --zone public
$ sudo firewall-cmd --add-service http --zone public --permanent
$ sudo firewall-cmd --list-all --zone public
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client http ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

- ホスト側からテストページを確認
  - ブラウザから http://[VMのIP] でアクセスする

## VirtualHostの追加

- nginxの設定ファイルを変更する
```
$ sudo vim /etc/nginx/nginx.conf
#    server {
#        listen       80;
#        listen       [::]:80;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#    }

    server {
        listen       80;
        listen       [::]:80;
        root         /var/www/html;

        location ~ \.php$ {
              root         /var/www/html;
              fastcgi_pass unix:/run/php-fpm/www.sock;
              fastcgi_index  index.php;
              include         fastcgi_params;
              fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
              fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
        }
    }
```

- nginxの設定に間違いがないかを確認し、再起動する
```
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

$ sudo systemctl restart nginx
```

## PHPファイルを置いて動作確認を行う

- /var/www/html に確認用のphpファイルを配置する

- ホスト側から、アクセスする
  - hostsに test.me を追加して、名前付きのURLでアクセスする

## まとめ

ここまでで、最低限のphp動作環境を構築できました。
必要に応じて、mysqlの追加や、必要なモジュールの追加などを行っていきます。