LoginSignup
0
1

More than 5 years have passed since last update.

MiddlemanでbuildしたコンテンツをCircleCI/capistranoでさくらのVPSにデプロイする

Last updated at Posted at 2016-08-22

前回(MiddlemanでbuildしたコンテンツをCircleCI経由でAmazon S3に同期する)の設定を発展させて、capistranoを加えてリモートホストへデプロイしたいと思います。

とにかく簡単にCircleCIとcapistranoを連携させたかったので、前回同様、必要なモノは少ないです。

今回に関してはMiddlemanでなくても単なる静的コンテンツでもデプロイ可能です。ホストをSSHが使えるレンタルサーバー等にすれば、サーバーの設定も必要なく使えると思います。

手順

  1. Middlemanのプロジェクトを作成(前回参照)
  2. さくらVPS側の設定を行う(Webサーバーの設定/SSHの設定)
  3. capistranoの設定を行う
  4. CircleCIの設定を行う

結果:masterをGitHubにプッシュするとCircleCIのビルドが走り、変更がさくらVPSのサーバーにデプロイされる

ホスト側の設定

ホストはApacheだけ設置して放置していたさくらのVPSの512を使いました。ApacheやSSHの設定について、詳しいことはウェブ上にある多くの情報に譲ります。(私の知識はMAMPで多少いじったことがある程度です)

gitが必要ですが、確か最初からインストールされていたような気がします。

Webサーバーの設定

とりあえず確認できればよしということで、/var/www/以下にデプロイ用のディレクトリを作って、デプロイするユーザーに権限を与えました。ここでgit checkout/pullさせ、buildディレクトリをapacheのDocumentRootにすることで公開します。

デプロイ先:/var/www/hoge/

↓ デプロイ先でcapistranoがGitHubのfugaリポジトリをcheckout/pullする

checkout先:/var/www/hoge/fuga/

↓ MiddlemanのbuildディレクトリをDocumentRootに設定

公開ディレクトリ:/var/www/hoge/fuga/build/

SSHの設定

ローカルでssh-keygenして認証鍵を作成します。あとで秘密鍵をCircleCIに登録する必要があるので、このプロジェクト用の鍵を新たに生成しました。

公開鍵(.pub)の方をホストのデプロイ用ユーザーの~/.sshに置いてauthorized_keysに登録。

参考:さくらのVPSを借りて、真っ先に設定した内容まとめ

capistranoの設定

S3と同期する設定を削除し、capistranoを追加します。

Gemfile
- gem 'middleman-s3_sync'
+ gem 'capistrano'
config.rb
- activate :s3_sync do |s3_sync|
-   s3_sync.bucket = 'elasticbeanstalk-ap-northeast-1-149281802293'
-   s3_sync.region = 'ap-northeast-1'
- end

capistranoの設定ファイルを作成します。

bundle exec cap install

以下のような構成が作成されます。

├── Capfile               # 変更なし
├── config
│   ├── deploy
│   │   ├── production.rb # productionのデプロイ設定
│   │   └── staging.rb    # stagingのデプロイ設定(今回は使用しない)
│   └── deploy.rb         # 共通のデプロイ設定
└── lib
    └── capistrano
            └── tasks

共通のデプロイ設定は単にgit checkout/pullしているだけです。

deploy.rb
set :application, '<your-app>'
set :repo_url, '<your-repository>'
set :deploy_to, '<your-public-path>'

set :pty, true

task :deploy do
  on roles(:web) do
    application = fetch :application
    deploy_to = fetch :deploy_to

    if test "[ -d #{deploy_to}/#{application} ]"
      execute "cd #{deploy_to}/#{application}; git pull"
    else
      execute "cd #{deploy_to}; git clone #{fetch :repo_url} #{application}; cd #{application}"
    end
  end
end

production用の設定はホストのログイン設定のみ。

production.rb
role :web, %w{<user-name>@<host>}

ここまでの設定で、ローカルからデプロイすることができます。

bundle exec cap production deploy:check
bundle exec cap production deploy

参考:Capistrano3でGithubにあるコードをデプロイ

CircleCIの設定

CircleCIからさくらVPSのホストにSSHでログインさせるため、先ほどのSSHの設定で、ローカルで作成した認証鍵の秘密鍵(.pubじゃない方の内容)をCircleCIの Project Settings » SSH Permissions に登録する。

Circle.ymlはRubyバージョンを追加して、デプロイコマンドをcapistranoに変更。

circle.yml
machine:
  timezone: Asia/Tokyo
  ruby:
    version: 2.0.0-p481
dependencies:
  pre:
    - gem install bundler --pre
deployment:
  deploy:
    branch: master
    commands:
      - bundle exec cap production deploy:
          timeout: 1200

これで、masterにpushするとCircleCIがbuildを開始し、自動的にホストに変更をデプロイすることができました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1