はじめに
みなさんこんにちはcandleです。今回はskeletonを使用してwordpressを開発している時に、それを本番環境でどう使うかを試してみたいと思います。
本番環境はローカルのvagrantのcentos6.5で試してみたいと思います。
デプロイツールはfabricを使用します。
前提
wordpress skeletonの環境が構築できている。
fabricとcuisineが入っている
centosの環境を作る
centos6.5のboxを追加します。
vagrant box add centos65 http://www.lyricalsoftware.com/downloads/centos65.box
私はホームディレクトリにvagrantフォルダを作っているので、そこでwordpressフォルダを作成します。
cd vagrant mkdir wordpress cd wordpress
wordpressフォルダの中で、vagrantを作成します。
vagrant init centos65
Vagrantfileができるので、それを開いて、ipアドレスの所をコメントインします。
vagrantは1.7.1ぐらいから鍵をそれぞれのvmが独自で持つようになりましたが、設定がめんどうなので、共通の鍵を使う設定を記述します。
config.ssh.insert_key = false
保存したら、vagrant upコマンドで起動します。
vagrant up
vagrant sshでログインしたら、まずはyumをupdateします。
vagrant ssh sudo yum -y update
これで、vagrantのセットアップは完了しました。
phpをインストールする
wordpressはphp,mysql,nginxで動くので、まずはphpから入れます。
sudo yum install -y php php-mysql php-fpm
そしたら、php-fpmのデーモンをオンにします。
php-fpmは私の感じではnginxでphpを動かす時に頑張っているものです。
sudo chkconfig php-fpm on
phpのインストールが完了しました。
composerをインストールする
composerはphpのパッケージを管理するコマンドです。これをインストールしましょう。
curl -sS https://getcomposer.org/installer | php
composer.pharというのがそれです。
これをusrのlocal binに移動します。
sudo mv composer.phar /usr/local/bin/composer
これでcomposerと入力するだけで使用できます。
mysqlをインストールする
mysqlをインストールします。
sudo yum install -y mysql-server
インストールできたら、mysqlサーバーを起動します
sudo service mysqld start
これもphp-fpmと同じようにデーモンをオンにして、サーバの起動時に自動的に立ち上がるようにします。
sudo chkconfig mysqld on
mysqlのインストールがおわりました。
nginxをインストールする
centosのnginxパッケージはバージョンが古いので、別のnginxのレポジトリを加えます。
sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
インストールします。
sudo yum -y install nginx
nginxを起動します。
sudo service nginx start
nginxをデーモンで起動するようにします。
sudo chkconfig nginx on
これで大方のサーバーの構築はできました。
wordpress skeletonをfabricでデプロイする
今、ローカルの任意の場所にwordpress skeletonプロジェクトがあります。
私の場合はホームディレクトリのapache/alice_blogがそれです。
まずはfafile.pyを作成します。
touch fabfile.py
共通設定
以下の共通設定を記述します。
必ずcuisineをインストールしておいてください。
#encoding:utf-8 from fabric.api import env, settings,local,run,sudo,cd from fabric.colors import * from fabric.decorators import task,roles from fabric.contrib.files import * from cuisine import mode_sudo, select_package,package_ensure, dir_exists,file_append,file_exists,command_check,text_replace_line from fabric.contrib.project import rsync_project from os import environ #使用するグローバル変数 BASH_FILE = '~/.bash_profile' #サーバのIPアドレス。 #ローカルでやる場合はプライベートIPアドレス #env.hosts = "191.168.2.1" #ユーザー名 #env.user = "ec2-user" #パスワード認証の場合はそのPCのパスワードを #env.password ="vagrant" #公開鍵認証の場合は秘密鍵のパス #env.key_filename = "~/.ssh/hoge.pem" #vagrant環境でやる場合は下をコメントイン env.key_filename = '~/.vagrant.d/insecure_private_key' env.port=2222 env.hosts = ['127.0.0.1'] env.user = "vagrant" env.password ="vagrant" app_name = "alice_blog"
説明は省きますが、いずれもfabricの基本的なところです。
deploy関数を作る
それではデプロイ関数を作ります。
@task def deploy(composer=False): output = rsync_project( local_dir = '../'+app_name, remote_dir = '/usr/share/nginx/', exclude = ['.envrc','.git','local-config.php','wp','composer.phar','composer.lock','vendor','fabfile.py','fabfile.pyc'], delete = True, capture = True, extra_opts="--rsync-path='sudo rsync'" ) sudo("chown vagrant:nginx -R /usr/share/nginx/"+app_name) if composer: with cd("/usr/share/nginx/"+app_name): if not file_exists("composer.lock"): run("composer install") else: run("composer update") sudo("chown nginx:vagrant -R /usr/share/nginx/"+app_name)
rsync_project関数は任意のフォルダをサーバーと共有します。excludeで共有したくない項目を指定します。
chownではvagrantにユーザー権限をnginxにグループ権限を付与します。
if文でcomposerという値をみて、Trueならcomposerコマンドを打ち込みます。composerはcomposer.lockがない場合はinstallでlockがあればupdateにします。
では初回のデプロイを行います。
初回はcomposerを使わないのでの、以下のようにします。
fab deploy
サーバー側に移動して、/usr/share/nginxに移動してみるとalice_blogフォルダができています。
cd /usr/share/nginx
mysqlサーバ設定
プロジェクトがアップロードできたので、データベース周りをやります。
まずは本番用のデータベースを作ることです。ログインして、データベースを作ります。
mysql -u root -p
CREATE DATABASE alice_blog CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL ON alice_blog.* TO 'alice'@'localhost' IDENTIFIED BY '87654321';
本番のalice_blogディレクトリに移動します。
cd /usr/share/nginx/alice_blog
ここで、local-config.phpを作成します。
場合によっては権限がないかもしれないから以下を実行する。
sudo chown -R ec2-user:nginx /usr/share/nginx/alice_blog touch local-config.php
作成したファイルに以下を追加します。
<?php define('DB_NAME', 'alice_blog'); define('DB_USER', 'alice'); define('DB_PASSWORD', '87654321'); define('DB_HOST', 'localhost'); define('WP_POST_REVISIONS', 3); define('WP_DEBUG', false);
保存しましょう。
nginxの設定
次にnginxのconfファイルを作成します。/etc/nginx/conf.d/に移動します。
cd /etc/nginx/conf.d/
alice_blog.confを作成します。
sudo touch alice_blog.conf
alice_blog.confに以下を記述します。
server { listen 80; server_name alice_blog.com; root /usr/share/nginx/alice_blog/wp; charset utf-8; index index.php; access_log /var/log/nginx/alice.access.log; error_log /var/log/nginx/alice.error.log; error_page 404 /404.html; location = /40x.html {} error_page 500 502 503 504 /50x.html; location = /50x.html {} location / { if (-f $request_filename) { expires 30d; break; } if (!-e $request_filename) { rewrite ^.+?(/wp-.*) $1 last; rewrite ^.+?(/.*\.php)$ $1 last; rewrite ^ /index.php last; } location ~* ^.+.(jpg|jpeg|gif|png|css|js|flv|swf|ico|xml)$ { access_log off; expires 30d; root /usr/share/nginx/alice_blog/wp; } } location ~ \.php$ { #fastcgi_pass phpfpm; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
保存して、nginxサーバを再起動します。
sudo service nginx restart
そしたら、fabricの方に戻って、composerを含めてデプロイします。
fab deploy:True
後はブラザでアクセスしてみましょう。vagrantに割り当てた192.168.33.10にアクセスすれば、
言語選択画面が出てきます。これでデプロイできました。
運用についてコメント
composer.jsonにwordpressのプラグインを追加したら、以下のコマンドでデプロイをし、
fab deploy:True
テーマを編集したら、以下のコマンドでデプロイすると反映されます
fab deploy
まとめ
fabricの使いやすさは目を見張るものがあります。wordpressのデプロイなのに、gitやshellでデプロイしたらと思うと想像するだけで大変です。