ローカルCentOSからVPSCentOSへpushできるようにする
すごくハマって日曜日の夜潰したのでメモ。
動機
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
$ git add . $ git commit -m "first commit" $ git push
ハマった箇所
とにかく権限設定でハマった。
権限をまともに設定していないと作業ユーザでgit cloneができない。
かといってsudo git cloneするとrootでcloneしたことになり、実行者がsshユーザでなくなってしまい、permission denied(public key)エラー等を引き起こす。
権限の理解がまだ疎かなのでかなり試行錯誤するハメになってしまった。
また、ローカルのrsa_id、VPSのauthorized_keysの権限設定も注意したい。
sshで公開鍵認証を使ってアクセスする - Qiita
鍵は600、鍵が入っている.sshは700に権限設定しないと色々問題が起こるようだ。
参考
GitHub - GitHubからクローンできない。(38609)|teratail
【bitbucket】git cloneで`Permission denied (publickey).`や`Bad owner or permissions`と言われたときの対処法 - tweeeetyのぶろぐ的めも
自前のサーバーにGitリポジトリを作成してプッシュでサイト更新する - Qiita
Gitで”Permission denied (publickey).” が出たときのメモ - Qiita
Gitリモートリポジトリ構築 CapmNetwork
Gitのフックの説明と挙動の検証 - Qiita
gitでsshのポート番号を指定する | 黒川仁の文具堂ブログ三昧
CentOSにSSH鍵認証で接続するGitリポジトリを作成
git のリポジトリに ssh を利用してアクセスできるようにする. - It_lives_vainlyの日記
No such remote 'origin' - Qiita
gitのoriginのurlを変更する。 - 僕の今さら日記
共用サーバーにGitリモートリポジトリを設置、pushで公開できるようにする | Tips Note by TAM
今回はめちゃくちゃ調べたが、半分わかって半分わかってない感じ。
とりあえず動かせたのでよしとする。