CentOS8 + Nginx + PHP + MariaDB + Node.js + Certbotの環境を構築する手順まとめ

CentOS8の開発環境をセットアップしているときの覚書。

環境: Mac mini(Mid 2010), VMware Fusion 8.5.10, CentOS 8.1

インストールまでは前の記事を参考に。

epelリポジトリをインストールしておく。
# dnf install epel-release


1.nginxのインストール

nginxのモジュール一覧
# dnf module list nginx

mainlineのバージョン確認
# dnf module info nginx:mainline

最新のStableをインストール
# dnf module install nginx:1.16/common

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

CPU数の設定がautoになっているか確認
# less /etc/nginx/nginx.conf

GitLabから共通設定をcloneしておく(プライベートリポジトリです)。
# cd /etc/nginx/conf.d/
# git clone git@gitlab.com:dksg-settings/nginx-global.git global

nginx.confは前の記事のGistを参考に。
ユーザーグループ「www」を追加。
# groupadd www
# usermod -G www nginx

修正後、確認して反映させる。
# nginx -t
# systemctl reload nginx


2.PHPのインストール

phpのモジュール一覧
# dnf module list php

php7.3をインストール
# dnf module install php:7.3/common

その他のPHPモジュールをインストール
# dnf install php-mysqlnd php-gd

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

画像処理用にImageMagickをインストールするかは考え中。

実行ユーザーを変更する。
# less /etc/php-fpm.d/www.conf
user = nginx
group = www
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = www
listen.mode = 0660
アクセスがデフォルトでTCP PortからUnix socketになってた。
調べてみたらUnix socketの方が速いらしい。参考:TCP localhostとUnix Domain Socketはどちらが速いのか? - Qiita

nginxの設定を変更
# less /etc/nginx/conf.d/global/fastcgi_php.conf
fastcgi_pass unix:/run/php-fpm/www.sock;
再起動
# nginx -t
# systemctl reload nginx
# systemctl restart php-fpm

セッションの書き込みディレクトリ権限を変更。
# chown nginx.www -R /var/lib/php/*
※ PHP更新時に毎回変更しないといけないかは後日確認


3.MariaDBをインストール

MariaDBのモジュール一覧
# dnf module list mariadb

サーバーをインストール
# dnf module install mariadb/server

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

初期設定スクリプトを実行
# mysql_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_unicode_ci
thread_handling = pool-of-threads
max_connections = 500

# Tuning
key_buffer_size = 128M
sort_buffer_size = 1M
read_rnd_buffer_size = 1M
query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 80M

再起動
# systemctl restart mariadb

確認
# mysql -u root -p
MariaDB [(none)]> show variables like "chara%";


4.Node.jsをインストール

Nodejsのモジュール一覧
# dnf module list nodejs

EPELと名前が被っている。
AppStremからインストールする。名前は/etc/yum.repos.d/を参照。
# dnf module install nodejs:12/common --disablerepo epel-modular



5.phpMyAdminをインストール

Git cloneすると1GBぐらい消費するので、ダウンロードして設置する。
# cd /home/httpd/httpdocs
# curl -O https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-english.tar.gz
# tar -xzvf phpMyAdmin-5.0.2-english.tar.gz
# mv phpMyAdmin-5.0.2-english phpMyAdmin
# rm phpMyAdmin-5.0.2-english.tar.gz

nginxの設定
# cd /etc/nginx/conf.d/

余計なconfファイルを移動
# mkdir bak
# mv php-fpm.conf bak/

公開する場所を指定する設定ファイルを作る。
# vi 00_default.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/global/fastcgi_php.conf;
        client_max_body_size 20M;
    }

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

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


6.certbotをインストール

リポジトリで配信されているか確認
# dnf search certbot
# dnf info certbot

EPELリポジトリからインストール
# dnf install certbot
Error:
 Problem: package certbot-1.3.0-3.el8.noarch requires python3-certbot = 1.3.0-3.el8, but none of the providers can be installed
  - conflicting requests
  - nothing provides python3-mock needed by python3-certbot-1.3.0-3.el8.noarch
  - nothing provides python3.6dist(mock) needed by python3-certbot-1.3.0-3.el8.noarch

python3-virtualenvをインストールすればいいという情報があった(参考:ssl - Install Certbot in Red Hat Enterprise Linux 8 manually - Server Fault
インストールしてみる。
# dnf install python36
# dnf install python3-virtualenv
# dnf install certbot

同じエラー。
python3-mockが見つからないから?
検索すると「CentOS PowerTools」にあるのを見つけた。
# dnf install certbot --enablerepo=PowerTools

無事インストール完了。

nginxのSSL設定用にdhparam.pemを作る。
詳しくは前の記事(NginxのSSL/TLS設定を見直す(2019年版))を参考に。
10分くらい掛かる。
# openssl dhparam -out /etc/ssl/dhparam.pem 4096


【関連記事】