CentOS6.7にNginx+PHP5.6+MySQLの環境を作ってWordpressの引っ越しをする
PRTIMESエンジニアの深川です。
リファクタリングの季節、春ですね。PRTIMESでもサーバのリファクタリングということで社内で運用しているサイトの棚卸しの実施中。 利用状況や現状の構成をレビューして、必要があればサーバの移行を進めています。
中でも、 * Wordpressで運用しているサイト * PHP&Apache&MySQLの構成 * チューニング次第でサーバリソースの要求水準は高くない
このようなサイトは複数あるので、今回移行にあわせて、PHPのバージョンを5.6にしつつ、 WEBサーバをApacheからNginxに切替えています。
今回はその辺りの手順を公開してみます。
本来ならプロビジョニングツールで一括!となりますが、 自動化の前に手続きを確認ということで、今回はコマンドベースでの手順の公開です。
クラウドコンピューティングのイラスト | 無料イラスト かわいいフリー素材集 いらすとや
■移行における作業項目の今回の対象範囲
WordPressで運用しているサイトの移行となると、必要そうな手順をざっくり書いてみます。
- サーバの確保
- 移行先検討
- 契約
- サーバ構築
- アカウントの作成
- 運用ユーザ作成
- MySQLユーザ作成
- リソースの転送
- WordPressソース一式
- DBのデータ
- 動作テスト
- サイト
- 管理機能
- プラグイン周り
- ドメイン
- DNSレコード更新
- 旧サイト転送対応
で、今回の記事で対象にする部分はこちらです。
サーバの確保-
移行先検討 -
契約
-
- サーバ構築
アカウントの作成-
運用ユーザ作成*MySQLユーザ作成
-
- リソースの転送
- WordPressソース一式
- DBのデータ
動作テスト-
サイト -
管理機能 -
プラグイン周り
-
ドメイン-
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によるプロビジョニング対応しておきたいところです。