0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめての記事投稿
Qiita Engineer Festa20242024年7月17日まで開催中!

ApacheとGitフックで構築するRaspberry Piの自動デプロイ環境

Last updated at Posted at 2024-06-29

背景

アルバイト先で簡易的な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サーバーのコンテンツを自動更新する仕組みが構築できました。これにより、ウェブサイトのコンテンツが簡単に管理できるようになり、変更も即座に反映することができるようになりました。

参考サイト

Git - サーバー用の Git の取得
Git - Git フック

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?