VPSなどの環境で、1つのVMインスタンスにたくさんDjangoアプリをホストしたいなー、という場合の構成を考えたりしてました。
自分で運用しやすい形にまとまったので、メモを残しておきます。
要件
- 1台のVMで複数種類のDjangoアプリを動かす
- VMのメモリは2~4GBぐらい(月2000~4000円以下ぐらいのVPS)
- OSはUbuntu
- DBはMySQL
- WebサーバーはNginx
- HTTPSはLet's Encryptを使う
- MySQLはWorkbenchとかですぐ見れるようにはしておきたい
- メール送信はSendgridを使う(なのでローカルにSMTPサーバーは不要)
要するにサーバー費用を抑えつつ、アプリをいくつも動かしたい。
負荷が上がった場合は、ミドルウェアを別のものに変えなくても、他のインフラに容易に移設できるような感じにしておきたい。
構成
結局これで一旦落ち着きました。
- Nginx
- MySQL
- アプリ
- cron
- 定期実行は
docker-compose exec
でアプリのmanage.pyのコマンドを起動する
- 定期実行は
以上。小さいDjangoアプリなら1台に10個ぐらいホストしても大丈夫だとおもう。