CentOS Stream 10 + Nginx + PHP8.3 + MariaDBの仮想マシンを構築する手順まとめ(2025年版)

Mac mini 2024を購入して、VMware Fusionの仮想マシンとしてCentOS Stream 10の開発環境を構築しているときの覚書。
旧Mac mini 2018とCPUのアーキテクチャが違うので仮想マシンを作り直さなければならない。

環境: Mac mini 2024, VMware Fusion 13.6.3, CentOS Stream 10 ARM64版

OSインストールするまでは前の記事を参考に。
記事とは違い「Software Selection: Minimal」で構築した。
参考: CentOS Stream 10を仮想マシンにインストールして初期設定

カーネルのバージョン表示。
# uname -a

Linux vm-dev4.hoge.co.jp 6.12.0-116.el10.aarch64 #1 SMP PREEMPT_DYNAMIC Fri Aug  1 22:25:48 UTC 2025 aarch64 GNU/Linux


1. Nginxのインストール

検索してインストール。
# dnf search nginx
# dnf install nginx

ビルドオプションを確認。
# nginx -V

nginx version: nginx/1.26.3
built with OpenSSL 3.2.2 4 Jun 2024 (running with OpenSSL 3.5.1 1 Jul 2025)
TLS SNI support enabled
configure arguments:
 --prefix=/usr/share/nginx
 --sbin-path=/usr/sbin/nginx
 --modules-path=/usr/lib64/nginx/modules
 --conf-path=/etc/nginx/nginx.conf
 --error-log-path=/var/log/nginx/error.log
 --http-log-path=/var/log/nginx/access.log
...
 --pid-path=/run/nginx.pid
 --lock-path=/run/lock/subsys/nginx
 --user=nginx
 --group=nginx
...
 --with-http_v2_module
 --with-http_v3_module
 --with-openssl-opt=enable-ktls
...

グループwwwがあるか確認。
# less /etc/group

nginxはwwwに所属させる。
# groups nginx
# usermod -G www nginx
# groups nginx

nginxの設定変更。
# less /etc/nginx/nginx.conf

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx www;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
}

nginx起動、自動起動ON、確認
# systemctl start nginx
# systemctl enable nginx
# systemctl list-unit-files -t service | grep nginx

旧サーバーからconfファイル一覧をコピーしてくる。
# cd /etc/nginx/
# tar xzvf conf.tgz
# rm -f conf.tgz

testして再読み込み。
# nginx -t
# systemctl reload nginx



2. PHPのインストール

検索してインストール。
このサーバーはmecabをビルドするのでphp-develもインストールする。
# dnf search php
# dnf install php php-fpm php-mysqlnd php-gd php-pecl-zip php-devel

バージョン確認。
# php --version

PHP 8.3.19 (cli) (built: Mar 12 2025 13:10:27) (NTS gcc aarch64)
Copyright (c) The PHP Group
Zend Engine v4.3.19, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.19, Copyright (c), by Zend Technologies

PHPのビルドオプションを確認(見やすく整形する)。
# php-config --configure-options | tr ' ' '\n'

...
--with-config-file-scan-dir=/etc/php.d
...
--without-mysqli
--disable-pdo
--without-gd
--disable-dom
--disable-dba
--without-unixODBC
--disable-opcache
--disable-phpdbg
--without-ffi
--disable-xmlreader
--disable-xmlwriter
--without-sodium
--without-sqlite3
--disable-phar
--disable-fileinfo
--without-pspell
--without-curl
--disable-posix
--disable-xml
--disable-simplexml
--disable-exif
--without-gettext
--without-iconv
--disable-ftp
--without-bz2
...

php-fpmの実行ユーザーを変更する。
aclはコメントアウト(そのままだとWARNINGが表示される)。
unix socketで通信するか確認する。
# less /etc/php-fpm.d/www.conf

user = nginx
group = www
listen.owner = nginx
listen.group = www
listen.mode = 0660
;listen.acl_users = apache,nginx

タイムゾーンを設定する。
# less /etc/php.ini

date.timezone = "Asia/Tokyo"

php-fpmを起動。
# systemctl start php-fpm
# systemctl enable php-fpm

セッションの書き込みディレクトリ権限を変更。
# chown nginx:www -R /var/lib/php/*

※ PHP更新時に毎回変更しないといけない(?後日確認)

timezoneが変わっているか確認。
# php -r 'echo date("Y/m/d H:i");'


開発環境向けはOPcacheを設定する。
OPcacheが読み込まれているか確認。
# php --ini

設定ファイル編集。
# less /etc/php.d/10-opcache.ini

; ファイルのタイムスタンプ(更新日時)をチェックして、
; 変更があった場合にキャッシュを更新するようにします。
; 本番環境ではパフォーマンスのために 0 (無効) にすることが多いです。
opcache.validate_timestamps=1

; タイムスタンプをチェックする頻度(秒)。
; 開発中は即時反映させたいので「0」に設定します。
; これにより、リクエスト毎にファイルの更新をチェックします。
; デフォルトは 2 (秒) なので、何もしないと最大2秒間は変更が反映されません。
opcache.revalidate_freq=0

php-fpm再起動。
# systemctl restart php-fpm

ちなみにOPcacheのキャッシュはクリアするときはreloadかrestartを行う。
# systemctl reload php-fpm


3. MariaDBをインストール

検索してインストール。
# dnf search mariadb
# dnf info mariadb-server
# dnf install mariadb-server

バージョン確認。
# mariadb --version

mariadb  Ver 15.1 Distrib 10.11.11-MariaDB, for Linux (aarch64) using  EditLine wrapper

mariadb起動、自動起動ON、確認
# systemctl start mariadb
# systemctl status mariadb
# systemctl enable mariadb
# systemctl list-unit-files -t service | grep mariadb

初期設定スクリプトを実行
# mariadb-secure-installation

デフォルトの文字コードを「utf8mb4」にする。とりあえずのチューニング設定も。
# less /etc/my.cnf.d/mysql-clients.cnf

[mysql]
default-character-set=utf8mb4

# less /etc/my.cnf.d/mariadb-server.cnf

[server]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
thread_handling = pool-of-threads
max_connections = 100

# Tuning
performance_schema = ON
skip-name-resolve

sort_buffer_size = 4M
query_cache_size = 256M
query_cache_limit = 4M

table_open_cache = 10K
table_definition_cache = 2K
tmp_table_size = 128M
max_heap_table_size = 128M

# InnoDB
innodb_buffer_pool_size = 512M
innodb_log_buffer_size = 128M
innodb_ft_min_token_size = 2       # Fulltext Index
innodb_ft_num_word_optimize = 4000 # Fulltext Index
innodb_ft_enable_stopword = OFF    # Fulltext Index
innodb_ft_cache_size = 16M         # Fulltext Index

# MyISAM/Aria
key_buffer_size = 256K
myisam_sort_buffer_size = 256K
aria_sort_buffer_size = 256K
aria_pagecache_buffer_size = 256K

# Slow Query
slow_query_log = ON
long_query_time = 1
log_output = TABLE

再起動して確認。
# systemctl restart mariadb
# mariadb -u root -p
MariaDB [(none)]> show variables like "chara%";
MariaDB [(none)]> quit;

Unix socketを使って通信するように変更する。
まずは待ち受けポートを確認するツールをインストール。
# dnf install net-tools

待ち受けしているポートを確認。
# ss -ltpn

稼働しているMariaDBのUnix socketの場所確認。
# mysql -u root -p -e "SHOW VARIABLES LIKE 'socket';"

+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| socket        | /var/lib/mysql/mysql.sock |
+---------------+---------------------------+

# less /etc/my.cnf.d/mariadb-server.cnf

socket=/var/lib/mysql/mysql.sock

待ち受けポートは閉じる。MariaDBの設定を変更。
(skip-bind-addressは不要)
# less /etc/my.cnf.d/mariadb-server.cnf

[server]
# TCP/IP接続機能を完全に無効化
skip-networking

再起動して確認。
# systemctl restart mariadb
# ss -ltpn

PHPからのアクセスはUnix socketを参照するように変更。
# less /etc/php.ini

pdo_mysql.default_socket=/var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock

php-fpmを再起動。
# systemctl restart php-fpm

phpMyAdminでデータとユーザーをエクスポート/インポート。


4. Postfixをインストール

検索してインストール。
# dnf search postfix
# dnf install postfix

設定変更。
# less /etc/postfix/main.cf

myhostname = vm-dev4.hoge.co.jp
mydomain = hoge.co.jp
myorigin = $mydomain
inet_interfaces = localhost

Postfix起動、自動起動ON、確認
# systemctl start postfix
# systemctl status postfix
# systemctl enable postfix
# systemctl list-unit-files -t service | grep postfix


5. php-mecabをビルドしてインストール。

形態素解析「Mecab」をインストール。
# dnf install mecab mecab-devel mecab-ipadic

確認。
# mecab -D

filename:       /usr/lib64/mecab/dic/ipadic/sys.dic
version:        102
charset:        utf8
type:   0
size:   392126
left size:      1316
right size:     1316

# whereis mecab-config

mecab-config: /usr/bin/mecab-config


php-mecabをビルド。

長くメンテナンスをされているリポジトリを探してgit cloneする。
参考: nihongodera/php-mecab: MeCab binding for PHP

# cd /home/software/
# git clone https://github.com/nihongodera/php-mecab.git
# cd php-mecab/

ビルド実行。
# cd mecab/
# phpize
# ./configure --with-mecab=/usr/bin/mecab-config
# make
# make test
# make install

Installing shared extensions:     /usr/lib64/php/modules/

# echo "extension=mecab.so" > /etc/php.d/mecab.ini

php-fpmを再起動して確認。
# systemctl restart php-fpm
# php -i | grep mecab

/etc/php.d/mecab.ini
mecab
mecab.default_dicdir => no value => no value
mecab.default_rcfile => no value => no value
mecab.default_userdic => no value => no value
PWD => /home/software/php-mecab/mecab
OLDPWD => /home/software/php-mecab
$_SERVER['PWD'] => /home/software/php-mecab/mecab
$_SERVER['OLDPWD'] => /home/software/php-mecab

PHPから実行してみて確認する。


▼ 関連記事