背景
アルバイト先で簡易的なWebサーバーをローカルネット内でGitを使って更新したかったので、sshでアクセスできるリモートリポジトリを作成し、そのリポジトリの内容をGitフックを用いて更新しWebサーバーとして公開する機能を実装しました。
開発環境
- Raspberry Pi 4B 4GB (Raspberry Pi OS)
- Apatch2
- Git
手順
1. Apacheサーバーのセットアップ
サーバー側で以下コマンドでApacheサーバーのインストールを行いました。
sudo apt update
sudo apt install apache2
インストール後にブラウザでhttp://<hostname>.local/
にアクセスし、Apacheサーバーが起動していることを確認しました。
2. Gitリポジトリのセットアップ
サーバー側にGitをインストールし、リモートリポジトリを作成しました。
リモートリポジトリの名前はrepo.git
とし、ホームディレクトリの下に配置しました。
sudo apt install git
cd ~
mkdir repo.git
cd repo.git
git init --bare
3. post-receive
フックの設定
リポジトリにpost-receive
フックを設定しました。これにより、リポジトリに新しいコミットがプッシュされたときにApatchサーバーの情報が更新されるようになります。
cd ~/repo.git/hooks
emacs post-receive
以下のスクリプトをpost-receive
ファイルに記述しました。
#!/bin/sh
echo "Running post-receive hook" >> /tmp/post-receive.log
GIT_WORK_TREE=/var/www/html git checkout -f main >> /tmp/post-receive.log 2>&1
echo "Finished post-receive hook" >> /tmp/post-receive.log
スクリプトに実行権限を与えます。
chmod +x post-receive
4. リモートリポジトリをローカルリポジトリに追加
ローカルマシンのリポジトリにサーバーのリモートリポジトリを追加しました。
# ローカルリポジトリ内に移動
git remote add origin pi@<hostname>.local:~/repo.git
5. pushの実行
ローカルリポジトリからリモートリポジトリにpushを行う。
git push origin main
6. Webサーバーが更新されているか確認する
http://<hostname>.local/
にアクセスし、pushした内容がWebサーバーに反映されていることを確認しました。
まとめ
サーバー側にGitのリモートリポジトリを用意して、Webサーバーのコンテンツを自動更新する仕組みが構築できました。これにより、ウェブサイトのコンテンツが簡単に管理できるようになり、変更も即座に反映することができるようになりました。