2016年4月8日金曜日

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コマンドがなかったので飛ばした

 


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をインストール

公式ドキュメントを参考にリポジトリ追加
# 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 >

コメントを投稿
Related Posts Plugin for WordPress, Blogger...

Blog Archives