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