最近、制作において手動で FTP のアップロードをすることが全くなくなった(´°ム°`)です。
Git を使い始めたら、 FTP を使うことがほぼなくなったのですが、依頼内容によっては FTP でアップロードまでしなければならない時があったりします。
そんな場合、最近では Git に Push したら CI が自動でそれを検知して lftp でミラーリングアップロードされるようにしています。
まだ FTP でアップロードしているの???
制作会社によっては、 FTP でのアップロードはまだまだ使われているので、案件によっては、アップロードするまでを対応しなければならないこともあったりします。
しかし、手動でのアップロードだと、複数人での作業だと気をつけていても先祖返りの問題おきたり、誰かがアップロードしたのを取り込まなきゃ行けなかったり、何かと面倒です。一人で使ったとしても、アップ漏れやディレクトリ違いなんかが起きることもよくありました。
そんな問題を起こすのはもういやになったので、今は全部自動化させてアップロードできるようにしています。
Git + CI
ここは今回は余談程度。
昨年 VPS を契約してからは、GitLab と GitLab CI を入れて、pushされたらデモサーバーに展開(rsync等)されるような仕組みを構築しました。
CI ツールは、インストールなしで使うなら Travis CI とか サーバーにインストールして使うのなら、Jenkins 先生なんかが有名なのですが、自分は GitLab を導入した際に、 GitLab CI も導入してみたので、これを使っています。
機能的に言えば Jenkins 先生のほうがはるかにできることは多いのですが、そこまで必要ないのと、動作が軽めのものを利用したいというのもあり、 GitLab CI を活用しています。
何より、GitLab との連携が楽ですからね。
CI って必須???
先に CI が必須かどうか書いておこうと思うのですが、結論からいうと、不要です。
Git さえあれば事足りるはずです。
Git にはフックがあるので、必要なフックにコマンドを書いてしまえばいいだけだったりします。
なので CI の導入が面倒な方はフックを利用してみてください。
簡単な方法としては、下記が参考になるかと思います。
サーバー側でも $ git pull
してしまうのが早いですよね。
Git とか CI 使うとかのことはこのへんまで。
lftp とは?
ダラダラ前置きかいてしまったのですが、本題はここ、lftp について。
lftpとは???
LFTPは、UNIXおよびUnix系システム向けのコマンド行ファイル転送プログラム(FTPクライアント)の1つ。Alexander V. Lukyanov が開発し、GNU General Public License でリリースされている。
FTPだけでなく、プロトコルを含んだURLの指定でFTPS、HTTP、HTTPS、HFTP、FISH、SFTPも使える。特に便利な機能は、FXP(クライアントを経由せずに、2つのFTPサーバ間でデータを転送させるプロトコル)をサポートしている点である。
引用元:Lftp - Wikipedia
コマンドで FTP のアップロードができるよ!というクライアント。FTPのコマンドでは足りないので、最新版をすべてアップロード!みたいなミラーリングでアップロードするような場合は、 lftp を使えばコマンド一つで終わります。
lftp でミラーリングアップロードするコマンド
私の場合は下記のようにしてアップロードしています。
lftpのミラーリングアップロードコマンド
lftp -u username,password -e "mirror -Rev -X .htaccess htdocs/. public_html/." server.com
上記の例は、server.com のサーバー にusernameとpassword を使ってアクセスして、 ローカルの htdocs
の中身を public_html
に .htaccess を除いて ミラーリングアップロードということをするコマンドになります。
少し細かい部分説明をすると、 最初の -e
は mirror コマンドに複数のオプションを付けられるようにする lftp のオプションです。
また、 そのあとの -Rev
は mirror のオプションです。 -R
がローカルからサーバーへのミラーリングにするオプション(入れないとサーバーからローカルへのミラーになるので注意)で、 まんなかの -e
がローカルにないファイルをミラー先でも削除をするオプションで、最後の -v
が 動作のプロセスを全部出力してくれるオプションです。そのあとの -x
はスキップするファイルの指定。
オプションや lftp の詳しい使い方は、下記を参考にしていました。
blog.paz-para.com » Blog Archive » lftpでミラーリング(2)
自分はこの lftp のコマンドを、Git の push を契機に動かして、Git にいれた最新の状態がサーバーにアップロードされるようにしています。
FTP で 必要ファイルのみ手動でアップロードするのもいいのですが、ヒューマンエラーは起きてしまうものなので、出来る限りそれを少なくするためにも、サーバーへのアップロード方法を見なおしてみてはいかがでしょうか?