diff options
Diffstat (limited to 'vhosts/blog/content/posts/2022-10-28/setup-server-for-this-site.ndoc')
| -rw-r--r-- | vhosts/blog/content/posts/2022-10-28/setup-server-for-this-site.ndoc | 309 |
1 files changed, 309 insertions, 0 deletions
diff --git a/vhosts/blog/content/posts/2022-10-28/setup-server-for-this-site.ndoc b/vhosts/blog/content/posts/2022-10-28/setup-server-for-this-site.ndoc new file mode 100644 index 00000000..97b19b4a --- /dev/null +++ b/vhosts/blog/content/posts/2022-10-28/setup-server-for-this-site.ndoc @@ -0,0 +1,309 @@ +--- +[article] +title = "【備忘録】 このサイト用の VPS をセットアップしたときのメモ" +description = "GitHub Pages でホストしていたこのサイトを VPS へ移行したので、そのときにやったことのメモ。99 % 自分用。" +tags = [ + "note-to-self", +] + +[[article.revisions]] +date = "2022-10-28" +remark = "公開" + +[[article.revisions]] +date = "2023-08-30" +remark = "ssh_config に IdentitiesOnly yes を追加" +--- +<article> + <section id="intro"> + <h>はじめに</h> + <p> + これまでこの blog は GitHub Pages でホストしていたのだが、先日 VPS に移行した。 + そのときにおこなったサーバのセットアップ作業を書き残しておく。 + 99 % 自分用の備忘録。別のベンダに移したりしたくなったら見に来る。 + </p> + <p> + 未来の自分へ: 特に自動化してないので、せいぜい苦しんでくれ。 + </p> + </section> + <section id="vps"> + <h>VPS</h> + <p> + <a href="https://vps.sakura.ad.jp/">さくらの VPS</a> の 2 GB プラン。 + そこまで真面目に選定していないので、困ったら移動するかも。 + </p> + </section> + <section id="preparation"> + <h>事前準備</h> + <section id="preparation--hostname"> + <h>サーバのホスト名を決める</h> + <p> + モチベーションが上がるという効能がある。今回は藤原定家から取って <code>teika</code> にした。 + たいていいつも源氏物語の帖か小倉百人一首の歌人から選んでいる。 + </p> + </section> + <section id="preparation--ssh-key"> + <h>SSH の鍵生成</h> + <p> + ローカルマシンで鍵を生成する。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ ssh-keygen -t ed25519 -b 521 -f ~/.ssh/teika.key + $ ssh-keygen -t ed25519 -b 521 -f ~/.ssh/github2teika.key + ]]> + </codeblock> + <p> + <code>teika.key</code> はローカルからサーバへの接続用、<code>github2teika.key</code> は、 + GitHub Actions からサーバへのデプロイ用。 + </p> + </section> + <section id="preparation--ssh-config"> + <h>SSH の設定</h> + <p> + <code>.ssh/config</code> に設定しておく。 + </p> + <codeblock language="ssh_config"> + <![CDATA[ + Host teika + HostName ********** + User ********** + Port ********** + IdentityFile ~/.ssh/teika.key + IdentitiesOnly yes + ]]> + </codeblock> + </section> + </section> + <section id="basic-setup"> + <h>基本のセットアップ</h> + <section id="basic-setup--login"> + <h>SSH 接続</h> + <p> + VPS 契約時に設定した管理者ユーザとパスワードを使ってログインする。 + </p> + </section> + <section id="basic-setup--user"> + <h>ユーザを作成する</h> + <p> + 管理者ユーザで作業すると危ないので、メインで使うユーザを作成する。 + <code>sudo</code> グループに追加して <code>sudo</code> できるようにし、<code>su</code> で切り替え。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo adduser ********** + $ sudo adduser ********** sudo + $ su ********** + $ cd + ]]> + </codeblock> + </section> + <section id="basic-setup--hostname"> + <h>ホスト名を変える</h> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo hostname teika + ]]> + </codeblock> + </section> + <section id="basic-setup--public-key"> + <h>公開鍵を置く</h> + <codeblock language="shell-session"> + <![CDATA[ + $ mkdir ~/.ssh + $ chmod 700 ~/.ssh + $ vi ~/.ssh/authorized_keys + ]]> + </codeblock> + <p> + <code>authorized_keys</code> には、ローカルで生成した <code>~/.ssh/teika.key.pub</code> と + <code>~/.ssh/github2teika.key.pub</code> の内容をコピーする。 + </p> + </section> + <section id="basic-setup--ssh-config"> + <h>SSH の設定</h> + <p> + SSH の設定を変更し、少しでも安全にしておく。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak + $ sudo vi /etc/ssh/sshd_config + ]]> + </codeblock> + <ul> + <li><code>Port</code> を変更</li> + <li><code>PermitRootLogin</code> を <code>no</code> に</li> + <li><code>PasswordAuthentication</code> を <code>no</code> に</li> + </ul> + <p> + そして設定を反映。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo systemctl restart sshd + $ sudo systemctl status sshd + ]]> + </codeblock> + </section> + <section id="basic-setup--ssh-connect"> + <h>SSH で接続確認</h> + <p> + 今の SSH セッションは閉じずに、ターミナルを別途開いて疎通確認する。 + セッションを閉じてしまうと、SSH の設定に不備があった場合に締め出しをくらう。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ ssh teika + ]]> + </codeblock> + </section> + <section id="basic-setup--close-ports"> + <h>ポートの遮断</h> + <p> + デフォルトの 22 番を閉じ、設定したポートだけ空ける。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo ufw deny ssh + $ sudo ufw allow ******* + $ sudo ufw enable + $ sudo ufw reload + $ sudo ufw status + ]]> + </codeblock> + <p> + ここでもう一度 SSH の接続確認を挟む。 + </p> + </section> + <section id="basic-setup--ssh-key-for-github"> + <h>GitHub 用の SSH 鍵</h> + <p> + GitHub に置いてある private リポジトリをサーバから clone したいので、SSH 鍵を生成して置いておく。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ ssh-keygen -t ed25519 -b 521 -f ~/.ssh/github.key + $ cat ~/.ssh/github.key.pub + ]]> + </codeblock> + <p> + <a href="https://github.com/settings/ssh">GitHub の設定画面</a> から、この公開鍵を追加する。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ vi ~/.ssh/config + ]]> + </codeblock> + <p> + 設定はこう。 + </p> + <codeblock language="ssh_config"> + <![CDATA[ + Host github.com + HostName github.com + User git + Port 22 + IdentityFile ~/.ssh/github.key + IdentitiesOnly yes + ]]> + </codeblock> + <p> + 最後に接続できるか確認しておく。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ ssh -T github.com + ]]> + </codeblock> + </section> + <section id="basic-setup--upgrade-packages"> + <h>パッケージの更新</h> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo apt update + $ sudo apt upgrade + $ sudo apt update + $ sudo apt upgrade + $ sudo apt autoremove + ]]> + </codeblock> + </section> + </section> + <section id="site-hosting-setup"> + <h>サイトホスティング用のセットアップ</h> + <section id="site-hosting-setup--dns"> + <h>DNS に IP アドレスを登録する</h> + <p> + このサーバは固定の IP アドレスがあるので、<code>A</code> レコードに直接入れるだけで済んだ。 + </p> + </section> + <section id="site-hosting-setup--install-softwares"> + <h>使うソフトウェアのインストール</h> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo apt install docker docker-compose git make + ]]> + </codeblock> + </section> + <section id="site-hosting-setup--docker"> + <h>メインユーザが Docker を使えるように</h> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo adduser ********** docker + ]]> + </codeblock> + </section> + <section id="site-hosting-setup--open-http-ports"> + <h>HTTP/HTTPS を通す</h> + <p> + 80 番と 443 番を空ける。 + </p> + <codeblock language="shell-session"> + <![CDATA[ + $ sudo ufw allow 80/tcp + $ sudo ufw allow 443/tcp + $ sudo ufw reload + $ sudo ufw status + ]]> + </codeblock> + </section> + <section id="site-hosting-setup--clone-repositories"> + <h>リポジトリのクローン</h> + <codeblock language="shell-session"> + <![CDATA[ + $ cd + $ git clone git@github.com:nsfisis/nsfisis.dev.git + $ cd nsfisis.dev + $ git submodule update --init + ]]> + </codeblock> + </section> + <section id="site-hosting-setup--certbot"> + <h>certbot で証明書取得</h> + <codeblock language="shell-session"> + <![CDATA[ + $ docker-compose up -d acme-challenge + $ make setup + ]]> + </codeblock> + </section> + <section id="site-hosting-setup--run-server"> + <h>サーバを稼動させる</h> + <codeblock language="shell-session"> + <![CDATA[ + $ make serve + ]]> + </codeblock> + </section> + </section> + <section id="outro"> + <h>感想</h> + <p> + (業務でなく) 個人だと数年ぶりのサーバセットアップで、これだけでも割と時間を食ってしまった。 + とはいえ式年遷宮は楽しいので、これからも定期的にやっていきたい。 + コンテナデプロイにしたい気持ちもあるのだが、色々実験したい関係上、本物のサーバも欲しくはある。 + 次の式年遷宮では、手順の一部だけでも自動化したいところ。 + </p> + </section> +</article> |
