完成と次のステップ

何ができるようになったか

最初の回で打ったのは whoami でした。いまは、証明書を作り、待ち受けを開け、ログを畳ませ、定期実行を仕込み、版を並べて出し戻しできるところまで来ています。

並べてみます。

  • 1章 — サーバーに入り、どこにいるかを掴む
  • 2章 — nginx を入れて、サービスとして管理する
  • 3章 — 配信の設定を自分で書き、待ち受けと通り道を開ける
  • 4章 — 利用者と鍵を分け、入り口を絞る
  • 5章 — 証明書を作り、HTTPS で話す
  • 6章 — ログを畳み、様子を見る仕組みを自動で回す
  • 7章 — 版を並べて出し、数秒で戻せるようにする
  • 8章 — 手順を見ずに作り直し、壊れたところから復旧する

覚えたのはコマンドではありません。困ったときにサーバー自身へ聞く手順です。systemctl status で動きを見て、journalctl で理由を読み、nginx -t で構文を確かめ、ss -tlnp で待ち受けを見て、ログの最後の行を読む。この5つは、これから触るどのソフトウェアでもほぼそのまま使えます。

引き継ぎ資料を書く

実務で必ず求められるものが1つ残っています。このサーバーが何なのかを説明する文書です。

自分しか触らないサーバーでも要ります。3か月後の自分は他人です。どのポートで何が待っていて、設定ファイルがどこにあり、どのスクリプトが何時に動くのか。思い出せる保証はどこにもありません。

書くべきことは決まっています。

  • 何が入っているか、どのサービスが自動起動か
  • どのポートで何が待っているか
  • サイトの中身と設定ファイルの場所
  • 証明書と鍵の場所、その有効期限
  • 自分で置いたスクリプトと、動く時刻
  • 出す手順と、戻す手順

記憶ではなく、機械から書き写す

資料を書くときに、記憶を頼りにしてはいけません。そのサーバーに聞いて、返ってきたものを書き写します

systemctl list-units --type=service --state=running ss -tlnp systemctl list-timers ls -l /root/bin openssl x509 -in /etc/ssl/certs/mysite.crt -noout -enddate

記憶で書いた資料は、たいてい現物とずれています。ずれた資料は、無い資料より危険です。

この先に続く道

ここから先の行き先を挙げておきます。

  • 本物のドメインと証明書 — 自己署名でやったことを、Let's Encrypt の証明書に置き換える。仕組みは同じで、証明書の出どころが変わるだけです
  • クラウド上のサーバー — AWS の EC2 や Lightsail で同じ手順を踏む。触るコマンドはこのコースと変わりません
  • アプリケーションを載せる — 静的なファイルの代わりに、Node.js や Python のアプリを nginx の後ろに置く。proxy_pass が入り口になります
  • ネットワークの理屈 — なぜ 443 番なのか、TCP と TLS の関係は何か。手が動くようになった今なら、理屈の側から読むと繋がります

どれも、ここでやったことの続きです。まったく新しいことは出てきません。

手を動かす

最後の課題です。このサーバーの引き継ぎ資料を、機械に聞きながら書き上げます。

ヒント

  • 1. ss -tlnp、systemctl list-timers、ls -l /root/bin の結果を /root/server-facts.txt へまとめる
  • 2. openssl x509 -noout -enddate で証明書の期限も調べて追記する
  • 3. /root/SERVER.md を書く。見出しは # で始める
  • 4. 待ち受けポート 80 / 443 / 8443 と、それぞれ何が待っているかを書く
  • 5. /var/www/mysite-deploy/current と設定ファイルの場所を書く
  • 6. /root/bin の各スクリプトが何をするか、いつ動くかを書く
  • 7. 出す手順 deploy.sh と、戻す手順 rollback.sh を書く

15 項目で採点します