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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Capistrano

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

Q&A

解決済

1回答

3239閲覧

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

kaji

総合スコア648

PHP

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

Capistrano

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

0グッド

2クリップ

投稿2017/12/18 09:55

編集2017/12/19 02:06

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.

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gouf

2017/12/18 13:53 編集

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

2017/12/19 02:07

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

回答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

1# ~/.ssh/config 2Host bitbucket.org 3 HostName bitbucket.org 4 User git 5 identityFile ~/.ssh/bitbucket/id_rsa 6 Port 22 7 TCPKeepAlive yes 8 IdentitiesOnly yes 9 ForwardAgent yes 10 11Host production 12 HostName 11.111.111.xxx 13 User linux 14 identityFile ~/.ssh/id_rsa 15 Port 22 16 TCPKeepAlive yes 17 IdentitiesOnly yes 18 ForwardAgent yes

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

bash

1ssh -T bitbucket.org 2ssh production

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

bash

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

Deployer

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

bash

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

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

php

1// deploy.php 2<?php 3namespace Deployer; 4require 'recipe/common.php'; 5 6// Configuration 7set('ssh_type', 'native'); 8set('ssh_multiplexing', false); 9 10set('repository', 'git@bitbucket.org:ユーザー名/レポジトリ.git'); 11set('shared_files', []); 12set('shared_dirs', []); 13set('writable_dirs', []); 14 15// Servers 16server('production', '11.111.111.xxx', 22) 17 ->user('linux') 18 ->configFile('~/.ssh/config') 19 ->forwardAgent() 20 ->set('branch', 'master') 21 ->set('deploy_path', '/var/www/hogehoge/hogehoge'); 22 23// Tasks 24desc('プロジェクト名'); 25task('deploy', [ 26 'deploy:prepare', 27// 'deploy:lock', 28 'deploy:release', 29 'deploy:update_code', 30 'deploy:shared', 31 'deploy:writable', 32 'deploy:vendors', 33 'deploy:clear_paths', 34 'deploy:symlink', 35 'deploy:unlock', 36 'cleanup', 37 'success' 38]); 39 40// [Optional] if deploy fails automatically unlock. 41//after('deploy:failed', 'deploy:unlock');

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

bash

1dep deploy 2#OR 3dep deploy production 4 5#エラーが出る時は 6dep 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は使わない)、サーバーを再起動した際に必ず下記コマンドを実行します。

bash

1eval `ssh-agent` 2sed '/^export SSH_AUTH_SOCK/d' -i ~/.bashrc 3echo "export SSH_AUTH_SOCK="$SSH_AUTH_SOCK >> ~/.bashrc 4 5#デプロイ先サーバー用SSH鍵 6ssh-add ~/.ssh/id_rsa 7#Enter passphrase for /home/user1/.ssh/id_rsa: ←ここにパスフレーズ入力 8 9#Bitbucket用SSH鍵 10ssh-add ~/.ssh/bitbucket/id_rsa 11#Enter passphrase for /home/user1/.ssh/bitbucket/id_rsa: ←ここにパスフレーズ入力

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

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

bash

1#CentOS6 2sudo yum -y install yum-priorities 3sudo yum -y install yum-plugin-priorities 4sudo 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/ | 5 egrep gf-release-.+.rpm | sed -r 's/^.+?(gf-release-.+.rpm).+$/\1/') 6sudo rpm --import /etc/pki/rpm-gpg/* 7sudo yum -y --enablerepo=gf install keychain

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

bash

1#Ubuntu 2sudo apt install keychain

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

bash

1keychain ~/.ssh/id_rsa ~/.ssh/bitbucket/id_rsa 2#Enter passphrase for /home/user1/.ssh/id_rsa: ←ここにパスフレーズ入力 3#Enter passphrase for /home/user1/.ssh/bitbucket/id_rsa: ←ここにパスフレーズ入力 4 5source $HOME/.keychain/$HOSTNAME-sh

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

bash

1cat << 'EOS' >> ~/.bashrc 2 3if [ -d "$HOME/.keychain" ]; then 4 #デプロイ先サーバー用SSH鍵 5 [ -f "$HOME/.ssh/id_rsa" ] && /usr/bin/keychain ~/.ssh/id_rsa 6 7 #Bitbucket用SSH鍵 8 [ -f "$HOME/.ssh/bitbucket/id_rsa" ] && /usr/bin/keychain ~/.ssh/bitbucket/id_rsa 9 10 source $HOME/.keychain/$HOSTNAME-sh 11fi 12 13EOS

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

bash

1ssh -T bitbucket.org 2ssh production

投稿2017/12/19 07:31

編集2017/12/21 07:15
Tomak

総合スコア1652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaji

2017/12/20 09: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追加==に追記したエラーがやはりでます。
Tomak

2017/12/20 10: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
kaji

2017/12/21 01: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のデプロイは使わずでした。 しばらくして無理そうなら諦めます
Tomak

2017/12/21 07:16

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問