git経由でサーバーにファイルをアップする
Pythonのファイルをいじっていて毎回思う事があります。SFTPでアップロードが面倒だ・・・ってかなんでSFTPでアップロードしなければいけないのか? と真剣に考えた事があります。本気で面倒だなと
時間の無駄ではないか?
そもそも、SFTPでテストサーバーにアップして、クライアントソフトでgithubにプッシュするって凄い時間の無駄な気がしています。1ファイルアップするとかなのでそんなに時間がかかるわけではないですが、何回かやっていると非常に 自分は何をしているんだろう? という虚無感に襲われます
アップロード後コマンド実行
HTMLならアップロードしてブラウザで確認とかでできます。自分がやっているのはPythonファイルでAPIを使っているのでブラウザというよりは正直コマンドでテストのために python ●●.py と実行します。
- SFTPでアップ
- SSHに切り替え
- コマンド実行
- githubにアップ
なんだこの無駄!!!と思います。
Windowsで開発すれば起きない問題?
そういうわけではないです。最終的にサーバーにアップしないといけないので、ローカルで開発すればおきないというわけではないです。というか回数はへるかもしれないですが全然減る問題ではないです
考えて見る
githubにアップするのも、サーバーにアップするのも同じファイルです。なので2つの場所にアップすればいいかなーと思ったのでやってみました
さくらのクラウドにgitをインストールしておく
さくらのクラウドにgitをインストールして実行します。今回自分はbuildreeでPythonの環境を構築したのでgitは一緒にインストールされております。
centosユーザーで行う
環境としては、centosユーザーでプッシュするというのを目標にしておきます。
理想的な状態
- centosユーザーでプッシュ
- centosユーザーはgitグループに所属
- リポジトリの場所は/home/centos/gitremote/の中に作成する
- gitリポジトリをcloneする場所は/home/centos/の中
- ローカルでプッシュしたらサーバー側でも反映
- githubにもプッシュをする。リポジトリはプライベートリポジトリ or パブリックリポジトリ
これができるようにしたいと思います。centosは鍵認証としています
ローカル環境
- Windows10 64bit
- クライアントツール:ソースツリー
やってみる
とりあえずやってみます。サーバー側ですが、既にPythonの環境が整っている(gitもインストール済み)の前提となります。buildreeでインストールした直後となります。
リポジトリの作成
まずはリポジトリの作成をしていきます
[centos@localhost ~]$ mkdir /home/centos/gitremote [centos@localhost ~]$ cd gitremote/ [centos@localhost gitremote]$ pwd /home/centos/gitremote [centos@localhost gitremote]$
gitremoteというディレクトリに tw_api.git というリポジトリを作成します。TwitterAPIを使うので、tw_apiとしているだけになります。
[centos@localhost gitremote]$ git init --bare tw_api.git
gitグループを作成
絶対作成する必要はないですが、作っておいたほうが複数人で共有するときに便利かなーと思ったり、なんとなくgitというグループがあればわかりやすい?かなと思うので作りました。centosユーザーをgitグループにいれます
[centos@localhost gitremote]$ sudo gpasswd -a centos git #centosが所属しているグループを確認します [centos@localhost gitremote]$ groups centos centos : centos wheel nobody git
centosのデイレクトリのグループをgitに変更
[centos@localhost gitremote]$ chown -R centos:git /home/centos/
ローカルにクローンしてみる
ソースツリーの設定をしてみます
エラーが出る場合
もし fatal: Couldn't find remote ref master というエラーがでたら、プッシュしてみてください。おそらくそれで成功します
サーバー側でクローンしてみる
ローカルからプッシュできたら、サーバーに反映するようにしたいのでクローンをまずしてみたいと思います
git cloneをする
[centos@localhost ~]$ git clone file:///home/centos/gitremote/tw_api.git [centos@localhost ~]$ ll drwxrwxr-x 4 centos centos 4096 7月 2 14:34 tw_api
無事にできました。グループがcentosのままですね。これはどこかのタイミングで直しておいた方が良いかな・・・
反映させる
ローカルでREADMEを更新してプッシュしてみます。↑の状態だとプッシュしてもリモートサーバーでは反映されておりません。そこで設定を変えます。
ローカルでプッシュしても反映されるようにする
リモートサーバー側の設定を少し変更します。
pushを検知してpullをする
自動でプッシュを検知して、pullするようにします。設定するには hooksフォルダの中にpost-receive というのを定義します
[centos@localhost tw_api]$ vi /home/centos/gitremote/tw_api.git/hooks/post-receive #!/bin/sh cd /home/centos/tw_api git --git-dir=.git pull
実行権限を追加
実行権限を追加してあげます
chmod a+x post-receive
これを保存すればプッシュしたら反映されるようになります。リモートサーバー側はこれで完成です
githubにもプッシュする
githubにもプッシュします。
- リポジトリは作成済み
- SSHによるログイン
がされている状態となります
設定ファイルを変更する
設定ファイルを追加します
[remote "original"] url = git@github.com:xxxxxx/tw_api.git ←追加 url = centos@xxx.xxx.xxx.xxx:gitremote/tw_api.git pushurl = git@github.com:xxxxxx/tw_api.git ←追加 pushurl = centos@xxx.xxx.xxx.xxx:gitremote/tw_api.git
URLを2つにすればOKですこれで両方とも使えるようになります
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS