読了: 約 5 分

Bitbucket+Wercker+herokuで全てのアプリケーションを無料で開発環境を構築し、自動化する、もしくはherokuでなくてさくらのサーバーという記事が多いのですが、諸用でロリポップを使っているので、Bitbucket+Wercker+ロリポップのレンタルサーバーでの自動デプロイ環境構築をしてみたのでメモ。

モダンな開発環境って何?

モダンな開発環境は、メディアを運営している企業では当たり前になってきていますよね。GithubやBitbucketを使ってソースコードを管理して、pull requestを送って誰かにソースコードのレビューをしてもらってマージされたら、JenkinsやCircle CIなどのCIツールで特定の環境に自動的にデプロイするなど。便利なツールが増えてきて自動化する事によって、よりクリエイティブなものに時間を割く事が出来るようになりましたよね。

個人プロジェクト、受託制作でモダンな開発環境を創る意味

デザイナー、ディレクター等の人だとFTPを使うことが多く、分かり易いですよね。ロリポップでもチカッパプランというものからsshが使用できますが、FTPなんてもう古いし、面倒臭い…。
勿論FTPを利用している方も多いかもしれませんが、以下にモダンな開発環境を創る意味を書いてみます。

・sshの方が明らかに楽。sshで一発じゃんというのも面倒臭い。
・自分で開発/運営しているサービスに人をアサインしたり、開発組織自体をスケールさせたい時に柔軟。
・受託制作で新規開発した場合は、その後に運用の案件が来た場合、ローカルの設定に依存しない。
・受託制作での運用案件を行う場合、もしくは他の会社に引き継ぐ際の資料としても使え、無駄がない。

などなど、メリットが沢山あります。

フリーランスの方や、小さな制作会社の方はぜひ試してみて頂きたいですが、効率的な開発体制と自動化出来るものはどんどん自動化していかなければ利益率は上がりません。制作費用が下がっている中、どうやったら売上と利益を効率的に上げていけるかを考える必要がありますよね。

自動デプロイのイメージ

ローカルで開発したものをbitbucketにプッシュします。それを監視して、WerckerのWebhookでWerckerがBitbucketの特定のレポジトリの特定のブランチに上がったコードを処理します。今回はrsyncでロリポップの特定のディレクトリに上げます。なので、bitbucketにソースコードを上げるだけで自動で本番に反映される仕組みになっています。
1738487563-coolhomme_dev

自動化の設定方法

設定の簡単な流れを下記に記載しておきます。検索しても古い記事で、その間にUIが結構変わっていたので調べるのが大変でした…。

1. まずはWerckerとBitbucketに登録

http://wercker.com/
https://bitbucket.org/

2. Bitbucketで特定のレポジトリを作成

3. Werckerのwebhookに登録して、鍵を取得

4. Bitbucketのsettingからデプロイ鍵の追加

スクリーンショット 2015-09-24 12.42.58

5. Wercker.ymlをロリポップのweb以下に配置し、sshの設定

下記の様にロリポップのどこにrsyncで上げるのか設定します。ここにSlackに飛ばすメッセージの設定も同時に行っておくと、ビルド、デプロイ時にメッセージが自動で飛んできます。

スクリーンショット 2015-09-24 13.19.09

lolipop_key等の環境変数の設定は下記から。
http://devcenter.wercker.com/docs/environment-variables/index.html

box: boedy/wercker-php
no-response-timeout: 25
build:
  steps:
    - script:
        name: echo
        code: |
          echo "hello world!"
  after-steps:
    - sherzberg/slack-notify:
        subdomain: slackのサブドメイン
        token: $SLACK_TOKEN
        username: wercker
        channel: "#slackのチャンネル名"
        icon_url: https://avatars3.githubusercontent.com/u/1695193?s=140

deploy:

    steps:
       - add-to-known_hosts:
          hostname: ロリポップのssh
          port: 2222
          fingerprint: xxxxx

       - mktemp:
          envvar: PRIVATEKEY_PATH

       - create-file:
          name: write key
          filename: $PRIVATEKEY_PATH
          content: $Lolipop_key_PRIVATE // Werckerにlolipop_keyと登録
          overwrite: true
          hide-from-log: true
       - script:
             name: transfer application
             code: |
               pwd
               ls -la

herokuを使っている方のymlの設定は下記に
http://devcenter.wercker.com/docs/deploy/heroku.html

6. サーバー側の.sshの設定

ロリポップのサーバーの実行ユーザーのhomeディレクトリ配下に.sshフォルダを作成し、その中にconfigファイルとauthorized_keysファイルを作成。
authorized_keysには、上記のWerckerで設定した鍵を記述する。

PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
Host lolipop
  HostName ssh
  Port     2222
  User     ロリポップのuser
  Identityfile ~/.ssh/authorized_keys

まとめ

割と簡単に設定出来る上に、今後のデプロイ工数を考えると導入しない意味がわからないくらい。

Github、GHEやBitbucketでソースコードを管理し、Jenkins、Circle CI、Werckerなどで管理を監視して、heroku、AWS、ロリポップ等のサーバーにデプロイするという流れは既に一般化していると思いますが、個人のプロジェクトや受託開発などにも導入していくとより効率的な開発が出来るので今更ながら設定してみました。

photo credit: Landsat Spacecraft Launches via photopin (license)