CentOS7 + Nginx + PHP7 + MariaDB + Node.jsの環境を構築する手順まとめ

CentOS6_platformカゴヤ・クラウド/VPSを借りて最小構成から環境構築したときの覚書。
CentOS6をセットアップしたときの記事を参考に

目次
  1. 初期設定
  2. nginxをインストール
  3. PHP7をインストール
  4. MariaDBをインストール
  5. phpMyAdminをインストール
  6. Node.jsをインストール
  7. postfix + DKIM(送信ドメイン認証)をインストール
  8. cronをインストール


1.初期設定

前の記事を参考に
このときの記事から変えたこと。
  • VPS上で時刻合わせは出来ないらしい。
    # yum remove chrony
  • SELinuxはgetenforceコマンドがなかったので飛ばした

< 2019/01/20 追記 >
前と変わっていたので別記事にした。



2.nginxをインストール

公式ドキュメントに従ってYUMリポジトリを追加
# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
# yum install nginx
起動、自動起動ON、確認
# systemctl start nginx
# systemctl enable nginx
# systemctl list-unit-files -t service | grep nginx

前の記事を参考にCPU数に合わせて設定する


3.PHP7をインストール

remiリポジトリのphp7を編集
# less /etc/yum.repos.d/remi-php70.repo
[remi-php70]
enabled=1
インストール
# yum install php php-fpm php-devel php-cli php-mysqlnd php-mbstring php-gd php-mcrypt
起動、自動起動ON、確認
# systemctl start php-fpm
# systemctl enable php-fpm
# systemctl list-unit-files -t service | grep php-fpm

画像変換はphp-gdではなくImageMagickを使うのでremiリポジトリの最新版をインストール
# yum install ImageMagick-last
確認
# convert --version
Version: ImageMagick 6.9.3-7 Q16 x86_64 2016-03-07 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc jbig jng jpeg lcms ltdl lzma openexr pangocairo png ps rsvg tiff webp wmf x xml zlib
PHPのImageMagick用エクステンションをインストール
# yum install php-pecl-imagick
確認
# systemctl restart php-fpm
# php -i | grep imagick



4.MariaDBをインストール

公式ドキュメントを参考に
Downloads | MariaDB
ページ一番上の「repository configuration tool.」からCentOS7用のYUMリポジトリを選択する。
リポジトリ追加
# vi /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.1 CentOS repository list - created 2016-04-07 10:30 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
# yum install MariaDB-server MariaDB-client
起動、自動起動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/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


5.phpMyAdminをインストール

公式サイトからダウンロード。
# mkdir /home/httpd
# mkdir /home/httpd/httpdocs
# cd /home/httpd/httpdocs
# curl -O https://files.phpmyadmin.net/phpMyAdmin/4.6.0/phpMyAdmin-4.6.0-english.tar.gz

展開
# tar -xzvf phpMyAdmin-4.6.0-english.tar.gz
# mv phpMyAdmin-4.6.0-english phpMyAdmin
# rm phpMyAdmin-4.6.0-english.tar.gz

nginx設定
# cd /etc/nginx/conf.d/
# mv default.conf 00_default.conf
# rm example_ssl.conf

共通の設定ファイルを作る
# mkdir global
# vi global/fastcgi_php.conf

#
# PHP-FPM
#
if (!-f $document_root$fastcgi_script_name) {
    return 404;
}
# This is a robust solution for path info security issue and works with "cgi.fix_pathinfo = 1" in /etc/php.ini (default)
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_intercept_errors on;
# vi 00_default.conf
server {
    listen       80;
    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;
    }
}
configtestしてnginx再起動
# nginx -t
# systemctl restart nginx
ブラウザでアクセスしてみる。
http://111.222.333.444/phpMyAdmin/
「Variables」のタブでさっき設定した値が反映されているか確認


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

nodeユーザー追加
# useradd node
# passwd node

nginxの実行ユーザーと同じグループ「www」にする。
# groupadd www
# usermod -G www node
# usermod -G www nginx

確認
# groups node
# groups nginx

セッションの書き込みディレクトリ権限を変更。
# chown nginx.www -R /var/lib/php/
※ YUMでPHPが更新されたときに権限が変更されるので、毎回権限を変更し直す必要がある。

php-fpmとnginxの設定変更。実行ユーザーをnginx、グループをwwwにする。
# less /etc/php-fpm.d/www.conf
user = nginx
group = www
# less /etc/nginx/nginx.conf
user  nginx www;
再起動
# nginx -t
# systemctl restart nginx
# systemctl restart php-fpm


nvmを使ってNode.jsのインストール。
# su - node
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

ログインし直してインストール。
# su - node
$ nvm ls-remote
$ nvm install v4.4.2
$ nvm alias default v4.4.2

npmをアップデート
$ npm update -g
前の記事を参考によく使うパッケージをインストールするシェルスクリプトを作成
$ vi npm-global.sh
#! /bin/sh
# Install Node Packages
npm install -g grunt-cli node-dev pm2 npmlist
# Show Installed List
echo
echo 'Completed!!'
echo
npm -g list --depth=0
権限を追加して実行
$ chmod +x npm-global.sh
$ ./npm-global.sh



7.postfix + DKIM(送信ドメイン認証)をインストール

メール送信するための設定。postfixをインストール。
# yum install postfix
# vi /etc/postfix/main.cf

myhostname = www.webserver.com
mydomain = webserver.com
myorigin = $mydomain
inet_interfaces = localhost
mydestination = localhost.$mydomain, localhost
起動、自動起動、確認
# systemctl start postfix
# systemctl enable postfix
# systemctl list-unit-files -t service | grep postfix

DKIMは前の記事を参考に
SPF(Sender Policy Framework)レコードの設定も忘れずに。
mailxをインストールして送信してみる。
# yum install mailx
# mail hoge@gmail.com

ログを確認する。/var/log/maillogに保存されなくなったみたい
# journalctl -u postfix
DKIMを監視しながらメール送信するとき
# journalctl -f -u opendkim
ちなみにGoogle Domainsを使っている場合は下記のようにTXTレコードを設定する
image
最後にGmailで表示される鍵マークに対応する(暗号化)
# less /etc/postfix/main.cf
#
# SMTP TLS
#
smtp_tls_CAfile = /etc/pki/tls/cert.pem
smtp_tls_security_level = may
smtp_tls_loglevel = 1
# systemctl restart postfix


8.cronをインストール

インストールされているか確認
# yum list installed | grep cron
インストール
# yum install cronie
サービス(デーモン)として登録されているか確認
# systemctl list-unit-files -t service
一時間ごとにWordPressのcronを実行するようにする場合
# vi /etc/cron.d/wordpress-cron
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
# Excute WordPress WP_Cron
0 */1 * * * nginx curl https://hoge.com/wp-cron.php > /dev/null 2>&1
起動
# systemctl start crond
ログ確認
# journalctl -u crond
実行したコマンドログが出ないので直接確認
# journalctl | grep wp-cron

< Related Posts >