⚙️

【おまけ】【Django+Nginx+Gunicorn】アプリケーションをEC2へデプロイしよう

2025/01/04に公開

Django で作成したアプリを EC2 へデプロイしてみました。

https://zenn.dev/kuuki/articles/django-nginx-gunicorn-ec2-deploy-first-part/

https://zenn.dev/kuuki/articles/django-nginx-gunicorn-ec2-deploy-latter-part/

↑ の記事では、サーバーで動作するための最短手順を踏んだつもりです

なので、やり残したこともおおくあります。。。

また、おまけ編ということで、ソースのアップデート方法をご紹介します

ソースの更新方法

  1. Django のソースを zip 化する
  2. teraterm や scp コマンドでサーバーへ zip ファイルをアップロードする
  3. サーバーに ssh 接続する
  4. root ユーザーに切り替えて、zip ファイルを解凍する
    sudo su
    unzip <アップロードしたファイル>
    
  5. Nginx と Django のサービスを停止させる
    # Nginxが起動していることを確認する
    systemctl status nginx
    # Nginxを停止させる
    systemctl stop nginx
    # Nginxが停止していることを確認する
    systemctl status nginx
    # Djangoアプリが起動していることを確認する
    systemctl status <Djangoプロジェクト名>
    # Djangoアプリ停止させる
    systemctl stop <Djangoプロジェクト名>
    # Djangoアプリが停止していることを確認する
    systemctl status <Djangoプロジェクト名>
    
  6. /var/www/配下の Django のファイルを更新する
  7. Nginx と Django のサービスを起動させる
    # Djangoアプリが停止していることを確認する
    systemctl status <Djangoプロジェクト名>
    # Djangoアプリが起動させる
    systemctl start <Djangoプロジェクト名>
    # Djangoアプリが起動していることを確認する
    systemctl status <Djangoプロジェクト名>
    # Nginxが停止していることを確認する
    systemctl status nginx
    # Nginxを起動させる
    systemctl start nginx
    # Nginxが起動していることを確認する
    systemctl status nginx
    

サービスの停止・起動の順番について

今回のシステムでは、 ユーザー →Nginx→Gunicornの流れでリクエストを処理します

不文律ですが、
停止するとき:ユーザーに近いサービスから停止していく
 → 今回だと Nginx → Gunicorn の順で停止させる
起動するとき:ユーザーから遠いサービスから起動していく
 → 今回だとGunicorn → Nginx の順で起動させる
とする場合が多い気がします

やり残したこと

箇条書きでやり残したことを書いていきます

  • フロントをReact、バックエンドをDRFにする
  • SECRET_KEY など機密情報は .envに記載する
  • ソースをgithub経由でサーバーへアップロードする
    • Github actionsを使用して自動デプロイできればいいな...
  • ALB(ロードバランサー)を使用したい
    • 簡単にHTTPS 化AutoScaling と組み合わせて冗長化構成にするなど
  • Route53を使用してドメインを割り当てる
  • RDSを使用する
  • ログ設定を理解する
    • ローテートアプリのログ(main, error, debug)と SQL のログを分けるなど

やりたいことがたくさんありますね(笑)

気長に1つずつやっていこうと思います!

Discussion