FreeBSD + Nginx + PHP + MariaDBの環境を構築

ローカルの仮想マシンにウェブ開発環境を設定しているときの覚書。
初期設定は前の記事を参考に。
参考: FreeBSD13.1の仮想マシンをインストールして初期設定

環境: FreeBSD 14.0

OSのバージョン確認
# freebsd-version

14.0-RELEASE-p6

インストール済みのパッケージ情報を表示。
# pkg info

自動起動するサービスはbsdconfigが一覧で分かりやすい。
# bsdconfig


1.nginxのインストール

公式リポジトリを検索。
# pkg search nginx

インストールしてconfの場所などビルドオプション確認。
# pkg install nginx
# nginx -V

nginx version: nginx/1.24.0
built with OpenSSL 3.0.12 24 Oct 2023
TLS SNI support enabled
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --user=www --group=www ...

自動起動ON、起動、確認。
# service nginx enable
# service nginx start
# service nginx status

設定ファイルを編集。
# cd /usr/local/etc/nginx/
# less nginx.conf

worker_processes  auto;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;

    include /usr/local/etc/nginx/conf.d/*.conf;
}

conf.dを作る。
# mkdir conf.d

testしてnginx再起動。
# nginx -t
# service nginx restart


2. php8.3をインストール

pkg経由でインストール。
php-fpmとmysqlndはデフォルトでバンドルされていた。
php83-filterとphp83-mysqliはphpMyAdminのために必要。
(phpMyAdmin6.0からはmysqlndを使うらしい)
php83-pharはwp-cliを実行するのに必要。
# pkg search php8
# pkg install php83 php83-curl php83-filter php83-gd php83-mbstring php83-mysqli php83-session php83-xml php83-zip php83-phar

確認。
# php --version
# php-fpm --version

PHP 8.3.6 (fpm-fcgi) (built: Apr 18 2024 01:11:07)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies

ビルドオプションも確認。
# php-config --configure-options

--disable-all 
--program-prefix= 
--with-config-file-scan-dir=/usr/local/etc/php 
--with-layout=GNU 
--with-libxml 
--with-openssl 
--with-password-argon2=/usr/local 
--enable-dtrace 
--enable-embed 
--enable-fpm 
--with-fpm-group=www 
--with-fpm-user=www 
--enable-mysqlnd 
--with-external-pcre=/usr/local 
--prefix=/usr/local 
--localstatedir=/var 
--mandir=/usr/local/share/man 
--infodir=/usr/local/share/info/ 
...

phpinfoも確認(mysqlndがインストールされているか)。
# php -i | less

読み込まれているiniファイルを確認。
# php --ini

Loaded Configuration File:         (none)

iniファイルが読み込まれてないのでiniファイルを作る。
このサーバーは開発用なのでphp.ini-developmentをコピーする。
# cd /usr/local/etc
# cp php.ini-development php.ini

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

date.timezone = "Asia/Tokyo"

読み込まれているか確認して現在時刻を確認。
# php --ini
# php -r 'echo date("Y/m/d H:i");'

php-fpmをUnix socketでlistenする。
# less php-fpm.d/www.conf

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock 
listen.owner = www
listen.group = www
listen.mode = 0660

php-fpmの自動起動ON、起動、確認。
# service php-fpm enable
# service php-fpm start
# service php-fpm status

FreeBSDではセッションの置き場所を設定しないといけないみたい。
# mkdir /var/tmp/php
# mkdir /var/tmp/php/session
# chown -R www:www /var/tmp/php

CentOSにならってwww.confに設定。
# less php-fpm.d/www.conf

php_value[session.save_path] = /var/tmp/php/session

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


3. MariaDBをインストール

MariaDBを検索してインストール。
# pkg search mariadb
# pkg install mariadb1011-server

設定確認、service名確認、自動起動ON、起動。
# mariadb-config
# ls /usr/local/etc/rc.d/
# service mysql-server enable 
# service mysql-server start
# service mysql-server status

初期設定スクリプトを実行。
# mysql_secure_installation

文字コードを確認する。
# mariadb -u root -p
root@localhost [(none)]> show variables like "chara%";

+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8mb3                          |
| character_set_connection | utf8mb3                          |
| character_set_database   | latin1                           |
| character_set_filesystem | binary                           |
| character_set_results    | utf8mb3                          |
| character_set_server     | latin1                           |
| character_set_system     | utf8mb3                          |
| character_sets_dir       | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+

utf8mb3からutf8mb4へ変更する。
root@localhost [(none)]> quit
# less /usr/local/etc/mysql/conf.d/server.cnf

[server]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

# less /usr/local/etc/mysql/conf.d/mysql-clients.cnf

[mysql]
default-character-set=utf8mb4

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


4. phpMyAdminをインストール

pkgからインストールするか迷ったけど、公式サイトから最新版をダウンロードする。
いつものウェブサーバー用置き場所を作るところから。
# mkdir /home/httpd
# mkdir /home/httpd/httpdocs
# cd /home/httpd/httpdocs/
# curl -O https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-english.tar.gz
# tar xzvf phpMyAdmin-5.2.1-english.tar.gz
# mv phpMyAdmin-5.2.1-english phpMyAdmin
# rm phpMyAdmin-5.2.1-english.tar.gz

configファイル編集
# cd phpMyAdmin
# cp config.sample.inc.php config.inc.php
# less config.inc.php

$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = false;

$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = 'pass';
$cfg['Servers'][$i]['auth_type']     = 'config';

host名をlocalhostから127.0.0.1に変更してtcpコネクションにしないとエラーになった。

tmpディレクトリを作る。
# mkdir tmp
# chmod 777 tmp/

nginxの設定ファイルを作る。
# cd /usr/local/etc/nginx/conf.d/
# vi 01_phpMyAdmin.conf

server {
    listen       80 default_server;
    server_name  _;

    root    /home/httpd/httpdocs;
    index   index.php index.html index.htm;
    charset utf-8;

    location = /robots.txt  { access_log off; log_not_found off; }
    location = /favicon.ico { access_log off; log_not_found off; }

    location ~* \.php$ {
        include conf.d/include/fastcgi_php.inc;
        client_max_body_size 20M;
    }

    location ~ /\. {
        deny  all;
        access_log off;
        log_not_found off;
    }
}

共通設定ファイルをgit cloneする。
# git clone git@gitlab.com:settings/nginx-global.git include

nginx再読み込み。
# service nginx reload

ブラウザでアクセスして確認する。



【関連記事】