posts
【第5回】環境づくり編 — SSH・ufw・Nginx・Hugoを準備する
(更新 )この記事を読み終えると、サーバーにSSHで入れて、ブラウザでNginxのページが表示され、手元のPCでHugoが使える状態になります。
コマンドの xxx.xxx.xxx.xxx はサーバーのIPアドレス、example.com は自分のドメインに置き換えてください。Hugo・SSH・Nginxがそれぞれ何をするものかは 第2回 にまとめています。
操作手順
1. SSHでサーバーに入る
PowerShellで打ちます。
ssh root@xxx.xxx.xxx.xxx
初回は Are you sure you want to continue connecting と聞かれるので yes。続けてrootパスワードを入力します(入力中は何も表示されませんが、打てています)。

Connection timed out で入れない場合は、ConoHaのセキュリティグループを確認してください。筆者はここで丸1日ハマりました。→ ConoHa VPSでSSH接続できずハマった話
2. サーバーを最新にする
ここからはサーバーの中で打ちます。
apt update && apt upgrade -y
3. Nginxを入れる
apt install nginx -y
systemctl status nginx
active (running) と出ればOK。ブラウザで http://xxx.xxx.xxx.xxx を開き、「Welcome to nginx!」が出れば成功です。
4. ファイアウォール(ufw)を設定する
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status
22(SSH)、80(HTTP)、443(HTTPS)が ALLOW になっていればOKです。
ConoHaの管理画面のセキュリティグループとは別の「サーバーの中の関所」なので、両方で許可しないと通信は届きません。
5. SSHを鍵認証にする
手元のPCのPowerShellで鍵を作ります。質問はすべてEnterでOKです。
ssh-keygen -t ed25519
公開鍵をサーバーに登録します。
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh root@xxx.xxx.xxx.xxx "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
もう一度 ssh root@xxx.xxx.xxx.xxx で入り、パスワードを聞かれなければ成功です。
最後に、サーバーでパスワードログインを止めます。
nano /etc/ssh/sshd_config
PasswordAuthentication の行を PasswordAuthentication no にして保存(Ctrl+O → Enter → Ctrl+X)し、再起動します。
systemctl restart ssh
6. サイトの置き場所とNginxの設定を作る
mkdir -p /var/www/yourlog/public
nano /etc/nginx/sites-available/yourlog
次の内容を貼って保存します。
server {
listen 80;
server_name example.com www.example.com;
root /var/www/yourlog/public;
index index.html;
}
設定を有効にして、確認してから反映します。
ln -s /etc/nginx/sites-available/yourlog /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/default
nginx -t
systemctl reload nginx
nginx -t で syntax is ok と test is successful が出てから reload してください。
7. 手元のPCでHugoのサイトを作る
第2回でHugoを入れていれば、PowerShellで作れます。
hugo new site mysite
cd mysite
見た目(テーマ)はHugo公式サイトから選ぶか自作します。このブログはHTML/CSSで自作しました。
Nginxの設定ファイルを1行ずつ読む
手順6で貼った設定は、最初は筆者もコピペで使っていました。短いですが、1行ずつにはっきりした役割があります。
server { ... }
「ここから1つのWebサイトの設定です」という枠です。1台のサーバーに server { } を複数並べれば、複数のサイトを動かすこともできます。
listen 80;
どのポート番号で通信を待つかです。80 はHTTP(暗号化なし)の決まった番号です。第6回でHTTPS化すると、Certbotが listen 443 ssl; という行を自動で足してくれます。443 はHTTPS(暗号化あり)の番号です。
server_name example.com www.example.com;
どのドメイン名で来たときに、この設定を使うかです。ここに書いていない名前で来たアクセスには、この設定は使われません。www ありとなしを両方書いているのは、どちらで来ても同じサイトを見せるためです(番外編1で、1つにまとめます)。
root /var/www/yourlog/public;
配るファイルが置いてある場所です。誰かが https://example.com/posts/abc/ を開くと、Nginxは /var/www/yourlog/public/posts/abc/index.html を探しに行きます。第7回で、Hugoが作った public フォルダの中身をここに送ります。
index index.html;
フォルダだけを指定されたときに、代わりに返すファイル名です。https://example.com/ のようにファイル名がないアクセスには、index.html を探して返します。
ufw・セキュリティグループとの関係
listen 80; で待っていても、そのポートがConoHaのセキュリティグループと、サーバーの中のufwの両方で許可されていないと、外からの通信はそもそもNginxまで届きません。Nginxの設定は「届いた通信をどう扱うか」のルールで、「届くかどうか」は別の層の話です。この切り分けができるようになってから、トラブルの原因を探すのがかなり速くなりました。
書き換えたら必ず nginx -t
設定を書き換えたら、毎回この順番で打つようにしています。
nginx -t
systemctl reload nginx
nginx -t は「この設定ファイル、文法は正しい?」を確認するコマンドです。確認せずに反映すると、書き間違い1つでサイト全体が表示されなくなることがあります。
つまずきやすい注意点
SSHが Connection timed out になる
ConoHaのセキュリティグループに IPv4v6-SSH が付いているか確認してください。サーバーの中の設定ではなく、管理画面側の問題です。→ ConoHa VPSでSSH接続できずハマった話
ufwを有効にする前に22番を許可する
順番を逆にすると、SSHで入れなくなって締め出されます。締め出されたらConoHaの管理画面の「コンソール」から入って直せます。
パスワードログインを止める前に、鍵で入れることを確認する
今のSSH画面は閉じずに、別のPowerShellで鍵ログインを試してください。失敗したまま止めると入れなくなります。
また、Ubuntu 24.04では /etc/ssh/sshd_config.d/ の中のファイルにも PasswordAuthentication yes が書かれていて、そちらが優先されることがあります。止めたはずなのにパスワードを聞かれる場合はそこを確認してください。設定したあとは、サーバーで sshd -T | grep passwordauthentication を打ち、no になっているか確かめるのが確実です。筆者はこれを確かめ忘れて、1か月以上 yes のままにしていました(→ VPSのSSHを点検した話)。
設定ファイルにコピペすると、文字が勝手に変わることがある
チャットやメモアプリからコピーすると、www.example.com が [www.example.com](http://www.example.com) のようなリンクの書き方に化けて貼られることがあります。筆者は実際にこれで nginx -t が通らなくなりました。貼ったあとに中身を目で確認してください。→ CSSが404になった原因はフォルダの権限だった
nanoの .save ファイルを残さない
nanoが途中で閉じると、yourlog.save のようなファイルが残ることがあります。sites-enabled の中に残っていると、それも設定として読まれてエラーになります。ls /etc/nginx/sites-enabled/ で余計なファイルがないか確認してください。
ページが 403 Forbidden になる
ファイルの読み取り権限が足りていません。
chmod -R 755 /var/www/yourlog
権限の仕組みと、筆者が何度もハマった話は CSSが404になった原因はフォルダの権限だった にまとめています。
秘密鍵は絶対に人に渡さない
id_ed25519(.pub が付いていない方)が秘密鍵です。渡してよいのは .pub が付いた公開鍵だけです。