
2026/06/18 17:47
Djevops:Django をセルフホスト化するのに簡単
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Djevops は、Django ウェブアプリケーション(Docker 非対応)を Ubuntu または Debian リーナス VPS に展開するための専用コマンドラインツールです。pip を介して
djevops init でプロジェクトを初期化した後、ユーザーは YAML ファイルに展開設定(サーバー IP、Git リポジトリ、サービスなど)を設定し、機密データであるシークレットキーなどをバージョン管理システムコミットせず、ローカルの secrets ファイルに保存します。主要な djevops deploy コマンドは、リポジトリのクローン、サービスユーザーの管理、そして新しいコミットの即時適用を自動化します。本ツールは、許可されたドメイン向けの SSL 証明書の生成と更新、ディスク容量問題を防止するためのログファイルのローテーション、PostgreSQL または SQLite データベースのバックアップ(再インストール時にオプションで復元可能)といった基本的なメンテナンス作業を自動的に処理します。また、Djangoエコシステム全体をサポートしており、Celery ワーカー、Redis キュー、およびバッチタスク用の beat スケジューラを組み込み、开箱即用で動作します。さらに、Djevops はセキュリティ強化デフォルトを実装しており、サービスを実行するには個別のユーザーを使用し、予期しないポートをブロックし、OS アップデートを自動的に管理する(大規模アップグレードを除く)、そしてリモート Django シェルにアクセスするためのコマンドを提供します。本文
Djevops とは
Djevops は、Django ウェブアプリケーションを Linux ベースの VPS にデプロイするためのコマンドラインツールです。
本ツールはサーバー上のすべての必要なコンポーネント(データベース、Redis など)の稼働と管理も行います。
主な特徴
- Docker を使用しない: コンテナ化が不要のため、数秒以内に「本番環境へのデプロイ」が可能です。
- Ansible との違い: Django 特化による設計のため、実装するコード量が大幅に削減できます。
- トレードオフ: コード量の削減には、汎用性の低さがあります。
インストールと初期設定
Djevops を使用するには、以下の準備が必要です。
- SSH root アクセス: Ubuntu または Debian を動作させる Linux VPS への SSH root アクセスのみを必要とします。
- インストール: ローカルマシン上で以下のコマンドを実行します。
pip install djevops - 初期化: Django アプリケーションの Git リポジトリ内で、以下のコマンドを実行します。
これにより、設定ファイルが生成されます。djevops init
設定ファイル
生成される設定ファイルの例は以下の通りです。
server: 1.2.3.4 git: repo: githubuser/mydjangoapp branch: main services: web: type: django env: clear: ALLOWED_HOSTS: your.website.com secret: - DJANGO_SECRET_KEY db: type: sqlite mail: host: smtp.gmail.com user: SMTP_USER password: SMTP_PASSWORD
- 機密情報の扱い:
やDJANGO_SECRET_KEY
のような機密情報は、ファイルSMTP_PASSWORD
内に定数として定義しておくことを推奨します。deploy/secrets.py - 設定値: 大半は任意項目です。必要な入力を行い、以下のコマンドでデプロイを開始します。
djevops deploy
動作概要: Djevops はサーバー上で Git リポジトリをクローンし、すべてのサービスを起動します。開発中に Git にプッシュするたび、再度
を実行することで変更を即座に適用できます。djevops deploy
機能一覧
自動 SSL 証明書
- Django の設定ファイル
で指定したドメインに対し、Djevops は自動的に SSL 証明書を生成・更新します。ALLOWED_HOSTS - 対象はサーバーのIP アドレスです。
エラー通知メール
- 設定ファイル内の
セクションを記入すると、エラー発生時に Django からメールを受信できます。mail - 前提条件:
- Django の
でsettings.py
を以下のように設定すること。ADMINSADMINS = [('Your Name', 'your@email.com')] - Django の設定で、
フラグをDEBUG
にすること。False
- Django の
自動データベースバックアップ
- 設定ファイルの
セクションにdb
エレメントを追加することで有効化できます。backup - サーバー稼働中は継続的にバックアップが作成され、再インストール時にも自動的に復元されます。
SQLite の場合
- Litestream を利用して S3、Azure Blob Storage などのストレージにバックアップデータを保存します。
- 設定例:
db: type: sqlite backup: type: s3 bucket: mybackup access-key-id: S3_BACKUP_ACCESS_KEY secret-access-key: S3_BACKUP_SECRET_KEY path: db region: us-east-1
やaccess-key-id
は Litestream の構成ファイル内のsecret-access-key
エレメントへ自動的にコピーされます。replica
PostgreSQL の場合
- データベースタイプを
に設定することで利用可能です。postgresdb: type: postgres - 接続設定:
で手動で記述します。settings.pyimport os DATABASES['default'] = { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'myapp', 'USER': 'myapp', 'PASSWORD': os.environ['DB_PASSWORD'], 'HOST': 'localhost' } - 機密情報の管理: Git にパスワードを含めないため、
に保存し、環境変数経由で参照します。deploy/secrets.py
YAML 設定では以下の通り指定します。# deploy/secrets.py DB_PASSWORD = "<some strong password>"services: web: type: django env: secret: - DB_PASSWORD - 依存関係:
またはpyproject.toml
にrequirements.txt
を追加してインストールしてください。psycopg[binary] - バックアップ頻度: デフォルトでは1 日に一度。
エレメントでbackups
を設定することで周期をカスタマイズできます(例:sync-interval
で 1 時間ごと)。1h
Celery と Redis を使ったバックグラウンドタスク処理
- Celery ワーカー追加: 設定ファイルに以下の項目を追加します。
services: web: # ここまでは以前と同じ celery: type: celery env: inherit: web - Redis のインストール: Celery のバックエンドとして Redis を使用する場合、トップレベルに空の
ブロックを追加します。redisredis: {} - この構成により、Python 関数の非同期実行や、「5 時間ごとに」のようなスケジュールタスクの実行が可能になります。
- Celery タイプのサービスは、必要となる
スケジューラーも同時に起動します。beat
ログファイルへの容易なアクセス
- 各サービスのログファイルを
に書き出します。/var/log/<service>.log - サーバーへ SSH 接続して
やless
などを使用し、読み込めます。tail -f - ログ回転: Djevops は自動的にログファイルの回転と圧縮を行い、ディスク容量を圧迫しません。
機密情報の管理
- Git にコミットすべきではない機密情報は、
に指定して管理できます。deploy/secrets.py - 仕組み: ローカルマシンで
を実行し、生成された値が定数としてサーバーにアップロードされます。secrets.py - 柔軟な扱い方:
- 値をハードコーディングしておき、Git コミットしない。
時の環境変数から読み取る(例:djevops deploy
)。MY_SECRET = os.environ['MY_SECRET']- パスワードマネージャーなどを
内で呼び出す。secrets.py
セキュアなデフォルト設定
- ユーザー分離: 各サービスは独立したユーザーとして実行され、環境変数のリークが防止されます。
- ポート管理: 意図せずポートが開かないよう設計されています(例:メール送信用に Port 25 を開く場合のみ有効)。
自動 OS アップデート
- サーバーを更新し続けるために自動的な OS アップデートを設定します。
- 例外: マジョーバージョンのアップグレードは適用されません(不互換性や破損のリスクがあるため)。
サーバー上の manage.py shell
への容易なアクセス
manage.py shell- コマンドを以下のように実行するだけで、サーバー上の Django シェルに即座に入れます。
djevops shell - これは、
の最初の django タイプのサービスが使用する環境変数とユーザーに基づいて動作します。deploy/djevops.yml
開発環境での準備
テスト用の依存関係は
pyproject.toml からインストールします。最も簡単な方法は uv を使用することです。
-
仮想環境の作成と同期
uv venv source .venv/bin/activate uv sync --no-install-project --extra test -
テストの実行
python -m unittest
注意: テスト実行には、いくつかの環境変数に指定されたAPI キーが必要です。