読者です 読者をやめる 読者になる 読者になる

さまよえる、Android

Androidのプログラミングで便利なことや残しておきたいことを残しておく。もしオススメのライブラリがあったら教えてくださいね。

CakePHPで学ぶ継続的インテグレーションのデプロイ先をDigitalOceanに移行する。(2)

DigitalOcean CakePHP Vagrant PHP

前回の記事

deployをDigitalOceanにする為、Vagrantfileを作成して起動ができるようにした。

本の場合

VirtualBoxVagrantを使ってローカル上にdevelop、ci、deployの3つの仮想環境を構築している。

今回、やりたいこと

  • Composerを使ってdevelop上に、CakePHPをインストールして新規プロジェクトを作成。
  • GitHubCakePHPのプロジェクトとcomposer.jsonのファイルをPUSH。
  • capistranoでDigitalOceanにデプロイ。

本のサンプル


開発用のディレクトリを作成

cd ~

mkdir cibook

cd cibook

Vagrantやchefの設定

git clone https://github.com/phpcibook/php_ci_env.git

cd php_ci_env

mkdir application

bundle exec berks vendor ./cookbooks

仮想OS(develop)をローカルに構築

vagrant up develop

結構時間がかかる..

http://192.168.33.10にアクセスするとphpinfoが表示される。

f:id:araiyusukej:20150118132828j:plain

仮想OS、ciをローカルに構築

vagrant up ci

結構時間がかかる..
コーヒーでも飲みながら~
今回はデプロイ目的なので使いません。

http://192.168.33.100:8080にアクセスするとJenkins

f:id:araiyusukej:20150118132739j:plain

仮想OS deployをDigitalOcean上に構築

Vagrantfileのdeployの箇所をDigitalOcean用に修正


vagrant up deploy --provider=digital_ocean

DigitalOceanの管理画面に行って確認。

f:id:araiyusukej:20150118191115j:plain

DigitalOceanからもらったIPアドレスでアクセスすると、Nginxのエラー画面が表示される。
NginxがDigitalOceanの仮想OSにインストールされていることを確認できる。

f:id:araiyusukej:20150118191200j:plain

developにcakePHPをインストールする。

vagrant ssh develop

cd /var/www/application/current/app

composer init

Package name (<vendor>/<name>) [root/app]: php_ci_book/blogapp
Description []: 
Author: Yusuke Arai <info.yusuke.arai@gmail.com>
Minimum Stability []: 
License []: 

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? n
Would you like to define your dev dependencies (require-dev) interactively [yes]? n
                                            

compser.jsonの編集

{
    "name": "php_ci_book/blogapp",
    "authors": [
        {
            "name": "Yusuke Arai",
            "email": "info.yusuke.arai@gmail.com"
        }
    ],
    "config": {
        "vendor-dir": "Vendor"
    },   
    "require": {}
}

インストール

composer require "cakephp/cakephp":"2.5.*"

CakePHPのプロジェクト作成

Vendor/bin/cake bake project .

http://192.168.33.10にアクセスすると、いつもの画面

f:id:araiyusukej:20150118214711j:plain

GitHubの設定

ssh-keygen

cat ~/.ssh/id_rsa.pub

GitHubにキーを登録

f:id:araiyusukej:20150119234006j:plain

リポジトリblogappを作成

f:id:araiyusukej:20150119234821j:plain

cd /var/www/application/current

git init

touch README.md

git add README.md

git commit -m "最初のコミット!!"

git remote add origin git@github.com:araiyusuke/blogapp.git

cd /var/www/application/current/app

git update-index --add --chmod=+x Console/cake

git push -u origin master

f:id:araiyusukej:20150118221447j:plain

接続できていることを確認。先ほど作成したCakePHPのプロジェクトとcomposer.jsonGitHubへpushする。

cd /var/www/application/current

rm -rf ./app/tmp/cache/persistent/._cake_core_

rm -rf ./app/tmp/cache/persistent/myapp_*

touch ./app/tmp/cache/models/.gitkeep

touch ./app/tmp/cache/persistent/.gitkeep

touch ./app/tmp/cache/views/.gitkeep

touch ./app/tmp/logs/.gitkeep

touch ./app/tmp/sessions/.gitkeep

touch ./app/tmp/tests/.gitkeep

vi .gitignore

.DS_Store
app/tmp
app/Plugin
app/Vendor
app/report
app/Config/bootstrap/environments/production.php

CakePHPの土台をpushする。

git add app

git add -f app/tmp

git commit -m "CakePHPの土台を追加"

git push origin master

DigitalOceanにGitHubの設定

ssh root@自分のIP(128.199.190.86)

ssh-keygen

cat ~/.ssh/id_rsa.pub

GitHubのデプロイを登録

f:id:araiyusukej:20150119095213j:plain

Capistranoの設定

vagrant ssh develop

cd /var/www/application/current

mkdir deploy

cd deploy

cap install

vi config/deploy.rb

lock '3.3.5'

set :application, 'blogapp'
set :repo_url, '自分のリポジトリ(git@github.com:araiyusuke/blogapp.git)'
set :deploy_to, '/var/www/application'
set :log_level, :info

framework_tasks = ["symlink:linked_dirs", "symlink:linked_files"]
framework_tasks.each do |t|
  Rake::Task["deploy:#{t}"].clear
end
set :password, ask('Server password:', nil)

namespace :deploy do
  before :check, :create_app_dir do
    on release_roles :app do |role|
      execute :sudo, :mkdir, '-p', '/var/www/application'
      execute :sudo, :chown, "#{host.user}:#{role.properties.group}", '/var/www/application'
    end
  end


  namespace :check do
    after :linked_dirs, :chown_linked_dirs do
      on release_roles :app do |role|
         execute :sudo, :find, shared_path, "-type d -print", "|", :xargs, :chmod, "777"
         execute :sudo, :find, releases_path, "-type d -print", "|", :xargs, :chmod,'-R' , "777"

      end
    end
  end


  after :updated, :composer_install do
    on roles(:app) do
      execute :composer, "--working-dir=#{release_path}/app", "--no-dev", :install
    end
  end
end

vi config/deploy/production.rb

server '自分のIP(128.199.190.86)',
    roles: %w{web app},
    user: 'root',
    app_config:'production.php',
    group: 'root'

developからDigitalOceanにアクセスできるようにSSHのキーを設定

f:id:araiyusukej:20150120000712j:plain

developからDigitalOceanにsshでアクセスしてパスワードを必ず変更しないとデプロイできないので注意。sshで初回アクセスするとパスワード変更を求められるのが原因かも。パスワード忘れたら管理画面で再発行してメールで受け取れる。

デプロイを実行

cap production deploy

DigitalOceanからもらったIPでアクセスすると1回目はなぜか権限がおかしいためPHPのエラーメッセージが表示される。...もう一度cap production deployしてみると、いつもの画面が表示される。

f:id:araiyusukej:20150120001419j:plain