Hugoをgitのhookで自動デプロイ(レンタルサーバー ホスティング編)
Publish date: 2019-08-30
Last updated: 2019-08-31
Last updated: 2019-08-31
FirebaseやNetlifyでHugoを使ってみた。
合わせて普通のレンタルサーバーで同じような事をgitのhookを使って行ってみました。
環境はSSHでの接続が行える場合を想定しています。
レンタルサーバーにhugoを入れる
hugoはバイナリで落とせる。
ファイルをwgetして配置して使えるようになる。
mkdir bin
wget https://github.com/gohugoio/hugo/releases/download/v0.57.2/hugo_0.57.2_Linux-64bit.tar.gz
tar xzvf hugo_0.57.2_Linux-64bit.tar.gz
/path/to/hugo version
サーバーにGitリポジトリを作成しHookを登録
サーバー側にGitリポジトリを作成する。 最初はプッシュ・デプロイ用1つでいいのではと思ったけど、試してみるとエラーが発生した。 確かにworkのファイルがリポジトリと同じ保証もないし、よくないみたいなのでbareリポジトリを作る方針にした。
git init --bare ./bare.git
git clone ./bare.git/ deploy
bareリポジトリにプッシュがあった場合のHookを登録する。
cd bare.git/hooks/
vim post-receive
post-receiveは以下の内容
#!/bin/sh
cd /path/to/git/deploy/
unset GIT_DIR
git reset --hard HEAD
git pull
git submodule init
git submodule update
/path/to/hugo -d /path/to/web/site
作ったファイルに権限を与えておく。
chmod +x post-receive
ローカルからサーバーにファイルをpush
ローカルでHugoのサイトを作成し、サーバーのリポジトリにpushする。 (自分はTortoiseGit、コマンドで作業を行いました)
最初にサーバーからローカルにリポジトリをクローンする。 SSHで公開されている場合、リースのURLは以下のような指定になります。
ssh://username@servername:portnumber/path/to/git/bare.git
次にHugoサイトの初期化とテーマの取得を行う。
hugo new site sitename --force
cd .\sitename\
git submodule add https://github.com/olOwOlo/hugo-theme-even ./themes/even
これで、commit&pushでサイトが反映されるようになる。
TortoiseGitの認証をキーで行う
以上までの設定だとTortoiseGitでpushを行うたびにパスワードが聞かれた。 そこで鍵認証を行うようにした。
コマンドで以下を実行し、公開鍵・秘密鍵を作成する。 パスフレーズはなしとしました。
> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username/.ssh/id_rsa.
Your public key has been saved in C:\Users\username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:****************** ********@******
The key's randomart image is:
+---[RSA 2048]----+
| . .... |
…
| .o=+o= .=+== |
+----[SHA256]-----+
作成した公開鍵をローカルからサーバーに送る。
scp -P portnumber C:\Users\username\.ssh\id_rsa.pub user@servername:/path/to/home/
サーバー側で公開鍵の登録を行う。
cat id_rsa.pub >> ./.ssh/authorized_keys
chmod 600 ./.ssh/authorized_keys
これでssh認証をキーで行える。 TortoiseGitから使う場合、Putty認証キーの登録を次のように行う。
- インストールしたTortoiseGitの中にあるPuTTYgenを起動する
- Loadボタンをクリックする
- C:\Users\username.ssh\id_rsaを選択する
- Save private keyで秘密鍵をid_rsa.ppkと保存する
- TortoiseGitの設定にあるGit>リモートのPutty認証キーとしてid_rsa.ppkを指定する