2014年5月21日水曜日

CentOS6 + nginx + PHP5.4 + MariaDB10 + WordPress + node.jsの環境を構築する手順をまとめ

CentOS6_platformCentOS-6.5-x86_64-minimalの環境にWordPressとREST APIの開発環境を構築するまでの手順を覚書。

環境: CentOS 6.5 x64

目次

  1. Firewallを設定
  2. nginxをYUM経由でインストール
  3. Remiリポジトリを追加してPHP5.4をインストール
  4. MySQLの代わりにMariaDBをインストール
  5. phpMyAdminをインストール
  6. WordPressをインストール
  7. REST API用にnode.jsをインストール
  8. 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 >

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

Blog Archives