« おすすめ逆引き | メイン | deprecated対応 »

Git

FTPのみのレンタルサーバーをGitで更新したい

 ワードプレスで満足というかワードプレスでしかWEBコンテンツ作れない人が好んで選択する格安レンタルサーバ。 まもなく限界となりWEBアプリケーション構築となった時、ssh接続できない、Git管理できない。

 何百何千ものファイルをFTP管理しているつもりになって不要ファイルの肥溜めサーバーとなるのは火を見るより明らか・・・。 FTPでしかコンテンツを管理できないのを何とかできないか・・・ GitがFTPプロトコルをしゃべってくれれば良いものの今更FTPなのかクローンとフェッチのみ。

 調べてみると、git-サブコマンド(git-subcommand)を応用した "git-ftp" ツールが見つかります。さすが Git コマンドは奥が深い。
 前提 git-ftp version 1.6.0 早速 導入・・・▼
 本家
https://github.com/git-ftp/git-ftp/blob/master/INSTALL.md
によれは、シェルスクリプト1ファイルで実現。 このテキストファイルである "git-ftp" をダウンロードし
$ curl https://raw.githubusercontent.com/git-ftp/git-ftp/master/git-ftp > git-ftp
実行権限を付け
$ chmod +x git-ftp
外部コマンド検索対象のパスへ移動してインストール完了。
$ sudo mv git-ftp /bin/.
Windows Git Bash の場合、下記へ配置するだけでOK。
C:\Program Files\Git\usr\bin\git-ftp

 Git管理されたディレクトリへ移動後、 FTP接続ホスト名と同期させたいディレクトリまでの相対パスを登録(次のように省略すると"ftp://example.com:21/myapp"のように補完される模様)。
$ git config git-ftp.app1.url "example.com/myapp"
FTP接続ログインIDを登録。
$ git config git-ftp.app1.user "MyLoginid"
FTP接続パスワードを登録。
$ git config git-ftp.app1.password "MyPassword"
"app1"は複数の接続先・配置パスを識別する場合の任意IDで 1つだけなら省略可能。

●ローカルコンテンツがまだFTPサーバーに存在しない場合。
$ git ftp init -v -s app1
で、Git管理されたローカルコンテンツの現状のコミット状態がFTPサーバーに転送・記録される。前提と異なりFTPサーバーの myapp 内に既にファイルが存在すると上書きされてしまうので注意。
 あとはローカルコンテンツを通常通りGit管理しつつ、必要に応じ
$ git ftp push -v -s app1
でFTPサーバーへリリース。もちろん不要となったファイルは削除される。
 以上で、当初の目的を達成(FTPサーバー上にGitリポジトリを保持するわけではない)。ちなみに "-v" や "-vv" は、詳細な動作情報を表示するので、障害時の切り分けに。

●ローカルコンテンツがFTPサーバーに等しく存在する場合(git ftp initで開始していれば無用で、当初の目的からして使わない)。
$ git ftp catchup -v -s app1
で、FTPサーバーの myapp/.git-ftp.log にローカルコンテンツのコミット状態が記録され、以降 同期している前提で更新される。ちなみにFTPサーバーにディレクトリ myapp が存在しなければ作られる。
 ローカルコンテンツがFTPサーバーより古いと先祖返りやゴミファイルが残るので注意。

●確認できたセキュアなFTPサーバー接続例
git-ftpスクリプトで使用されている curlコマンド前提。
$ curl --version
〇 curl 7.61.1、× curl 7.19.7

FTPサーバー接続プロトコルが、FTP over explicit SSL (FTPES) protocol でポート番号21の場合。
$ git config git-ftp.app1.url "ftpes://example.com:21/myapp"

curl: (51) SSL: no alternative certificate subject name matches target host name 'example.com'
などの証明書エラーとなる場合は --insecure オプションで回避可能。
$ git ftp init --insecure -v -s app1
参考
https://github.com/git-ftp/git-ftp/blob/master/man/git-ftp.1.md#url

トラックバック

このエントリーのトラックバックURL:
https://www.remix.asia/cgi/mt/mt-tb.cgi/7716

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)