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.3built with OpenSSL 3.2.2 4 Jun 2024 (running with OpenSSL 3.5.1 1 Jul 2025)TLS SNI support enabledconfigure 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 GroupZend Engine v4.3.19, Copyright (c) Zend Technologieswith 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 = nginxgroup = wwwlisten.owner = nginxlisten.group = wwwlisten.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 = utf8mb4collation-server = utf8mb4_general_cithread_handling = pool-of-threadsmax_connections = 100# Tuningperformance_schema = ONskip-name-resolvesort_buffer_size = 4Mquery_cache_size = 256Mquery_cache_limit = 4Mtable_open_cache = 10Ktable_definition_cache = 2Ktmp_table_size = 128Mmax_heap_table_size = 128M# InnoDBinnodb_buffer_pool_size = 512Minnodb_log_buffer_size = 128Minnodb_ft_min_token_size = 2 # Fulltext Indexinnodb_ft_num_word_optimize = 4000 # Fulltext Indexinnodb_ft_enable_stopword = OFF # Fulltext Indexinnodb_ft_cache_size = 16M # Fulltext Index# MyISAM/Ariakey_buffer_size = 256Kmyisam_sort_buffer_size = 256Karia_sort_buffer_size = 256Karia_pagecache_buffer_size = 256K# Slow Queryslow_query_log = ONlong_query_time = 1log_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.sockmysqli.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.jpmydomain = hoge.co.jpmyorigin = $mydomaininet_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.dicversion: 102charset: utf8type: 0size: 392126left size: 1316right 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.inimecabmecab.default_dicdir => no value => no valuemecab.default_rcfile => no value => no valuemecab.default_userdic => no value => no valuePWD => /home/software/php-mecab/mecabOLDPWD => /home/software/php-mecab$_SERVER['PWD'] => /home/software/php-mecab/mecab$_SERVER['OLDPWD'] => /home/software/php-mecab
PHPから実行してみて確認する。