PR TIMESデザイナー&エンジニアブログ BREAK TIMES

PR TIMES Developer Blog(デザイナー&エンジニアによる開発者ブログ)

PR TIMES Developer Blog

当ブログは下記URLに移転しました。
https://developers.prtimes.jp/

CentOS6.7にNginx+PHP5.6+MySQLの環境を作ってWordpressの引っ越しをする

PRTIMESエンジニアの深川です。

リファクタリングの季節、春ですね。PRTIMESでもサーバのリファクタリングということで社内で運用しているサイトの棚卸しの実施中。 利用状況や現状の構成をレビューして、必要があればサーバの移行を進めています。

中でも、 * Wordpressで運用しているサイト * PHP&Apache&MySQLの構成 * チューニング次第でサーバリソースの要求水準は高くない

このようなサイトは複数あるので、今回移行にあわせて、PHPのバージョンを5.6にしつつ、 WEBサーバをApacheからNginxに切替えています。

今回はその辺りの手順を公開してみます。

本来ならプロビジョニングツールで一括!となりますが、 自動化の前に手続きを確認ということで、今回はコマンドベースでの手順の公開です。

f:id:breaktimes:20160323175834p:plain クラウドコンピューティングのイラスト | 無料イラスト かわいいフリー素材集 いらすとや


■移行における作業項目の今回の対象範囲

WordPressで運用しているサイトの移行となると、必要そうな手順をざっくり書いてみます。

  • サーバの確保
    • 移行先検討
    • 契約
  • サーバ構築
    • PHPインストール
    • MySQLインストール
    • PHP-fpmインストール
    • Nginxインストール
  • アカウントの作成
    • 運用ユーザ作成
    • MySQLユーザ作成
  • リソースの転送
  • 動作テスト
  • ドメイン
    • DNSレコード更新
    • 旧サイト転送対応

で、今回の記事で対象にする部分はこちらです。

  • サーバの確保
    • 移行先検討
    • 契約
  • サーバ構築
    • PHPインストール
    • MySQLインストール
    • PHP-fpmインストール
    • Nginxインストール
  • アカウントの作成
    • 運用ユーザ作成 * MySQLユーザ作成
  • リソースの転送
  • 動作テスト
  • ドメイン
    • DNSレコード更新
    • 旧サイト転送対応

■サーバ構築

PHPインストール

リポジトリの追加

PHP5.6をインストールするために、epelとremiのリポジトリを追加

% sudo rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
% sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

インストール

% sudo yum install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof

PHP設定変更

phpの設定を変更。コメントアウトとしている部分は5.6では非推奨となる項目なので、該当する設定が適用されていたら、対象行をコメントアウト

% sudo vim /etc/php.ini 
default_charset = "UTF-8"
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.language = Japanese
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
MySQLインストール

インストール

% sudo yum -y --enablerepo=remi install mysql-server

初期化スクリプトを実行

% sudo mysql_install_db --datadir=/var/lib/mysql --user=mysql

起動、自動起動設定

% sudo /etc/init.d/mysqld start
% sudo chkconfig mysqld on

セキュリティ設定スクリプトを実行(基本すべてYで)

% sudo mysql_secure_installation
PHP-fpmインストール

インストール

% sudo yum install --enablerepo=remi --enablerepo=remi-php56  php-fpm

設定ファイル編集

% sudo vim /etc/php-fpm.d/www.conf 
user = nginx
group = nginx

起動、自動起動設定

% sudo service php-fpm start
% sudo chkconfig php-fpm on
□Nginxインストール

インストール

% sudo yum -y install nginx

設定ファイル(ファイル名は任意で)

% /etc/nginx/conf.d/wp.conf
server {
  listen 80;
  server_name wp.jp; # 取得したドメインを指定してください
  root /var/www/wp;
  index index.php;

  # 以下、パーマリンク対応
  # URL デフォルトのリンクから変更した場合
  location / {
    try_files $uri $uri/ @wordpress;
  }

  # index.php などの.phpでのアクセス
  location ~ \.php$ {
    try_files $uri @wordpress;
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME  /var/www/wp$fastcgi_script_name;
    include       fastcgi_params;
  }

  # 階層型URLのパーマリンクでアクセスされた場合
  location @wordpress {
    fastcgi_index index.php;
    fastcgi_split_path_info ^(.+\.php)(.*)$;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME  /var/www/wp/index.php;
    include       fastcgi_params;
  }  
}
% sudo nginx -t
% sudo service nginx reload

■リソースの転送

WordPressソース一式

(移行元サーバでの作業)wordpress一式が/var/www/wp/にある想定で、移行先サーバに転送します。

sudo rsync -av -e ssh /var/www/wp 移行先サーバユーザ名@移行先サーバホスト名:/var/www/isuta/

※ 今回は雑にまとめて転送していますが、ファイル容量次第では転送量と時間が大変なことになるので、 ソースはgitなどで管理している場合は、移行先サーバの該当ディレクトリに先にgit cloneしておくと良いかもれしません

□DBのデータ

(移行元サーバでの作業)MySQLバックアップ

mysqldump --single-transaction -u (wordpressデータベースユーザ名) -p (wordpressデータベース名)  > wp_db.dmp

バックアップしたファイルを移行先サーバに転送後に(移行先サーバでの作業)MySQLリストア

mysql -u (wordpressデータベースユーザ名) -p (wordpressデータベース名) < wp_db.dmp

簡単となりますが、以上です。

似たような構成のサイトを複数あって、個々に手動で対応するのは面倒で手作業のミスも発生するので、 構築の作業と可能な範囲のリソース配置はAnsibleやChefによるプロビジョニング対応しておきたいところです。