GitとLinuxサーバの連携と運用
Git管理されたプロジェクトをLinuxサーバのApacheなどと連携する場合の運用仕様案を提示します。本手順は、GitLabで管理されているPHPベースのWebシステムを、本番サーバへ安全に運用・反映する方法をまとめたものです。
サーバ環境とデプロイ
Gitの最新コンテンツを直接デプロイするのではなく、人間が一度確認する体系を用意する。/var/www以下を同一の持ち主で固定しておけば、Linuxを使う人、WinSCPを使う人、システムを作って必要なものだけデプロイするシステムを作る人などプロジェクトによって適用方法は選べられる設計とする。
/var/www 以下を webというオーナーとする。LinuxのCRONはrootで行うとする。
- PHPシステム
- 静的HTML
対象構成:
Git取得領域
/var/www/git/[PROJECT]
本番領域
/var/www/[HOSTNAME]
Document_Root
/var/www/HOSTNAME/html
本運用では、
GitLab
↓
/var/www/git/[PROJECT]
↓
管理者判断
↓
/var/www/[HOSTNAME]
という2段構成を採用します。
最新版は自動取得されますが、本番反映は手動で実施します。
運用方針
採用理由
本番サーバへ自動デプロイすると、
- 誤ったソースを即座に本番へ反映してしまう
- 検証前のソースが公開される
- ロールバックが複雑になる
- Gitに不慣れな担当者が対応できない
といった問題があります。
そのため、
最新版取得と本番反映を分離
します。
ディレクトリ構成
Git管理領域
/var/www/git/[PROJECT]
GitLabから取得したソースを保管します。
本番領域
/var/www/[HOSTNAME]
サーバ管理者向け手順
Gitのインストール
Rocky Linux / AlmaLinux
dnf install -y git
SSH鍵作成
ssh-keygen -t ed25519
公開鍵をGitLabへ登録する。
確認
cat ~/.ssh/id_ed25519.pub
GitLab接続確認
SSHポートが20022の場合
ssh -p 20022 -T git@gitlab.example.jp
成功例: Welcome to GitLab, @username!
初回取得
mkdir -p /var/www/git
cd /var/www/git
git clone ssh://git@gitlab.example.jp:20022/group/project.git
普段はWeb担当者も参照できるように
所有者設定
chown -R web:ftp /var/www/git/project
とする。
Git自動取得
更新スクリプト
ファイル
vi /usr/local/bin/git-pull-project.sh
#!/bin/bash
set -e
REPO="/var/www/git/PROJECT"
chown -R root:root "$REPO"
git -C "$REPO" pull
chown -R web:ftp "$REPO"
権限付与
chmod 700 /usr/local/bin/git-pull-project.sh
Cron登録
rootで
crontab -e
登録内容
*/5 * * * * /usr/local/bin/git-pull-project.sh >/dev/null 2>&1
これにより、
GitLab
↓
/var/www/git/PROJECT
が常に最新状態になる。
Web担当者・システム担当者向け手順
最新版の確認
取得済ソース確認
cd /var/www/git/[PROJECT]
git status
Commit履歴確認
git log --oneline -10
本番との差分確認
rsync -avn \
--exclude='.env' \
/var/www/git/[PROJECT]/src/ \
/var/www/HOSTNAME/
反映対象のみ確認する場合
本番反映
rsyncで反映
rsync -av \
--exclude='.env' \
/var/www/git/PROJECT/src/ \
/var/www/HOSTNAME/
除外するもの
オプション説明
--exclude='.env'
理由
- DB接続情報
- APIキー
- メール設定
ログも除外する場合
rsync -av \
--exclude='.env' \
--exclude='logs/' \
/var/www/git/PROJECT/src/ \
/var/www/HOSTNAME/
など本番固有情報を保護するため。
WinSCPによる運用
GitやLinuxコマンドに不慣れな担当者向け。
コピー元
/var/www/git/[PROJECT]/xxxコピー先
/var/www/[HOSTNAME]/xxx
WinSCPでドラッグ&ドロップによる反映が可能。
メリット
- 本番への自動反映事故を防止
- GitLabの最新版を常に保持
- Git管理と公開領域を分離
- WinSCPでも運用可能
- Git操作に詳しくない担当者でも対応可能
- ロールバックしやすい
- サーバ管理者とWeb担当者の役割分担が明確
