Help us understand the problem. What is going on with this article?

Conoha vpsサーバーにCentOS6.9 + Rails5系 + MySQL + nginx + unicorn + capistranoでデプロイまで

More than 1 year has passed since last update.

2回目のデプロイを行いましたので、記事を更新させたいと思います(9/25)

CentOs 6.9

$ ruby -v
2.5.1
$ rails -v
5.2.1
$ nginx -v
1.15
$ cap -v
Capistrano Version: 3.11.0 (Rake Version: 12.3.1)

この記事のゴールはローカルの環境からcapistranoでrailsアプリをデプロイしてアクセスできるところまでとします。細かい設定などはしていませんのでご了承ください。*

すでにローカルにgitで管理されているrailsアプリがある前提で進めていきます。
今回のデプロイするrailsアプリのリポジトリ名→ deploy_app

今までherokuに頼りきりでしたが、初めてvpsサーバーを借りてデプロイすることができましたので、復習と誰かのためになればと思い、まとめます。一番最初の手順から常にハマりまくっていたので、対策方法なども網羅したい。

参考になるのでぜひ見てみてください。
ドットインストール - ローカル開発環境の構築(Centos) [macOS編]
ドットインストール - さくらVPS編

流れ

1. ConohaVPSを契約する
2. CentOSにRubyを入れる
3. Mysqlの設定
4. nginxの設定
5. unicornの設定
6. capistrano設定
7. capistranoからデプロイ!

それではどんどん書いていきます。

⚠️ コマンドを書いて行く際、
⚠️ $は一般のコマンド
⚠️ #はroot権限のコマンド
という意味で記述していますので、注意ください

1. ConohaVPSを契約する

ConohaVPSここから登録。(さくらVPS等でも全然問題ないです)
私は1750円のものを選択しました。
登録画面に従って3分くらいで簡単に契約できます。
登録後のIPアドレス12X.XXX.XXX.XXXとPASSWORDはデプロイする上で必要です。
以後 ipアドレスは123.45.678.000と表記しますので注意してください
起動もさせておく

接続とセキュリティー各種設定

 # ssh root@123.45.678.000 # VPSに接続


**#はroot権限のコマンドという意味です**

 # yum update # アプリケーションを更新

 # vim /etc/sysconfig/i18n 
 LANG="ja_JP.UTF-8"に変更 #日本語にする

作業用ユーザーを追加する

 # useradd hogehuga #hogehugaという作業ユーザーが作られる
 # passwd hogehuga  # パスワードを設定する

 # usermod -G wheel hogehuga #作業ユーザーでもsudoを使えるようにする(hogehugaをwheelグループにいれなさいという命令)
 # visudo #ファイルを編集 wheelの部分(## Allow people in group wheel to run の下の行)がコメント化されているので外してあげる。
保存する。

一旦抜けてログインできるか試す。
$ ssh hogehuga@123.45.678.000
うまくいくはず

パスワードではなく鍵認証にする

Mac側で鍵のペアを生成(秘密鍵と公開鍵)
VPS側で公開鍵をMac側で秘密鍵を使ってマッチさせる仕組み

鍵を生成前にまずはVPS側で公開鍵の保管場所を作成する

$ mkdir ~/.ssh     # ディレクトリ作成
$ chmod 700 ~/.ssh #パーミッション設定

MAC側(localhost)で作業
$ ssh-keygen -y rsa -v # 鍵が作成される(id_rsaとid_rsa.pub)
$ chmod 600 ~/.ssh/id_rsa.pub # パーミッション付与

公開鍵をVPSに転送
$ scp~/.ssh/id_rsa.pub hogehuga@123.45.678.000:~/.ssh/authorized_keys

vpsに入って 
$ ls -la .ssh
=> authorized_keysが入っていれば良い

configファイルも作っておく

# vi ~/.ssh/config
Host conoha_deploy_app
  HostName ***.**.**.*** # ip_adress
  User hogehuga
  Port 55555
  IdentityFile  ~/.ssh/id_rsa # deployの時にも使います

$ ssh conoha_deploy_appで接続できているか試す

ssh-agentを登録しておく
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa
試してみる
$ ssh -i ~/.ssh/id_rsa hogehuga@123.45.678.000
$ ssh -i hogehuga@123.45.678.000 # 省略も可能。

さらにセキュリティーを高めるために3つの設定をする

その前に、現在hogehugaユーザーでvpsにログインしているかと思いますが、これからroot権限が必要とされる機会が多くなるので、次のコマンドを実行

$ sudo -s  #root権限を保持する
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org # 念のためバックアップを取っておく

# vim /etc/ssh/sshd_config # 以下の3つを変更するために書き
換える。該当箇所探してください。
/etc/ssh/sshd_config
該当箇所探してください。

①ポート番号の変更
/Portとファイル検索してコメントを外し
22から55555に変更する
②パスワードログインの禁止
PasswordAuthentication no
③rootログインの禁止
PermitRoot_Login no

と書き換えて保存。
変更を反映

# service sshd restart

$ ssh -p 55555 hogehuga@123.45.678.000
でログインできればOK!!

ファイアーウォールの設定

名前が格好いい
iptablesで設定されている
# vim /etc/sysconfig/iptables
下記をコピペでOKです。

*filter
:INPUT    DROP    [0:0]
:FORWARD  DROP    [0:0]
:OUTPUT   ACCEPT  [0:0]
:SERVICES -       [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4  -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -j SERVICES
-A INPUT -p udp --sport 53 -j ACCEPT
-A INPUT -p udp --sport 123 --dport 123 -j ACCEPT
-A SERVICES -p tcp --dport 55555 -j ACCEPT
-A SERVICES -p tcp --dport 80 -j ACCEPT
-A SERVICES -p tcp --dport 443 -j ACCEPT
COMMIT

55555のところを適宜変更してください。

⚠️ 私の場合iptable関連でハマったりしたので、意識しておくと良いかもです。
mysqlを使用するときにもこのファイルにport番号(大抵3306)を記載する必要があります。

# service iptables start # 変更を適用させる 

# iptables -L # iptables確認できる

お疲れ様です。ここからが本番です。

2. Rubyを入れる

  1. まずはgitをインストール
$ sudo yum -y install git
$ git --version

2. rbenvインストール

rbenvはrubyのバージョン管理ツールです
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

3. ruby-buildインストール
ruby-burildはrbenv installを実行するためのrbenvのプラグインです。
rbenvとセットでインストール

$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

4. 依存パッケージのインストール

rubyをインストールするための関連するパッケージです。これがないと、rbenv installの際にコケます。

$  sudo yum -y install bzip2 gcc openssl-devel readline-devel zlib-devel

5 rbenv読み込み設定

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
# rbenvの初期化
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
# bashの再読込
$ source ~/.bash_profile
# バージョン確認 バージョンが出ればOK
$ rbenv -v

6. Rubyをインストールする

$ rbenv install 2.5.1
# global設定
$ rbenv global 2.5.1
$ rbenv rehash
# バージョン確認
$ ruby -v
 => 2.5.1と出ればOK!!

7. bundlerのインストール

# gem install bundle

8. nodejsのインストール(railsを使用するために使う)

nodejsインストール失敗したら、お使いの環境に合わせて、ググってインストールしてください

# curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -

# yum -y install nodejs

3. Mysqlの設定

ドットインストールに従いました。
https://dotinstall.com/lessons/basic_sakura_vps/8016
インストールする

# yum install mysql-server
# cp /etc/my.cnf /etc/my.cnf.org # 保険としてコピーしておく
# vim /etc/my.cnf # mysqlの設定ファイル

起動
# service mysqld start # 起動
# mysql_secure_installation # コマンドに従って、パスワードなどをを設定していく
# chkconfig mysqld on # 自動起動設定
# mysql -u root -p # rootでログイン

vpsに接続できるか試してみる

$ mysql -u root -p

> mysql -u root -h 123.45.678.000 -p

私の場合ここでERROR 1130 (HY000): Host '123.45.678.000' is not allowed to connect to this MySQL serverというエラーでハマりました

同じ現象になったら
mysql> GRANT all ON *.* TO root@123.45.678.000 IDENTIFIED BY 'パスワード';     
mysql> FLUSH PRIVILEGES;

を試して見てください。

このままproduction用のdatabaseも作成します。

> create database deploy_app_production; # deploy_app_productionというデータベースが作成される→ 後にdatabase.ymlでも使用する

> exit

これでMysqL設定ok!

4. nginx(webサーバー)の設定

①まずデプロイするアプリの置き場所をVPSに用意する

$ sudo mkdir -p /var/www/'deploy_app(railsアプリケーションの名前)'  ⚠️後で出てくる頻度が多くなるので注意

②nginxをインストール
インストール参考

/etc/yum.repos.d/nginx.repo というファイルを作成し、そのファイルに以下を記述。

# vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

保存すること

いざインストール

$ sudo yum -y --enablerepo=nginx install nginx

$ nginx -v 

nginx version: nginx/1.12.0(例) のように表示されてればOK!

nginxの設定

/etc/nginx/conf.d/default.confを編集する

まずはバックアップのコピー
$ sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/local.conf
$ sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bk

$ vim /etc/nginx/conf.d/local.conf
必要最低限の3箇所を編集します

/etc/nginx/conf.d/local.conf
upstream unicorn {
 server unix:/var/www/app/deploy_app/shared/tmp/sockets/unicorn.sock; ### 変更箇所 ちょー大事、後ほど登場するユニコーンと紐づく
}

server {
  listen 80 default_server;
  server_name 123.45.678.000;  ### 変更

  access_log /var/log/nginx/access.log; # ログ場所
  error_log /var/log/nginx/error.log;    # ログ

  root /var/www/deploy_app/public; ### 変更

  client_max_body_size 100m;
  error_page 404 /404.html; 
  error_page 500 502 503 504 /500.html;
  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://unicorn;
  }
}

保存を忘れずに
続いて設定

$ sudo chkconfig nginx on # 自動起動設定
$ sudo service nginx configtest # 設定ファイルに問題がないか確認
$ sudo service nginx restart #再起動

nginxでよく使うコマンド

5. Capistranoとunicornの設定

capistranoはデプロイツールでunicornはリモートサーバー上でrailsを動かす役割です。

⚠️⚠️⚠️⚠️⚠️⚠️⚠️ここからはdeploy_appのローカル開発環境で作業しますので注意!!!⚠️⚠️⚠️⚠️⚠️⚠️⚠️

まずはrailsのgemfileを編集

Gemfile
gem 'unicorn'

group :deployment do
  # capistrano
  gem 'capistrano'        
  gem 'capistrano-rails'
  gem 'capistrano-bundler'
  gem 'capistrano-rbenv'
end
$ bundle install

database.ymlとsecrets.ymlはgithubを介さずにcapistranoコマンドにてアップロードをするので先にファイルを設定します。

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: ***********
  socket: /tmp/mysql.sock # 各自でmysql.sockがある場所を指定してください

production:
  <<: *default
  adapter: mysql2
  encoding: utf8
  database: deploy_app_production # mysqlで作成したdatabase名
  username: root
  password: ************* 
  host: 123.45.678.000 # IPアドレス

次に secrets.ymlの設定
ローカルにて

$ rake secret
8472698akjs234987293fhgaljshdfglkajsflkbjadsfnlkjadnfk

みたいに表示されるのでこれをコピペして貼り付ける

secrets.yml
production:
  secret_key_base: 8472698akjs234987293fhgaljshdfglkajsflkbjadsfnlkjadnfk

アセットパイプラインを通す設定をする

本番環境ではcssとjsはコンパイルしないと読み込まれないのでする必要がある
$ rake assets:precompile RAILS_ENV=production 

私の場合ここprecompileでもハマりました。

Sprockets::FileNotFound: couldn't find file 'xray'

解決できなかったのですが、productionでは使わないものだったので消して再実行しコンパイル成功。

config/environments/production.rbを変更

config/environments/production.rb
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
config.public_file_server.enabled = true
に変更する

後もう少し!

unicornの設定ファイルを作成します
新規でconfig/unicorn/production.rbとなるように作成してください。

config/unicorn/production.rb
# -*- coding: utf-8 -*-
worker_processes Integer(ENV["WEB_CONCURRENCY"] || 3)
timeout 30

# ホットデプロイをするか?
preload_app true # 更新時ダウンタイム無し

app_path = '/var/www/deploy_app/current'
working_directory "#{app_path}"

# nginxと連携するための設定
# リクエストを受け取る ポート番号を指定
listen "/var/www/deploy_app/shared/tmp/sockets/unicorn.sock"
# PIDの管理ディレクトリ
pid "/var/www/deploy_app/shared/tmp/pids/unicorn.pid" # nginxで指定したパスを設定してください

stdout_path "#{app_path}/log/unicorn.log"
stderr_path "#{app_path}/log/unicorn.log"


# ログの出力パス
stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])

puts "-------------メッシメッシメッシメッシメッシメッシメッシ-----------------"

# フォーク前に行うことを定義
before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

# フォーク後に行うことを定義
after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

6. capistrano設定

capistranoはデプロイを簡単に行えるもの。
GithubにあるリモートリポジトリからConohaVPSにアップロードしてくれます。

①コマンドで設定ファイルを作成する

$ bundle exec cap install

→ 4つのファイルが作成されます

これらを一つずつ設定していきます。

Capfile               - capistranoが実行される際に読み込むgemファイルやtaskを記載。
config/deploy.rb      - capistranoが実施するレシピを記載。
config/deploy/**.rb   - 各環境ごとの設定
lib/capistrano/tasks/ - capistranoに実施させたいタスクを定義できる
Capfile
# capistranoの基本動作を設定
require "capistrano/setup"   
require "capistrano/deploy"  
require "capistrano/scm/git" 
install_plugin Capistrano::SCM::Git


require "capistrano/rails" 
require "capistrano/rails/assets"
require "capistrano/rails/migrations" 
# rbenvの設定
require "capistrano/rbenv" #ok
require "capistrano/bundler"
require "pry" # 全然必要ないけどデバッグで便利でした...

Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }

デプロイの共通設定をする

config/deploy.rb
# 共通の設定をconfig/deploy.rbで記述

# config valid for current version and patch releases of Capistrano
lock "~> 3.11.0"

# 基本設定
set :application, "deploy_app"
set :repo_url, "https://UserName@github.com/UserName/deploy_app.git"# デプロイ対象のリポジトリ->プライベートリポジトリとしていたため私はhttpsで指定しましたが、sshで大丈夫です。

set :deploy_to, '/var/www/deploy_app' # デプロイ先

set :rbenv_type, :user  # rbenvをシステムにインストールした or ユーザーローカルにインストールした
set :rbenv_ruby, '2.5.1' # サーバで利用するrubyのバージョンを指定
set :rbenv_path, '/home/username/.rbenv'
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"

# リリースフォルダをいくつまで保持するか?
set :keep_releases, 5
set :deploy_via, :remote_cache

set :log_level, :debug # capistranoの出力ログの制御
set :pty, true # sudoを使用するのに必要


# Shared に入るものを指定
set :linked_files, %w{config/database.yml config/secrets.yml} # シンボリックリンクを貼るファイル
set :linked_dirs,  %w{bin log tmp/pids tmp/sockets tmp/cache vender/bundle } # sharedにシンボリックリンクを張るディレクトリ指定

after 'deploy:publishing', 'deploy:restart'
namespace :deploy do


 desc 'Restart application'
  # アプリ再起動を行うタスク
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :mkdir, '-p', release_path.join('tmp')
      execute :touch, release_path.join('tmp/restart.txt')
    end
  end
  # linked_files で使用するファイルをアップロードするタスク
  # deployが行われる前にコマンドにて実行する
  desc 'upload important files'
  task :upload do
    on roles(:app) do |host|
      execute :mkdir, '-p', "#{shared_path}/config"
      upload!('config/database.yml',"#{shared_path}/config/database.yml")
      upload!('config/secrets.yml',"#{shared_path}/config/secrets.yml")
    end
  end

  # webサーバー再起動時にキャッシュを削除する
  after :restart, :clear_cache do
   on roles(:web), in: :groups, limit: 3, wait: 10 do
    #Here we can do anything such as:
    within release_path do
      execute :rm, '-rf', release_path.join('tmp/cache')
    end
   end
  end
  # Flow の before, after のタイミングで上記タスクを実行
  before :started,   'deploy:upload'
  after  :finishing, 'deploy:cleanup'

  #unicorn 再起動タスク
  desc 'Restart application'
  task :restart do
    invoke 'unicorn:restart' # lib/capustrano/tasks/unicorn.rake 内処理を呼び出す
  end
end

production環境の設定

config/deploy/production.rb
set :stage, :production
set :branch, 'master' ## 必要があれば変更

server 'IP.AD.RE.SS', user: 'hogehuga', roles: %w{app db web}, port: 55555

set :ssh_options, {
  port: 55555, #### 変更
  keys: [File.expand_path('~/.ssh/id_rsa')], # リモートサーバー用秘密鍵があるところを指定 1で設定したid_rsaを指定すること
  forward_agent: true,
  auth_methods: %w(publickey)
}

次はtaskファイルを設定
ここはコピペでも大丈夫そう。

lib/capistrano/tasks/unicorn.cap
namespace :unicorn do
  task :environment do
    set :unicorn_pid, "/var/www/deploy_app/shared/tmp/pids/unicorn.pid" # config/unicorn/production.rbないのpidと同じ
    set :unicorn_config, "#{current_path}/config/unicorn/production.rb"
  end

  def start_unicorn
    # フォルダが存在した場合のみ実行する
    within current_path do
    execute :bundle, :exec, :unicorn, "-c #{fetch(:unicorn_config)} -E #{fetch(:rails_env)} -D"
    end
  end

  def stop_unicorn
    execute :kill, "-s QUIT $(< #{fetch(:unicorn_pid)})"
  end

  def reload_unicorn
    execute :kill, "-s USR2 $(< #{fetch(:unicorn_pid)})" 
  end

  def force_stop_unicorn
    execute :kill, "$(< #{fetch(:unicorn_pid)})"
  end

  desc "Start unicorn server"
  task :start => :environment do
    on roles(:app) do
      start_unicorn
    end
  end

  desc "Stop unicorn server gracefully"
  task :stop => :environment do
    on roles(:app) do
      stop_unicorn
    end
  end

  desc "Restart unicorn server gracefully"
  task :restart => :environment do # TODO
    on roles(:app) do
      if test("[ -f #{fetch(:unicorn_pid)} ]")
        reload_unicorn
      else
        start_unicorn
      end
    end
  end

  desc "Stop unicorn server immediately"
  task :force_stop => :environment do # TODO
    on roles(:app) do
      force_stop_unicorn
    end
  end
end

リモートサーバーとgithubをつなぐ公開鍵認証の設定をする
リモートサーバーにて

$ cd ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hogehuga/.ssh/id_rsa): Enter 
Enter passphrase (empty for no passphrase): Enter
Enter same passphrase again: Eneter

$ cat id_rsa.pub
# 出力をコピーして、以下のgithubのコンソールリンクより公開鍵を登録
-> https://github.com/settings/keys


# 設定ファイルを作成
$ sudo vi ~/.ssh/config
# 以下を記述
Host github
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_rsa 


$ ssh -vT github で確認 # vはデバッグオプションで便利 
#以下のような文章が出力されればOK
Hi Hogehuga! You've successfully authenticated, but GitHub does not provide shell access.

ついでに必要に応じてssh-agentの設定(おそらくこれやらないとpermission error出ます)
$ eval `ssh-agent` 
$ ssh-add ~/.ssh/id_rsa

これで設定は終了!
いよいよデプロイ!

7. capistranoからデプロイ!

引き続きローカル環境からgitでコマンドを打っていきます

$ git add .
$ git commit -m "deploy"
$ git git push origin master

おそらく、permissionなどで弾かれすると思いますが、鍵を設定したりすればすんなりpushできるかと思います。

githubにpushできたらcapコマンドでdeployしてみましょう

$ bundle exec cap production deploy:upload # database.ymlをアップロードする
$ bundle exec cap production deploy:check # deploy可能かのチェック
$ bundle exec cap production deploy

以上!!!

成功したら
ipアドレスにアクセスしてみてください。

ハマったところとメモ

権限のあるファイルをvimで上書きしたい時には
:w !sudo tee %
とやると強制上書きしてくれます。

Host 'server IP address' is not allowed to connect to this MySQL server


mysql> GRANT all ON *.* TO root@123.45.678.000 IDENTIFIED BY 'パスワード';     
mysql> FLUSH PRIVILEGES;

これで治りました...

$ cap production deployの際に発生したエラー一覧

  • rbenvのバージョン指定
リモートサーバーにてgem envで確認ご、rbenv_pathを指定することで解決した

この辺りを設定する必要あり
set :rbenv_type, :user  # rbenvをシステムにインストールした or ユーザーローカルにインストールした
set :rbenv_ruby, '2.5.1' # サーバで利用するrubyのバージョンを指定
set :rbenv_path, '/home/hogehuga/.rbenv'
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec" # コピペで大丈夫ぽい

  • githubのリポジトリを非公開にしていると、permission errorが発生する -> 非公開の時にはsshではなくhttpで通信する
例) set :repo_url, "https://UserName:パスワード@github.com/UserName/deploy_app.git"
  • ファイルの拡張子を間違えていた(参考記事を頼りすぎてしまい思考停止になっていんた)
/Capfile内の
Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r }
によってtaskが走るが、hoge.capのファイル名を作成してしまっていた...

  • unicornのパス設定 とlinked_dirの関連を理解していなかった
エラーログ
unicorn:start
      01 /home/user/.rbenv/bin/rbenv exec bundle exec unicorn -c /var/www/app/deploy_app/current/config/unicorn/production.rb -E deployment -D

    ✔ 01 user@123.4.43.5 6.596s
      unicorn restarting...
      02 kill -s USR2 `cat /var/www/app/deploy_app/shared/tmp/pids/unicorn.pid`
      02
      02 Usage:
      02  kill [options] <pid|name> [...]

tmp配下はユニコーン関連のファイルが存在するが、linked_dirに含まないとエラーが発生する
set :linked_dirs,  %w{bin log tmp/pids tmp/sockets tmp/cache vender/bundle } 

他にも多くのエラーが出るかもですが、向き合うと勉強になるのでググりながら頑張ってください!
deploy時の頻発するpermission errorは

SSHKit::Command::Failed: git exit status: 128
git stdout: Warning: Permanently added the RSA host key for IP address '192.30.255.112' to the list of known hosts.
Permission denied (publickey).

1. 鍵の設定(リモートとローカルの2箇所で設定する必要あり)
2. ssh-addしてない
3. ファイルの権限エラー (該当ディレクトリ、ファイルをchown chmodなどで操作してください)
4. リポジトリをプライベートにしている
5. ~/.ssh/configの設定ミス

あたりだと思います。

その他の参考リンク↓
サーバー再構築の時などに古い鍵を削除したい
ssh-agentについて
ssh-addできない時
capistranoの使用法について
デプロイ時 git-ls remoteでエラー出る場合
デプロイ後本番サーバーでコマンドを実行したい時

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away