CentOS6 + nginx + PHP5.4 + MariaDB10 + WordPress + node.jsの環境を構築する手順をまとめ
CentOS-6.5-x86_64-minimalの環境にWordPressとREST APIの開発環境を構築するまでの手順を覚書。
環境: CentOS 6.5 x64
目次
- Firewallを設定
- nginxをYUM経由でインストール
- Remiリポジトリを追加してPHP5.4をインストール
- MySQLの代わりにMariaDBをインストール
- phpMyAdminをインストール
- WordPressをインストール
- REST API用にnode.jsをインストール
- REST API用にnginx設定ファイルを編集
1.Firewallを設定
ファイヤーウォール設定ツールをインストールして実行。
# yum install system-config-firewall-tui
# system-config-firewall-tui
開発用サーバーはsambaで共有するのでSELinuxを切っておく。
# vi /etc/sysconfig/selinux
SELINUX=disabled
# reboot
SELinuxの現在の動作モードを確認
# getenforce
2.nginxをYUM経由でインストール
前の記事を参考にCentOSのバージョンだけ変更。詳しくは公式ドキュメントを参考に。
# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
# yum update
# yum install nginx
自動起動設定
# /etc/rc.d/init.d/nginx start# chkconfig nginx on
3.Remiリポジトリを追加してPHP5.4をインストール
標準リポジトリはPHP5.3なのでRemiリポジトリを追加。
これも前の記事を参考にCentOSのバージョンだけ変更。wgetがなかったのでインストールしてから(curlでもいい)。
# yum install wget
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm remi-release-6.rpm
Remiリポジトリはデフォルトで有効にしておく。
# vi /etc/yum.repos.d/remi.repo
[remi]
enabled=1
PHP5.4をインストール
# yum update
# yum install php php-fpm php-devel php-cli php-xml php-mysqlnd php-mbstring php-gd php-mcrypt
「php-mysql」ではなく「php-mysqlnd」をインストールする。MariaDB 10はこちらでないと動かない。
自動起動設定
# /etc/rc.d/init.d/php-fpm start
# chkconfig php-fpm on
4.MySQLの代わりにMariaDBをインストール
これも前の記事を参考にCentOSのバージョンだけ変更。公式ドキュメントを参考に。
# vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
# yum update
# yum install MariaDB-server MariaDB-client
自動起動するように設定
# /etc/rc.d/init.d/mysql start
# chkconfig mysql on
初期設定スクリプトを実行。
# mysql_secure_installation
設定ファイルを編集してデフォルトの文字コードを指定。後々スマホアプリからの入力も受け付けるので「utf8mb4」にする。
# vi /etc/my.cnf.d/mysql-clients.cnf
[mysql]
default-character-set=utf8mb4
# vi /etc/my.cnf.d/server.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
default-storage-engine = MyISAM
ft_min_word_len = 1
max_connections = 500# Tuning
thread_handling = pool-of-threads
sort_buffer_size = 1MB
read_rnd_buffer_size = 1MB
join_buffer_size = 1MB
再起動
# /etc/rc.d/init.d/mysql restart
utf8mb4にするとvarcharのカラムにインデックスを付けられる文字数が変わり、MyISAMで最大250文字、InnoDBで最大191文字になる。無意味にvarchar(255)のカラムを作成しないようにする。
MySQL関連は下記サイトも参考に。
5.phpMyAdminをインストール
公式サイトからダウンロードして設置。
# cd /opt/httpdocs/
# yum install unzip
# unzip phpMyAdmin-4.2.0-english.zip
# mv phpMyAdmin-4.2.0-english phpmyadmin
nginxの設定ファイルを編集してアクセスできるように。
# vi /etc/nginx/conf.d/00_default.conf
server {
listen 80 default_server;
server_name _;root /opt/httpdocs;
index index.php index.html index.htm;
charset utf-8;
client_max_body_size 20M;location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
include fastcgi_params;
}location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx reload
「http://[IPアドレス]/phpmyadmin」でアクセス出来るはず。
開発用サーバーは外部に公開してないので、root用パスワードも設定ファイルに記述する。
# cd /opt/httpdocs/phpmyadmin/
# cp config.sample.inc.php config.inc.php
# vi config.inc.php
//$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'pass';
6.WordPressをインストール
ソースを公式サイトからダウンロードして設置。
# cd /opt/httpdocs/
# unzip wordpress-3.9.1.zip
WordPress用のデータベースをphpMyAdminで作成。
WordPress用のnginx設定ファイルを追加。「server_name」はhostsファイルに記述するとかして名前解決できるようにしておく。
# vi /etc/nginx/conf.d/01_wordpress.conf
server {
listen 80;
server_name wordpress.hoge.net;root /opt/httpdocs/wordpress;
index index.php index.html index.htm;
charset utf-8;
client_max_body_size 20M;location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
include fastcgi_params;
}location ~ /\. {
deny all;
access_log off;
log_not_found off;
}# if the file is not found, forwarded to index.php (permalinks)
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1 last;
}
}
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx reload
HTTP経由でアクセスしてインストール実行。
# chmod 777 wordpress/ wordpress/wp-content
http://wordpress.local/
# chmod 755 wordpress/ wordpress/wp-content
インストールした後にphpMyAdminでエクスポートして「utf8」を「utf8mb4」に置換してインポートする。
wp-config.phpを編集してutf8mb4にする。
# vi wordpress/wp-config.php
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_unicode_ci');
7.REST API用にnode.jsをインストール
nodejs実行用のユーザーを追加。
# useradd node
# passwd node
nginxの実行ユーザーと同じグループ「www」にする。
# groupadd www
# usermod -G www node
# usermod -G www nginx
変更されたか確認
# groups node
# groups nginx
このグループでWordPressのwp-contentに書き込み出来るようにする。
# cd /opt/httpdocs/wordpress/
# chown nginx.www -R wp-content/uploads
# chmod 775 -R wp-content/uploads
sessionの書き込みディレクトリの権限(/etc/php-fpm.d/www.confに記述)
# chown nginx.www -R /var/lib/php/session/
※ YUMでPHPが更新されたときに権限が変更されるので、毎回権限を変更し直す必要がある。
php-fpmの設定変更
# vi /etc/php-fpm.d/www.conf
user = nginx
group = www
nginxの設定変更
# vi /etc/nginx/nginx.conf
user nginx www;
再起動
# /etc/rc.d/init.d/nginx restart
# /etc/rc.d/init.d/php-fpm restart
権限周りはこれで完了。
次はnodeユーザーに切り替えてnode.jsをインストール。詳しくはnvm(Node Version Manager)を参考に。
# su - node
$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.7.0/install.sh | sh
ログインし直す。
# su - node
$ nvm ls-remote
$ nvm install v0.10.28
$ nvm alias default v0.10.28
とりあえずnode-devとnpmlistはインストールしておく。
$ npm install node-dev -g
$ npm install npmlist -g
< 2014/06/03 Modified >
「#su - node」したときに下記エラーが出る場合は
# yum install man
すると出なくなる。
-bash: manpath: command not found
8.REST API用にnginx設定ファイルを編集
スマホアプリからのアクセスはNode.jsで処理をするので、前の記事を参考にさっき作ったnginx設定ファイルにプロキシ設定を追記する。
# vi /etc/nginx/conf.d/01_wordpress.conf
server {
listen 80;
server_name wordpress.hoge.net;root /opt/httpdocs/wordpress;
index index.php index.html index.htm;
charset utf-8;
client_max_body_size 20M;location = /robots.txt { access_log off; log_not_found off; }
location = /favicon.ico { access_log off; log_not_found off; }location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
include fastcgi_params;
}location ~ /\. {
deny all;
access_log off;
log_not_found off;
}### Reverse Proxy for API
location /api/1/ {
rewrite ^/api/1/(.*)$ /$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:3000;
}### if the file is not found, forwarded to index.php (permalinks)
set $rewrite_flg "false";
if (!-e $request_filename) {
set $rewrite_flg "true";
}
if ($uri ~ "^/api/") {
set $rewrite_flg "false";
}
if ($rewrite_flg = "true") {
rewrite ^/(.*)$ /index.php?q=$1 last;
}
}
# /etc/rc.d/init.d/nginx configtest
# /etc/rc.d/init.d/nginx reload
Redisのインストールこちらの記事を参考に。
< Related Posts >