joppot

コピペで絶対動く。説明を妥協しない

サーバ

wordpress skeletonをnginx の本番環境でfabricを使って運用してみる

投稿日:2016年1月10日 更新日:

Pocket

skeleton_wordpres_top_thumb

はじめに

みなさんこんにちはcandleです。今回はskeletonを使用してwordpressを開発している時に、それを本番環境でどう使うかを試してみたいと思います。

本番環境はローカルのvagrantのcentos6.5で試してみたいと思います。
デプロイツールはfabricを使用します。

前提

wordpress skeletonの環境が構築できている。
fabricとcuisineが入っている

SPONSORED LINK


centosの環境を作る

centos6.5のboxを追加します。

vagrant box add centos65  http://www.lyricalsoftware.com/downloads/centos65.box

私はホームディレクトリにvagrantフォルダを作っているので、そこでwordpressフォルダを作成します。

cd vagrant
mkdir wordpress
cd wordpress

mkdir_wordpress

wordpressフォルダの中で、vagrantを作成します。

vagrant init centos65

Vagrantfileができるので、それを開いて、ipアドレスの所をコメントインします。

vagrant_ip_setting

vagrantは1.7.1ぐらいから鍵をそれぞれのvmが独自で持つようになりましたが、設定がめんどうなので、共通の鍵を使う設定を記述します。

config.ssh.insert_key = false

vagrant_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

curl_composer_install

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がそれです。

check_alice_skeleton_pro

まずはfafile.pyを作成します。

touch fabfile.py

make_fabfile

共通設定

以下の共通設定を記述します。
必ず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の基本的なところです。

fabfile_config

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

fab_deploy_test

サーバー側に移動して、/usr/share/nginxに移動してみるとalice_blogフォルダができています。

cd /usr/share/nginx

cdusrsharengix

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';

create_alice_blog_db

本番の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

local_config_php_file

作成したファイルに以下を追加します。

<?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

conf_d_and_make_alice_blog

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

desploy_with_composer_install

後はブラザでアクセスしてみましょう。vagrantに割り当てた192.168.33.10にアクセスすれば、
言語選択画面が出てきます。これでデプロイできました。
awesome_wordpress_startup

運用についてコメント

composer.jsonにwordpressのプラグインを追加したら、以下のコマンドでデプロイをし、

fab deploy:True

テーマを編集したら、以下のコマンドでデプロイすると反映されます

fab deploy


まとめ

fabricの使いやすさは目を見張るものがあります。wordpressのデプロイなのに、gitやshellでデプロイしたらと思うと想像するだけで大変です。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ
-, , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

fluentdのs3 pluginを使用して日付区切りでログデータをS3に送信する

概要 みなさんこんにちはcandleです。今回はfluentdのs3プラグインを使用して、railsなどのログを日単位でS3に投げる方法を紹介します。もちろん、応用して年単位とか月単位、時間単位で区切 …

td-agentでRails 5のproduction.logを取得する

English 日本語 概要 みなさんこんにちはcandleです。 今回はrails 5のproduction ログをtd-agentで取得してみたいと思います。 rails5からログのフォーマットが …

td-agent-uiのセットアップとfluent-catで動作確認

English 日本語 概要 みなさんこんにちはcandleです。今回はtd-agent-uiのセットアップと動作確認をしてみたいと思います。 td-agentはfluentdをよりサーバで運用しやす …

ec2のメモリ状態をwatchとfreeで監視する

English 日本語 概要 みなさんこんにちはcandleです。今回はec2のメモリをリアルタイムで監視する方法を紹介します。 ec2サーバはt2.microだとメモリが1GBしかなく、その上でco …

wordpress skeletonを使った開発環境の構築

はじめに みなさんこんにちはcandleです。wordpressは大変便利なのですが、いまいちgitで管理するのが難しいものです。 というのも、wordpress全体をgit管理対象にしてしまうと、w …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ