🍙
Nginx で配信するサイトを git で更新する
WEB サイトの内容を git で管理すると便利なことがあると思います。ここでは git push
すると WEB サイトの内容が更新されるような設定を構成します。
ベアレポジトリを作る
リモート (Web サーバのある端末) にベアレポジトリを作成します。専用のユーザを作るなどしたほうが良いかもしれません。
$ # ここはリモート
$ mkdir ~/hoge.git
$ cd ~/hoge.git
$ git --bare init --shared
レポジトリをリモートでクローンする
先程作成したレポジトリをリモートでクローンします。このノンベアレポジトリが WEB サイトの内容として公開されます。
$ # ここはリモート
$ cd
$ git clone ~/hoge.git ~/hoge
push を受け取ったときの hook を書く
ベアレポジトリが git push
を受け取ったときに発火する hook を記述します。この hook は先程のノンベアレポジトリ上で git pull
します。
$ # ここはリモート
$ vim ~/hoge.git/hooks/post-receive
$ chmod +x ~/hoge.git/hooks/post-receive
post-receive
#!/bin/sh
cd ~/hoge/
git pull
Nginx の設定を適当に書く
~/hoge/ を WEB サーバで公開するような設定を記述します。
$ # ここもリモート
$ sudo vim /etc/nginx/sites-available/hoge.conf
$ sudo ln -s /etc/nginx/sites-available/hoge.conf /etc/nginx/sites-enable/hoge.conf
hoge.conf
server {
listen 80;
server_name example.com;
index index.html;
root /home/user/hoge/;
# . から始まるやつは見せない
location ~ /\. {
internal;
}
}
ローカルから適当に push してみる
ローカル環境から git push
して更新されることを確認します。
$ # ここはローカル
$ git clone user@example.com:hoge.git
$ cd hoge
$ vim index.html # 適当な HTML を書く
$ git add index.html
$ git commit -m 'add index.html'
$ git push
ブラウザから表示を確認します。
おわりに
おわりです。
参考
- @laineus, 自前のサーバーにGitリポジトリを作成してプッシュでサイト更新する, 2020-12-22 更新.
Discussion