現場で使える Django の教科書《実践編》を読んだ

現場で使える Django の教科書《基礎編》の内容が良かったので、実践編も買って読んでみました。

書籍にかかれている通りに、さくら VPS 上に作った Ubuntu 16.04 上に、以下の構成で Web アプリケーションをデプロイしてみました。
実践編には以下の内容が載っていて、参考になる内容が多いです。

  • Nginx をリバースプロキシとする
    • SSL/TLS 対応
    • 静的ファイル、画像ファイル等は Nginx が捌く
    • その他は後段の Gunicorn サーバがハンドリング
  • Django で開発した Web アプリケーションを Gunicorn でサービス
    • Systemd でデーモン化

恥ずかしながらサーバ周りを主たる業務としていないため、自分の手で HTTPS 対応をした経験がなく、Web 上には断片的な情報が多くて困っていたのでこの本にはとても助けられました。

以下は自分が参考になったことをメモ書きで残しておきます。

第 7 章 デプロイ

まずは DigitalOcean 上にデプロイするため、公開鍵作成等の基礎的なことが書かれてます。
他のサービスでも同じく、クライアント PC 上で生成した公開鍵をサーバ側に貼るよくある定型作業。

あと基礎的なこととして、

  • 作業用のユーザの作成
  • root ユーザのログイン禁止
  • ファイアウォールの設定 (ufw)
  • データベース設定
  • Django コードの配置

が結構手厚く書かれていました。
書かれたとおりに実行して動作確認できましたし、特に Django の settings を開発環境、ローカル環境で分離する方法が良いと思った。
というかデフォでやっとけ感がすごい。
あと、シークレットな変数は django-environ で .env ファイルに分離するのも必須。

B: Let’s Encrypt で SSL/TLS 証明書発行

作業手順は以下のとおり。

  1. http://mysite.com でサービスが可動していることを確認
  2. webroot 配下の acme-challenge へのアクセス許可ルールを nginx の設定ファイルに追加
  3. Nginx を再起動
  4. certbot をインストールして証明書申請コマンド実行
  5. Nginx の設定ファイルに SSL/TLS 設定を追加
  6. 証明書の自動更新タスクを cron に登録

書籍には

sudo apt -y install certbot

でインストールできるっぽい記述があったけど、Ubuntu 16.04 on さくら VPS な自分はリポジトリが見つかんなかったので、How To Secure Nginx with Let’s Encrypt on Ubuntu 16.04 を参考にして、以下のとおり追加しました。

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx

次やりたいこと

サーバ構築は極力自動化したいのが正直なところなので、Ansible 使って自動化も試みた。
でも、それもまた Ansible コードのメンテが面倒になってきて。。。
Docker Image にするなりして、楽な運用に切り替えたい。
ただ、プロダクション環境で Docker 使うとなると、Kubernetes で冗長化とか考えなきゃいかんのだろうか…?
このあたりの本が詳しくて良さげだったので次はこれ買って読む。

Avatar
ks6088ts
Software Engineer
comments powered by Disqus