CakePHPで学ぶ継続的インテグレーションのデプロイ先をDigitalOceanに移行する。(2)
前回の記事
deployをDigitalOceanにする為、Vagrantfileを作成して起動ができるようにした。
本の場合
VirtualBoxとVagrantを使ってローカル上にdevelop、ci、deployの3つの仮想環境を構築している。
今回、やりたいこと
- Composerを使ってdevelop上に、CakePHPをインストールして新規プロジェクトを作成。
- GitHubにCakePHPのプロジェクトと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、ciをローカルに構築
vagrant up ci 結構時間がかかる.. コーヒーでも飲みながら~ 今回はデプロイ目的なので使いません。
http://192.168.33.100:8080にアクセスするとJenkins
仮想OS deployをDigitalOcean上に構築
Vagrantfileのdeployの箇所をDigitalOcean用に修正
vagrant up deploy --provider=digital_ocean
DigitalOceanの管理画面に行って確認。
DigitalOceanからもらったIPアドレスでアクセスすると、Nginxのエラー画面が表示される。
NginxがDigitalOceanの仮想OSにインストールされていることを確認できる。
developにcakePHPをインストールする。
vagrant ssh develop cd /var/www/application/current/app composer init Package name (<vendor>/<name>) [root/app]: php_ci_book/blogapp Description []: 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", } ], "config": { "vendor-dir": "Vendor" }, "require": {} }
インストール
composer require "cakephp/cakephp":"2.5.*"
GitHubの設定
ssh-keygen cat ~/.ssh/id_rsa.pub
GitHubにキーを登録
リポジトリblogappを作成
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
接続できていることを確認。先ほど作成したCakePHPのプロジェクトとcomposer.jsonもGitHubへ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のデプロイを登録
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のキーを設定
developからDigitalOceanにsshでアクセスしてパスワードを必ず変更しないとデプロイできないので注意。sshで初回アクセスするとパスワード変更を求められるのが原因かも。パスワード忘れたら管理画面で再発行してメールで受け取れる。
デプロイを実行
cap production deploy
DigitalOceanからもらったIPでアクセスすると1回目はなぜか権限がおかしいためPHPのエラーメッセージが表示される。...もう一度cap production deployしてみると、いつもの画面が表示される。