質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.26%

  • PHP

    15652questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Capistrano

    79questions

    Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

phpのdeployerを使ってdeployしようとしてますが失敗します。

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 54

kaji

score 578

deployerのスケルトンはcommonを使い以下の通りdeploy.phpに記述しました。

set('ssh_type', 'native');
// set('ssh_multiplexing', true);
set('ssh_multiplexing', false);

set('repository', 'git@bitbucket.org/hogehoge/hogehoge.git');
set('shared_files', []);
set('shared_dirs', []);
set('writable_dirs', []);


// Servers

server('production', '111.111.111.xxx')
    ->user('user1')
    ->identityFile()
    ->set('deploy_path', '/var/www/hogehoge/hogehoge');

実行コード

$ dep deploy

レスポンスメッセージ

✔ Executing task deploy:prepare
✔ Executing task deploy:lock
✔ Executing task deploy:release
➤ Executing task deploy:update_code
✔ Executing task deploy:failed
✔ Executing task deploy:unlock

In NativeSsh.php line 102:

  Warning: Permanently added '111.111.111.xxx' (RSA) to the list of known hosts.

接続先

ls  -ltA ~/.ssh/
total 16
-rw-r--r-- 1 user1 group1 409 Dec 18 18:42 known_hosts
-rw------- 1 user1 group1 1639 Dec 18 18:19 authorized_keys
-rw------- 1 user1 group1 1675 Jan 29  2016 id_rsa
-rw-r--r-- 1 user1 group1  403 Jan 29  2016 id_rsa.pub

接続元

 ls -ltA ~/.ssh/
total 36
-rw-------  1 user1 group1 11052 Dec 18 18:38 known_hosts
-rw-------  1 user1 group1  2440 Dec 18 18:15 authorized_keys
-rw-r--r--  1 user1 group1   403 Jul 13 01:38 id_rsa.pub
-rw-------. 1 user1 group1  1675 Feb 13  2014 id_rsa

接続元にも接続先にもdeploy.phpに記述したユーザの~/.ssh/known_hosts
に'111.111.111.xxx'のipはありませんでした。

再度dep deployを実行し~/.ssh/known_hostsファイルが更新されてないことを確認してます。
ssh周りだと思うのですが、何がいけないのでしょうか?

==2017/12/18 11:05追加==

dep deploy -vvv
In NativeSsh.php line 102:

  [RuntimeException]
  The command "ssh -A -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p '22' -i '/home/user1/.ssh/id_rsa' 'user1@111.111.111.xxx'
  bash -s" failed.

  Exit Code: 128(Invalid exit argument)

  Working directory: /home/user1/hogehoge

  Output:
  ================
  fatal: Could not switch to 'git@bitbucket.org/hogehoge': No such file or directory


  Error Output:
  ================
  Warning: Permanently added '111.111.111.xxx' (RSA) to the list of known hosts.
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • gouf

    2017/12/18 22:53 編集

    詳細な情報が得られるよう、オプションが幾つか用意されている(-v, -vv, -vvv)みたいです。デプロイ時に指定して、それで何か具体的なエラー情報を引き出せませんか? : 参考 https://deployer.org/docs/getting-started

    キャンセル

  • kaji

    2017/12/19 11:07

    追加してみました。やはりssh周りなのでしょうか?ssh周りで思い当たる対応は↑のとおりやってます。

    キャンセル

回答 1

0

開発環境で試したのでその方法を記載しておきます。
まず、エラーの意味についてですが、これはBitbucketのレポジトリにアクセスできないという意味です。

fatal: Could not switch to 'git@bitbucket.org/hogehoge': No such file or directory

下記のWarningは気にする必要はありません。なんらかのエラーが出た時に私の環境でも出ていました。

Error Output:
================
Warning: Permanently added '111.111.111.xxx' (RSA) to the list of known hosts.

 下準備

下記が~/.ssh/configです。パーミッションも気をつける必要があります。SSHコマンドで接続できているようなので気にする必要はありません。
私の開発環境ではkeychainをインストールして試しました。実際のやり方は本回答下部のSSHパスフレーズ対応を参照してください。

  • /home/user1700以下(750以下でも良いかもしれません)
  • ~/.ssh700以下
  • ~/.ssh/id_rsa600以下
  • ~/.ssh/id_rsa.pub644以下
# ~/.ssh/config
Host bitbucket.org
    HostName bitbucket.org
    User git
    identityFile ~/.ssh/bitbucket/id_rsa
    Port 22
    TCPKeepAlive yes
    IdentitiesOnly yes
    ForwardAgent yes

Host production
    HostName 11.111.111.xxx
    User linux
    identityFile ~/.ssh/id_rsa
    Port 22
    TCPKeepAlive yes
    IdentitiesOnly yes
    ForwardAgent yes

下記のようなコマンドを実行して、パスフレーズなしでログインが成功すれば問題ありません。

ssh -T bitbucket.org
ssh production

また、Bitbucketへのアクセスを確認するために下記を実行して確認しました。パスフレーズなしでgit cloneできれば確認終了です。

mkdir /tmp/test
cd /tmp/test
git clone git@bitbucket.org:ユーザー名/レポジトリ.git

 Deployer

下記が開発環境で試したdeployer-4.xのインストール方法です。

curl -LO https://deployer.org/releases/v4.3.1/deployer.phar
sudo mv deployer.phar /usr/local/bin/dep
sudo chmod 755 /usr/local/bin/dep
composer require deployer/deployer --dev
dep init
#[common]を選択

下記は開発環境で試したdeployer-4.xのスクリプトです。deploy:lockは何故か私の環境だと失敗してしまったのでコメントアウトしてあります。

// deploy.php
<?php
namespace Deployer;
require 'recipe/common.php';

// Configuration
set('ssh_type', 'native');
set('ssh_multiplexing', false);

set('repository', 'git@bitbucket.org:ユーザー名/レポジトリ.git');
set('shared_files', []);
set('shared_dirs', []);
set('writable_dirs', []);

// Servers
server('production', '11.111.111.xxx', 22)
    ->user('linux')
    ->configFile('~/.ssh/config')
    ->forwardAgent()
    ->set('branch', 'master')
    ->set('deploy_path', '/var/www/hogehoge/hogehoge');

// Tasks
desc('プロジェクト名');
task('deploy', [
    'deploy:prepare',
//    'deploy:lock',
    'deploy:release',
    'deploy:update_code',
    'deploy:shared',
    'deploy:writable',
    'deploy:vendors',
    'deploy:clear_paths',
    'deploy:symlink',
    'deploy:unlock',
    'cleanup',
    'success'
]);

// [Optional] if deploy fails automatically unlock.
//after('deploy:failed', 'deploy:unlock');

下記は実際に実際にデプロイした時のコマンドです。

dep deploy
#OR
dep deploy production

#エラーが出る時は
dep deploy -vvv production

うまくいけば、デプロイ先サーバーの下記パスにソースが置かれます。

ls /var/www/hogehoge/hogehoge/current/  #下記のシンボリックリンク
ls /var/www/hogehoge/hogehoge/releases/1

 SSHパスフレーズ対応

ローカルのSSHに公開キー設定をしてパスフレーズなしでSSH接続できるようにssh-agentを使用するか、keychainをインストールして対応します。

ssh-agentを使用する場合は(keychainは使わない)、サーバーを再起動した際に必ず下記コマンドを実行します。

eval `ssh-agent`
sed '/^export SSH_AUTH_SOCK/d' -i ~/.bashrc
echo "export SSH_AUTH_SOCK="$SSH_AUTH_SOCK >> ~/.bashrc

#デプロイ先サーバー用SSH鍵
ssh-add ~/.ssh/id_rsa
#Enter passphrase for /home/user1/.ssh/id_rsa: ←ここにパスフレーズ入力

#Bitbucket用SSH鍵
ssh-add ~/.ssh/bitbucket/id_rsa
#Enter passphrase for /home/user1/.ssh/bitbucket/id_rsa: ←ここにパスフレーズ入力

keychainを使用する場合は下記のようにします。keychainは上記ssh-agentをいい感じに自動的に行ってくれます。

CentOS6を使用している場合は、下記のようにインストールします。

#CentOS6
sudo yum -y install yum-priorities
sudo yum -y install yum-plugin-priorities
sudo yum -y install "http://mirror.ghettoforge.org/distributions/gf/el/6/gf/x86_64/"$(curl -sL http://mirror.ghettoforge.org/distributions/gf/el/6/gf/x86_64/ |
 egrep gf-release-.+.rpm | sed -r 's/^.+?(gf-release-.+.rpm).+$/\1/')
sudo rpm --import /etc/pki/rpm-gpg/*
sudo yum -y --enablerepo=gf install keychain

Ubuntuを使用している場合は、下記のようにインストールします。

#Ubuntu
sudo apt install keychain

上記インストールが完了したら、下記コマンドでSSH鍵を登録します。

keychain ~/.ssh/id_rsa ~/.ssh/bitbucket/id_rsa
#Enter passphrase for /home/user1/.ssh/id_rsa: ←ここにパスフレーズ入力
#Enter passphrase for /home/user1/.ssh/bitbucket/id_rsa: ←ここにパスフレーズ入力

source $HOME/.keychain/$HOSTNAME-sh

~/.bashrcまたは、~/.bash_profileに下記のように追加します。サーバーを再起動した場合はログイン時にパスフレーズを聞かれるので、必ずログインしてパスフレーズを入力します。

cat << 'EOS' >> ~/.bashrc

if [ -d "$HOME/.keychain" ]; then
    #デプロイ先サーバー用SSH鍵
    [ -f "$HOME/.ssh/id_rsa" ] && /usr/bin/keychain ~/.ssh/id_rsa

    #Bitbucket用SSH鍵
    [ -f "$HOME/.ssh/bitbucket/id_rsa" ] && /usr/bin/keychain ~/.ssh/bitbucket/id_rsa

    source $HOME/.keychain/$HOSTNAME-sh
fi

EOS

これで、パスフレーズなしでSSH接続できるようになったので、実際にBitbucketとデプロイ先サーバーに接続確認をします。

ssh -T bitbucket.org
ssh production

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/20 18:41 編集

    以下コマンドで普通にログインできました。
    $ ssh -A -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p '22' -i '/home/user1/.ssh/id_rsa' 'user1@111.111.111.xxx'
    Warning: Permanently added '111.111.111.xxx' (RSA) to the list of known hosts.
    Last login: Wed Dec 20 18:29:09 2017 from 111.111.111.xxx
    が警告はでるようです。

    パスフレーズなしでもはいれたので、keychainの部分は飛ばしてます。

    以下も問題なく実行できてるようです。
    $ ssh -T git@bitbucket.org
    logged in as user1.

    $ ssh 111.111.111.xxx
    The authenticity of host '111.111.111.xxx (111.111.111.xxx)' can't be established.
    RSA key fingerprint is ec:17:1e:4e:e7:76:48:e6:83:39:41:d1:50:0f:ba:aa.
    Are you sure you want to continue connecting (yes/no)? yes
    上の確認はでました。

    が==2017/12/18 11:05追加==に追記したエラーがやはりでます。

    キャンセル

  • 2017/12/20 19:40

    deployerの最新版を使用している場合は、PHPソースコードの修正も必要になりますが、修正しても同じ現象でしょうか?
    deployer-4.x系でも「server(xxx)->...->forwardAgent()->...」のように「forwardAgent()」が必要になります。

    事態が解決しない場合は、リポジトリのBitbucketをとりあえず、ローカルに変更してみて、デプロイできるか確認してみてはいかがでしょう。
    これでうまくいくのであれば、Bitbucketアクセス部分に問題ありということになると思います。うまくいかないのであればSSHエージェントがカギをうまくフォーワードできていないということになると思います。

    あとは、/etc/ssh_config「ForwardAgent no」になっている場合はエージェントフォワーディングが禁止されているので修正するか、または、「~/.ssh/config」にBitbucket、デプロイ先サーバーともに「ForwardAgent yes」と設定します。

    質問とは関係なくなってしまいますが、Bitbucketを使用しているのであれば、Bitbucketのデプロイ機能を使うのはまずいのでしょうか?
    ----
    https://qiita.com/abeyuya/items/773c26384297efe1f9a1
    https://qiita.com/uitspitss/items/4668a964dbedfb2af67e

    キャンセル

  • 2017/12/21 10:56

    接続先のディレクトリはできてました。
    初回質問の状態からできていたようです。
    $ tree
    .
    ├── release -> /var/www/hogehoge/hogehoge/releases/1
    ├── releases
    └── shared

    ローカルに変更してみましたが初回質問時に投稿した同じエラーが起きました。
    set('repository', 'ssh://user1@localhost/var/www/hogehoge/hogehoge');
    set('shared_files', []);
    set('shared_dirs', []);
    set('writable_dirs', []);

    forwardAgent()を追加してみましたが初回質問時に投稿した同じエラーが起きました。
    server('production', '111.111.111.xxx')
    ->forwardAgent() // ここに追加
    ->user('linux')
    ->identityFile()
    ->set('deploy_path', '/var/www/hogehoge/hogehoge');

    deployerを使ってみたかったので、gitbucketのデプロイは使わずでした。
    しばらくして無理そうなら諦めます

    キャンセル

  • 2017/12/21 16:16

    お力になれずすみません。
    いちおう、私の開発環境で試してみたので、回答を編集しておきました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.26%

関連した質問

同じタグがついた質問を見る

  • PHP

    15652questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Capistrano

    79questions

    Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。