2014.04.19
git-ftp 鵜呑みにできない備忘録
先生、鯖がsshに対応してません! gitでサイト更新ができません!
お得なレンタルサーバーではssh使えないこと多いですよね。
gitのpost-updateを使ってサイトの更新をデプロイできたら、いちいち更新したファイルを覚えてなくてもいいし…あ、css上げるの忘れた!とかもなくなりますしいいですよね。いーなーいーなー。
しかし、鯖をクラスチェンジする金はない。
でも、知っていたんです。
なんか調べてる時に見つけたんですよ。
git-ftpとかいうアイテムを。https://github.com/git-ftp/git-ftp
リモートリポジトリがレンタルサーバーに置けないとしても、更新箇所だけでも手動でアップするよりかは格段に便利な予感。
Aptanaのftpもちょー便利なんですよ!FTPSもSFTPも使えますし、いちいち更新ファイルを覚えていなくても「同期」で一括アップできますし、同期でもファイルの一覧から更新するかしないかも選べます。ちょとした手直しの更新なんてエクスプローラから右クリ一発です。
そこで、どっちがいいか使ってみようと思ってやってみました。
ちょっと色んな事が難しかったんで備忘録つけときます。
この記事のいい加減さ
たぶんちゃんと説明できてません。当記事は参考になりません。ペコ
git-ftpご利用の際はgit-ftp公式の説明をよくお読みになられますよう。
git-ftp.1.md
または、こちら。すごく参考になりました。
インストール
公式のインストールの説明書
Macです。
gitとcurlが必要ですがcurlコマンドは標準で搭載されているらしい。というか、要ると意識しないでやっちゃってました。
SnowLeopardではMacPorts使ってたのでopt/local/binに居るんですよね。
何にも小細工してないMountainLionではusr/binに居ましたがpathが通ってない模様。
この辺よく分からんちんなので、curlはMacPortとかHomebrewとかで落としてきた方がいいのかなぁと。
Portsで落としてきた方には、opt/local/shareにcurl-ca-bundle.crtも入ってましたし…難しすぎ。
ターミナルを起動。ホームフォルダに居ると思うので、そのままgithub.comにある公式からクローンしてくる。
1 2 3 4 5 6 7 |
$ git clone https://github.com/git-ftp/git-ftp.git $ cd git-ftp $ git tag # see available tags タグの一覧を見れ $ git checkout <tag> # checkout the latest tag by replacing <tag> <tag>を最新のタグと置き換えれ $ sudo make install |
#の所は入れなくていいです。
クローンしてきたらgit-ftpに移動。最新のタグにチェックアウトのちsudoでインストール。
sudoって緊張します。求められるPasswordはrootのじゃなく自分のです。表示されないので正確にタッチしてリターン。
私は最初に古い方の公式からクローンしてきたんで、新しい公式からはアップデートをしました。1.0.0-rc.1が最新だったけど、-rc.1ってなにさ?と思って0.9.0のタグからしましま。(アップデートもありUpdating using git参照)
homebrewからもインストールできるようなんで、homebrew入れてたら楽そうでいいです。
git-ftpの設定とイニシャライズ
恐ろしいのでレンタルサーバーにtest用サブドメインを立ち上げました。
ローカルで、テスト用にあらかじめ作って置いたディレクトリ(index.html入り)に移動してgit configに設定をする。
1 2 3 4 5 6 |
$ git config git-ftp.user example.jp-ojiro #レンサバのユーザーネーム $ git config git-ftp.url ftp://host.example.jp:21/test_site #ftpアドレス:ポート番号/ディレクトリ $ git config git-ftp.password hogehoge #ログインパスワード |
初めてUPする時はイニシャライズのコマンドを使います。
1 |
$ git ftp init |
これでftpで繋がりアップロードが始まります。
やっぱりftpsで繋げたいわーという所でコケる
やっぱFTPはこわいわーという事でFTPSで繋がるようやってみたところ大はまりんぐ。
今までもaptanaやあひるで設定していたFTPSサーバーのアドレスを入れたのに
1 |
ftps://ftpsサーバのアドレス:21/test_site |
initすると、そんなホストねーし!と怒りのこもったエラー(妄想)が返ってくる。
Aptanaのftpの設定を覗き見ると、SSL MethodのプルダウンでExplicit-AUTH TSL/SSLを選択してある。そういえば、そんな記憶もなきにしもあらずです。
公式のman pageを見るとURLの項目に
1 |
ftpes://... : FTP over explicit SSL (FTPES) protocol |
えっ!
どうやらgit-ftp内でftpes用のcurlオプションをつけてくれてるらしい。
試しに
1 |
$ git config git-ftp.url ftpes://ftpsサーバのアドレス:21/test_site |
としてみる。ポートはexplicitも同じ21を使う。
そしておもむろにイニシャライズ!init!
あっさりアップが始まりました。(∩・ω・)∩
ここまでの道のり実は相当長かったです…。
プロトコルの表記の仕方だのとは夢にも思わず、証明書のせいかと見当違いを疑ってみたり、知識がないので勉強になりました(´・ω・`)。
しかしAUTHコマンドのトラストストア?(勉強で仕入れた生半可な知識)って何を使ってるんですかね?←ォイ!
えーと、ログを見ると
1 2 3 4 5 6 7 8 9 |
< 220 FTP Server ready. > AUTH SSL < 234 AUTH SSL successful * successfully set certificate verify locations: * CAfile: /opt/local/share/curl/curl-ca-bundle.crt CApath: none * SSLv3, TLS handshake, Client hello (1): } [data not shown] * SSLv3, TLS handshake, Server hello (2): |
あー、これ無いと自前で証明書とか鍵とかを用意しなきゃならないのかな?できんわーw
新しくセットアップする時はこれをチェックしてなかったら入れるようにしよう。
- 参考サイト:
決定版をアップロードしたい訳で。git hooks
いそいそと本番環境に適用しようとして気付いてしまいました。
うっかりdevelopとかの作業中のブランチに居るのに、masterに居る気まんまんでアップロードしたらいやだなぁ。
リモートリポジトリからpullだけをして来るgit-ftp専用のローカルリポジトリを用意したら安心なんじゃ?!ということで!!
そこで颯爽と登場するのがgitのフックであるpost-updateです。
.gitのhooksの中にあるpost-updateを使って、リモートリポジトリのmasterブランチにpushのタイミングで、git-ftp専用リポジトリからのpullを自動発火させます。
ほんとはこれ冒頭でうらやましがってたように、リモートリポジトリがレンタルサーバ上にあって、そのまま直に公開用リポジトリへ!だったら一番いいのですがねw
ま、贅沢は言いません。これでもかなり便利ですから。
最終データであるmasterブランチからgit-ftp専用ディレクトリへpullだけもよかったんですが、作業中debelopブランチのプレビュー用(ローカルサーバ上にview.local.com)もついでに作る事にしました。
まず、post-updateを作成。
1 2 3 4 |
$ cd /Users/ojiro/project/test.git/hooks # hooksディレクトリに移動 $ vi post-update.sample # 中身を書き換え |
中身。参考サイトさんを参照して、このような感じに分岐。書き方さっぱりわからん。まねっこ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/sh #ブランチ名の取得 branch=$(git rev-parse --symbolic --abbrev-ref $1) #本番・プレビュー環境へ反映 if [ "$branch" = "master" ] then cd /Users/ojiro/project/ftp_staging git --git-dir=.git pull orign master #プレビュー環境にも反映 cd /Users/ojiro/project/test_view git --git-dir=.git pull origin master fi #プレビュー環境のみ反映 if [ "$branch" = "develop" ] then cd /Users/ojiro/project/test_view git --git-dir=.git pull origin develop fi exec git update-server-info |
post-updateにリネームして保存。
post-updateに実行権限を付ける。
1 |
$ chmod +x post-update |
できた!これで安心git-ftp(∩・ω・)∩…でも、Lan上のサブマシーンからpushすると発火しない。
どこよ?ないよ?ftp_stagingとかに移動できないよ。と怒らりる。
うーんそうだよね。実行してるのは、別のマシーンでそのマシーンには/Users/ojiroないもんね。
否、プログラムを動かす実行権ないもんね…よく考えたらただのファイル共有でした。サーバもただのファイルサーバーだしw
ありゃーお手上げです。
masterとdevelopにpushするのは、メインマシーンからだけになっちゃいました。
いいんです…しばらく画面共有からpushしたいと思います。
もうちょっと勉強して、違うプロトコルから試してみようか否か( ´・ω・)。
追記:ローカルのマシン全部からpost-updateを発動させたい訳で…
#この記事を書いた人のリモートリポジトリはローカルのMac上にあるのです。
sshを使うことにしました。結局これが一番近道でした…orz
↑こちらをすごく参考にしたらできました(∩・ω・)∩。ペコ
しかし、近道にもこんな障害が!
普段は文句言わないのにsshだと、git-receive-packが見つからないだとか→
~/bashrcで/opt/local/binへのpathを通す。(/opt/はMacPortsでgit-core入れた場合。)
私の環境の場合、~/.bash_profileで通してもダメで、~/.bashrcだと通る。
MacPortsを使ってインストールすると~/.profileにpathが自動で設定されるらしいんだけど、読み込み順位は~/.bash_profileより下。始めに見つけたやつだけ読み込まれるので.profileは読み込まれないことになる…色んなもののPathが切れちゃう。
それ以前に、sshでスクリプト経由の非対話モードだと~/.bash_profileが読み込まれないらすぃ…。
~/.bashrcで通ってるので現状これで好しとして、一応後学の為にenvironmentというキーワードをメモっておくだす。
pathを通すって人生で初めてやりますたよ。
- 参考サイト:
- Mac を git の共有レポジトリにする — BONNOH FRACTION 14
- Macで git push したら git-receive-pack: command not found のエラーが出たときの対処法 | わすれないように.
- [ssh] ssh経由で他のサーバのスクリプトを実行するときに.bash_profileを読ませる方法 – It’s raining cats and dogs.
Permission denied (publickey,keyboard-interactive)だとか→
post-updateでpullする側のoriginのアドレスが間違うていたという凡ミスですた。
クライアント機とサーバ機を混同してssh経由のアドレスを設定してました。
私の場合はリモートリポジトリとローカルリポジトリが同機にあるので、/Users/ojiro/~ という素直なパスで良かったのでした。
webのみなさんありがとう〜
スポンサーリンク
コメントをどうぞ