Rsync を使ったデプロイメント
SSH を使用して Web ホストにアクセスできる場合は、単純な rsync ワンライナーを使用して、Hugo Web サイト全体をインクリメンタルにデプロイできます。
前提条件
- Web サーバーを実行している Web ホストがあること。 これは、共有ホスティング環境または VPS である可能性があります。
- SSH を使用して Web ホストにアクセスすること。
- Hugo で構築された機能的な静的 Web サイトがあること。
ネタバレになりますが、以下のコマンドで Web サイト全体をデプロイできます。
hugo && rsync -avz --delete public/ [email protected]:~/www/
ご覧のように、このコマンドをシェルスクリプト ファイルに記述することで、./deploy
を実行するのと同じように簡単にビルドとデプロイができるようになります。
SSH キーをホストにコピーする
サーバーへのログインをより安全に、対話を少なくするために、SSH キーをアップロードできます。 すでに SSH キーをサーバーにインストールしている場合は、次のセクションに進むことができます。
まず、ssh クライアントをインストールします。 Debian の場合は、以下のコマンドを使用します。
sudo apt-get install openssh-client
次に、ssh キーを生成します。 最初に、ホーム ディレクトリに .ssh
ディレクトリが存在しない場合は、以下のコマンドを実行して作成します。
~$ cd && mkdir .ssh & cd .ssh
次に、以下のコマンドを実行して、rsa_id
という新しいキーペアを生成します。
~/.ssh/$ ssh-keygen -t rsa -q -C "For SSH" -f rsa_id
パスフレーズの入力を求められますが、これは追加の保護レイヤーです。使用したいパスフレーズを入力し、プロンプトが表示されたら再度入力するか、パスフレーズを設定しない場合は空白にしておきます。パスフレーズを使用しない場合、ログイン時にパスワードの入力を要求されないため、非対話的にファイルを転送することができますが、安全性は若干低くなります。
ログインを簡単にするために、以下のコマンドで ~/.ssh/config
ファイルに Web ホストの定義を追加します。 以下のコマンド実行において、 HOST
は Web ホストの IP アドレスまたはホスト名に置き換え、USER
はファイルを転送する際に Web ホストへのログインに使用するユーザー名で置き換えてください。
~/.ssh/$ cat >> config <<EOF
Host HOST
Hostname HOST
Port 22
User USER
IdentityFile ~/.ssh/rsa_id
EOF
次に、以下のように、ssh-copy-id
コマンドで、ssh 公開鍵をリモートサーバにコピーします。
~/.ssh/$ ssh-copy-id -i rsa_id.pub [email protected]
これで、簡単にリモートサーバーに接続できるようになりました。
~$ ssh user@host
Enter passphrase for key '/home/mylogin/.ssh/rsa_id':
SSH キーでログインできるようになったので、Hugo サイトのデプロイを自動化するスクリプトを作成しましょう。
シェルスクリプト
以下のように、Hugo ツリーのルートに deploy
という名前の新しいスクリプトを作成します。
~/websites/topologix.fr$ editor deploy
以下のコンテンツを追加します。このとき、 USER
、HOST
、DIR
の値を自分の好きな値に置き換えてください。
#!/bin/sh
USER=my-user
HOST=my-server.com
DIR=my/directory/to/topologix.fr/ # Web サイトのファイルが保存されるディレクトリ
hugo && rsync -avz --delete public/ ${USER}@${HOST}:~/${DIR} # これにより、ローカルのパブリック フォルダーにないサーバー上のすべてが削除されます
exit 0
DIR
はリモートユーザーのホームからの相対パスであることに注意してください。フルパス (たとえば、 /var/www/mysite/
) を指定しなければならない場合は、コマンドライン内で ~/${DIR}
を ${DIR}
に変更しなければなりません。ほとんどの場合、その必要はありません。
保存して閉じ、以下のコマンドで deploy
ファイルを実行可能にします。
~/websites/topologix.fr$ chmod +x deploy
あとは、以下のコマンドを入力するだけで、Web サイトのデプロイと更新ができます。
~/websites/topologix.fr$ ./deploy
以下のように、あなたのサイトが構築され、デプロイされます。
Started building sites ...
Built site for language en:
0 draft content
0 future content
0 expired content
5 pages created
0 non-page files copied
0 paginator pages created
0 tags created
0 categories created
total in 56 ms
sending incremental file list
404.html
index.html
index.xml
sitemap.xml
posts/
posts/index.html
sent 9,550 bytes received 1,708 bytes 7,505.33 bytes/sec
total size is 966,557 speedup is 85.86
このデプロイメント スクリプトには、他のプロセスタスクも組み入れることができます。