【10日目】Django CMSを本番相当構成へ――Docker・PostgreSQL・Redis・nginx・バックアップ復元
10日で作るDjango CMSの10日目。DjangoをPostgreSQL・Redis・Gunicorn・nginx・Docker Composeで本番相当構成へ移行し、HSTS、Proxy設定、死活監視、バックアップと復元訓練まで実装します。
Django、Python、AWS、Linux、セキュリティ、CVE、基本情報技術者、応用情報技術者、ITパスポートの用語を、図解と実務手順で解説します。個人開発kurutann.comの検証記録や障害対応事例も公開しています。
タグ「連載」の記事を表示中× クリア
10日で作るDjango CMSの10日目。DjangoをPostgreSQL・Redis・Gunicorn・nginx・Docker Composeで本番相当構成へ移行し、HSTS、Proxy設定、死活監視、バックアップと復元訓練まで実装します。
TOTP・リカバリコード・パスキー(WebAuthn)を実装し、管理者にはMFAを必須にします。そのうえで「有効にしたはずの多要素認証を回避できる経路」が2つ見つかりました。パスワードだけで管理画面へ入れる件と、パスキー1本で通る件です。
django-allauthでメール認証・ワンタイムコードログイン・ソーシャルログインを導入します。コードの強度は桁数ではなく「桁数×有効期限×試行回数×発行制限」で決まります。
管理画面を自作し、ブロックエディターと自動保存を作ります。同時編集の衝突検出を更新日時ではなく版番号で行う理由を、実際に落ちたテストとともに説明します。
OGP・構造化データ・RSS・XMLサイトマップを実装します。テストが全部通っている状態でサイトマップだけ別ドメインを指していたバグを、ブラウザで見つけた経緯も書きました。
下書き/レビュー待ち/公開の3状態、未来日時による予約公開、リビジョン履歴と差し戻しを実装します。公開判定をQuerySetに一本化して「見えてはいけない記事」を消す設計です。
画像アップロードを拡張子ではなく中身で検証し、コメントにレート制限とハニーポットを入れ、サイト内検索を作ります。X-Forwarded-Forを右から数える理由も解説します。
記事の一覧・詳細・投稿・編集・削除を作ります。非公開記事に403ではなく404を返す理由、公開権限をadd/change/deleteから切り離す設計まで踏み込みます。
記事・カテゴリ・タグ・固定ページをモデルとして設計します。ForeignKeyのon_delete、日本語タイトルでslugifyが空になる問題、autocomplete_fieldsのadmin.E040まで。
Djangoの環境構築から、あとで差し替えるのが極端に難しくなるカスタムユーザーモデルの作成まで。連載「10日で作るDjango CMS」の1日目を、実際に出たエラーごと記録します。