🍙

Nginx で配信するサイトを git で更新する

2021/07/29に公開

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

ブラウザから表示を確認します。


おわりに

おわりです。

参考

Discussion