はじめに
対象読者
- html 等のファイルを静的に出力するタイプの CMS を使っている人
- 静的 CMS とは? たとえば……
- Netlify などは、リポジトリをベースにサイトデプロイしてくれる CMS といえるわけですが、その逆方向のケアをしてあげるということになります
- GitHub 等のリポジトリへ差分バックアップを取って管理するようにしたい人
- 別に BitBucket でも GitLab でも構わないので、適宜読み替えてください
- 特に CMS とか関係ないけれど、とにかく cron で定期的に GitHub へバックアップする方法を知りたい人
本記事におけるサーバ環境
- Ubuntu 20.04
前提
- git コマンドが使える環境
- root 以外のユーザーで SSH ログイン
- あらかじめ GitHub 側でリポジトリを作成しておく
- ここでは仮に cms-static とする
設定
静的ファイルを置いているディレクトリの Git リポジトリ化
- cd で静的ファイルを置いているディレクトリへ移動
- Git リポジトリ化する
git init
git config --global
- もしまだ git config --global を設定していなかったら、する
- name, email ともに自身のものを設定
git config --global user.name "GitHubUserName"
git config --global user.email GitHubRegisteredAddress@domainhogehoge.com
キーペア作成/登録
- もしまだキーペアを作成/登録していなかったら、する
キーペア作成
- 4096 bit で作成する
ssh-keygen -b 4096
- 以下が表示されたら enter を押すとデフォルトの id_rsa で作成される
- 特にこだわりがなければそのままで作成した方がよい
- というのも GitHub はデフォルトだと他のキー名を読んでくれない
- 他のキー名へ変更する際には必ず config ファイルを作成しましょう
Enter file in which to save the key (/user/username/.ssh/id_rsa):
- もし他のキー名へ変更する際の config ファイルの中身
- 例えば github_rsa へ変更する場合
/home/ptnaweb/.ssh/config
Host github github.com
HostName github.com
IdentityFile ~/.ssh/github_rsa
User git
公開キーの登録
- GitHub の管理画面から登録してください
リモートリポジトリの登録
- cms-static という既に GitHub に作ってあるリポジトリを push origin の向かい先として登録する
git remote origin git@github.com:GitHubUserName/cms-static.git
- 正しく登録されたかどうかは、以下コマンドで確認
git remote -v
リポジトリへの push テスト
- 一度手動で実行してみるとよいでしょう
- 初回実行時に fingerprint の登録云々と訊かれるので yes で進める
git add -A
git commit -m "backup_`date '+%Y/%m/%d'`"
git push origin master
cron
- 以下コマンドで cron の編集ファイルを開く
crontab -e
- 以下を記述
- 毎日 03:00 に Git リポジトリ化されている /var/www/cms/static/ の変更を add, commit して push するよ、という内容です
- 注意点としては date の取得時に % をエスケープしてあげる必要があるということ
0 3 * * * cd /var/www/cms/static/; git add -A; git commit -m "backup_`date '+\%Y/\%m/\%d'`"; git push origin master;
検証
GitHub リポジトリ
- リポジトリを確認して、正しく反映されていればよしです
おわりに
感想
- CMS 内に差分管理できる機能を備えたものもありますが、 GitHub で一元的に管理できるようになっていると、一覧性が担保できてわかりよいですね
- cron の中で日付を記述する時にはエスケープ使わないといけない、というのがちょっとしたクセモノ
関連して
- そもそも出力された静的ファイルは、管理サーバ内ではなく外に置いておきたいですよね! というニーズを満たすために、以下の記事を書いています