americandog1993の日記

プログラマー歴半年のメモ

ローカルCentOSからVPSCentOSへpushできるようにする

すごくハマって日曜日の夜潰したのでメモ。

環境

ローカル Vagrant CentOS7
さくらのVPS CentOS7
sshは設定済とする。
ローカル側はVPSSSHログインするユーザで作業。

動機

VPSに直接SFTPアクセスしてファイル操作するのダサいからやめたい。
ローカル開発環境で動き検証してからpushしたい。

git初期設定

ローカル側、VPS側とも最低限の初期設定を済ませておく。

git config --global user.name "americandog"
git config --global user.email "e@mail.com"

下準備

ローカル、VPS共にまず最もシンプルな構成でHelloWorldを組む。
さくらVPS(CentOS7)をWebサーバ化してHelloWorldする - americandog1993の日記

VPS側操作

以下のディレクトリを作成。

$ sudo mkdir /var/www/git

今回の作業ディレクトリを外部から書き込み可能にしておく。

$ sudo chmod -R 777 /var/www/html
$ sudo chmod -R 777 /var/www/git

今回は777としたが、たぶん777より安全な権限指定方法はあるので、各自調べてほしい。
gitディレクトリ下に好きな名前でリポジトリを作成。

$ sudo mkdir /var/www/git/test.git

test.gitでgit initする。
共有リポジトリには--bareと--shareコマンドをつける、らしい。

$ cd /var/www/git/test.git
$ git --bare init --shared

htmlディレクトリにtest.gitをcloneする。

$ cd /var/www/html
$ git clone /var/www/git/test.git

これでVPSのhtml直下にtestリポジトリができる。
最後にhookを作る。
hookを作っておかないとgit/test.gitへpushされた内容がhtml/testに反映されない。

$ vi /var/www/git/test.git/hooks/post-receive

作ったhookに実行権限を与える。

$ sudo chmod +x /var/www/git/test.git/hooks/post-receive

ここらの操作は完全に
自前のサーバーにGitリポジトリを作成してプッシュでサイト更新する - Qiita
の受け売り。

ローカル側操作

まずVPS側と同じように作業ディレクトリをsshログインユーザの所有とする。
これをやり忘れるとハマるので注意。

$ sudo chown -R americandog /var/www/html
$ sudo chown -R americandog /var/www/git

htmlディレクトリにVPSのtest.gitをcloneしてくる。
git clone対象urlは ssh://ユーザ名@ホスト名(IPアドレス):ポート番号/var/www/git/test.git のように記述する。

$ cd /var/www/html
$ git clone ssh://americandog@xxx.xxx.xx.xx:22/var/www/git/test.git

ローカルのhtml直下にもtestリポジトリができる。
html直下に作ってあったindex.htmlをtestに入れる。

$ cd /var/www/html
$ mkdir test
$ mv index.html test/index.html

いよいよローカルからVPSリポジトリにpushしてみる。

$ git add .
$ git commit -m "first commit"
$ git push

確認

VPS側のtest直下にindex.htmlができていれば成功。

$ cd /var/www/html/test
$ ls

ハマった箇所

とにかく権限設定でハマった。
権限をまともに設定していないと作業ユーザでgit cloneができない。
かといってsudo git cloneするとrootでcloneしたことになり、実行者がsshユーザでなくなってしまい、permission denied(public key)エラー等を引き起こす。
権限の理解がまだ疎かなのでかなり試行錯誤するハメになってしまった。

また、ローカルのrsa_id、VPSのauthorized_keysの権限設定も注意したい。
sshで公開鍵認証を使ってアクセスする - Qiita
鍵は600、鍵が入っている.sshは700に権限設定しないと色々問題が起こるようだ。