概要
AWS EC2のLinuxにファイル編集を行う際、VScodeのremote-sshを使用していたのですが、
このremote-sshがリソースをバカバカ食ってサーバーを落とすことが多々ありました。
そこで別の方法を模索した際に、ローカルのVScodeで編集してリモートのgitにpushする方法となりました。その際問題点などがあったので、備忘録として記載していく。
前提条件
・ローカルPCからリモートに対してssh接続できる
・ローカル/リモートにgit環境を構築している
・webapplicationの作成で/var/www/test 配下を使用
①リモート環境にベアリポジトリを作成
ベアリポジトリ(bare repository):
gitの変更記録を保持するリポジトリ。基本的にpushするリポジトリはベアリポジトリである必要がある。対するノンベアリポジトリと違い作業ディレクトリがない。
$ cd ~/var/www/test/repo/remote.git ※フォルダなかったのでmkdirで作成
$ git init --bare
一応ベアリポジトリとなっているか確認
$ git config --get-all core.bare
true ※trueとなっていればベアリポジトリ
もしノンベアリポジトリであれば下記で変更
$ git config core.bare true
② リモート環境にノンベアリポジトリを作成
$ cd ~/var/www/test
$ git init
$ git pull repo/remote.git
③ ベアリポジトリに更新があった際、ノンベアリポジトリを自動更新させる
gitのhookという仕組みで自動更新をおこなうことができます
(pushが行われた際、/.git/hooks/post-receive のスクリプトが実行される)
$ cd ~/var/www/test/repo/remote.git/.git/hooks
$ mkdir post-receive
$ vi post-receive
以下内容を追記
#!/bin/sh
cd ~/var/www/test || exit
unset GIT_DIR
git pull repo/remote.git
パーミッションも変更しておくこと!
$ chmod 755 post-receive
④ローカル環境からpush
ローカル環境にリモートリポジトリを落としてくる(任意の作業場所)
$ git init
$ git clone ssh://ec2-aws/var/www/test/repo/remote.git
※ssh接続のconfig設定で"ec2-aws"をhostとして登録してます
適当にpushをしてみる
$ git remote add ec2 ssh://ec2-aws/var/www/test/repo/remote.git
$ git push ec2 master
無事ノンベアリポジトリの作業ディレクトリも自動更新されました
参考資料
・gitのノンベアリポジトリについて
https://qiita.com/devzooiiooz/items/56a02342d9d65d79f6c3