Centos8 で Docker を使用して Django プロジェクトをデプロイする詳細なチュートリアル

Centos8 で Docker を使用して Django プロジェクトをデプロイする詳細なチュートリアル

導入

この記事では、django + uwsgi + nginx デプロイメントを使用して、Docker に Django プロジェクトをデプロイする方法を紹介します。

記録されるのは学習過程なので、現在の上位バージョンが使用されます。

Pythonバージョンは3.8.3です
Djangoのバージョンは3.0.6です
nginxのバージョンは1.17.10です

さて、簡単な紹介の後、本題に入りましょう。

作業ディレクトリを作成する

プロジェクトと Dockerfile などのファイルを保存するための作業ディレクトリを作成します。

uwsgidocker を mkdir する

各ファイルについて簡単に説明する

docker-compose.yml: Docker Compose は、複数のコンテナで構成されるアプリケーションを定義および実行するために Docker によって提供されるコマンドライン ツールです。
            Compose を使用すると、YAML ファイルを通じてアプリケーションのサービスを宣言的に定義し、単一のコマンドでアプリケーションを作成して起動できます。
            最初はdocker-compose.ymlを使用していませんでした
Dockerfile: イメージをビルドするために使用されるテキスト ファイルです。テキスト コンテンツには、イメージをビルドするために必要な手順と指示が含まれています。
my_django: 新しく作成された Django プロジェクトで、主に ALLOWED_HOSTS = [] を ALLOWED_HOSTS = ["*"] に変更します。 
nginxconf: nginx イメージを作成するための nginx 構成と Dockerfile ファイルを含むフォルダーです。
pip.conf: pip の設定に関するもので、主に pip のダウンロードを高速化するために使用されます。
uwsgi_conf.ini: uwsgi 設定ファイル

注: Django プロジェクトの settings.py ファイルで、 ALLOWED_HOSTS = [] を ALLOWED_HOSTS = [" * "] に変更する必要があります。

uwsgiイメージを作成する

Dockerfile ファイルに従って uwsgi イメージを作成し、実行します。

Python:3.8.3 より
# ディレクトリを作成する RUN mkdir -p /usr/src/app
# 作業ディレクトリを設定する WORKDIR /usr/src/app

# pip.conf ファイルを /root/.pip/pip.conf にコピーします
pip.conf をコピー /root/.pip/pip.conf
# pip を更新
pip install --upgrade pip を実行します。
# Djangoとuwsgiをダウンロードする一般的なプロジェクトでは、requirement.txtのみをダウンロードする必要があります
pip install django && pip install uwsgi を実行します。
#現在のディレクトリ内のすべてのファイルをコピーし、プロジェクトと uwsgi 構成ファイルのみをコピーします COPY . /usr/src/app/
# 実行時にuwsgiを起動する
コマンド uwsgi --ini uwsgi_conf.ini
# ポートを公開 EXPOSE 80 8080 8000 8888

uwsgi 設定ファイル、公式ウェブサイト

[uwsgi]
# プロジェクトディレクトリ。現在のディレクトリにあるので、chdir = my_django と記述するだけです。
# uwsgi 起動ファイル、プロジェクトの下の wsgi.py
モジュール = my_django.wsgi
# メインスレッドの存在を許可する (true)
マスター = 真
# プロセス数 プロセス = 1
# プロジェクトが実行されるポートを指定するために使用します。ソケットと http を使用できます。私は簡単に表示できるように http を使用します。http = 0.0.0.0:8000
# ソケット = 0.0.0.0:8000

# http = 10.0.0.10:8000
# ソケット = 10.0.0.10:8008
# ソケット = /usr/src/app/my_django/uwsgi.sock
# サーバー終了時に環境を自動的にクリーンアップし、UNIX ソケット ファイルと PID ファイルを削除します。vacuum = true

さて、これら 2 つのファイルを使用して、uwsgi イメージを作成できます。次のコマンドを実行してイメージを生成します。

docker build -t myuwsgi ./

docker imagesを使用してイメージを表示する

uwsgiイメージを実行する

画像が作成されたので、次のステップでは画像を実行してブラウザで表示します。

次のコマンドを直接使用して、ポートを公開し、簡単に表示できるようにします。

docker run --rm -it --name webuwsgi -p 8000:8000 myuwsgi

運用結果

次に、ブラウザでアクセスし、IPとポートを入力して192.168.56.102:8000にアクセスします。

これは、uwsgi イメージが作成され、正常に実行できることが証明されます。

次のステップは、リバースプロキシ用のnginxイメージを作成することです。

Nginx イメージの作成

まずnginxconfディレクトリに入り、操作を簡単にするためにcd nginxconf/実行してからDockerfileファイルを編集します。

nginxから

# デフォルトの nginx 設定ファイルを削除します RUN rm -rf /etc/nginx/conf.d/default.conf
# 現在のディレクトリにある設定ファイルを /etc/nginx/conf.d/ ディレクトリにコピーします。 COPY nginx.conf /etc/nginx/conf.d/nginx.conf

エクスポーズ80

nginx.confファイルを編集する

サーバー{
 # リスニングポート listen 80;
 #ホスト名 server_name localhost;
 位置 / {
 uwsgi_params を含めます。
 # uwsgiサービスのIPとポート、
 プロキシパス http://192.167.0.2:8000;
 # uwsgi がソケットを使用する場合は、直接使用できます # uwsgi_pass 192.167.0.2:8000;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header ホスト $host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
 
 場所 /static {
 # 静的ファイルのエイリアス /usr/share/nginx/html/static;
 }
}

uwsgiコンテナのIPはdocker inspectを使用して確認できます。

docker で webuwsgi を検査する

チェック

さて、次のステップはnginxイメージを作成することです。次のコマンドを使用してイメージを作成します。

docker build -t mynginx ./

イメージを表示するにはdockerイメージを使用します

Nginxイメージを実行する

画像が作成されたので、次のステップでは画像を実行してブラウザで表示します。

次のコマンドを直接使用して、ポートを公開し、簡単に表示できるようにします。

docker run --rm -it -p 80:80 --name nginxweb mynginx

運用結果

次に、ブラウザでアクセスし、IP アドレス 192.168.56.102 を直接入力します。

さて、これは docker 上で uwsgi+nginx を使用して Django プロジェクトをデプロイする方法です。

次に、 uwsgi+nginx+docker-composeを使用して Django プロジェクトをデプロイします。

Docker-compose の使用

docker-compose.yml ファイルを編集し、IP アドレスを割り当て、nginx および uwsgi 構成ファイルにいくつか変更を加えます。

docker-compose.yml ファイル

バージョン: '3'
サービス:
バージョン: '3'
サービス:
 uwsgi:
 建てる:
 コンテクスト: 。/
 画像: uwsgi
 再起動: 常に
 ネットワーク:
 ジャンゴ:
 ipv4_アドレス: 10.0.0.10
 ポート:
 - 「8000:8000」
 ボリューム:
 - /root/uwsgidocker/:/usr/src/app/:rw
 コマンド: uwsgi --ini /usr/src/app/uwsgi_conf.ini

 nginx:
 画像: myweb
 建てる:
 コンテキスト: ./nginxconf
 ポート:
 - 「80:80」
 - 「8080:8080」
 ボリューム:
 - /root/uwsgidocker/nginxconf/nginx.conf:/etc/nginx/conf.d/nginx.conf:rw
 再起動: 常に
 特権: true
 ネットワーク:
 ジャンゴ:
 ipv4_アドレス: 10.0.0.20
ネットワーク:
 ジャンゴ:
 ipam:
 設定:
 - サブネット: 10.0.0.0/24

uwsgi_conf.iniファイルで、IPを変更するだけです

[uwsgi]
chdir = my_django

モジュール = my_django.wsgi

uid = ルート
gid = ルート

マスター = 真

プロセス = 1

# http = 0.0.0.0:8000
# ソケット = 0.0.0.0:8000

# http = 10.0.0.10:8000
ソケット = 10.0.0.10:8008
# ソケット = /usr/src/app/my_django/uwsgi.sock

真空 = 真

nginx.confファイルで、同様にIPアドレスを変更します

サーバー{
 聞く 80;
 server_name ローカルホスト;
 位置 / {
 uwsgi_params を含めます。
 # プロキシパス http://192.167.0.2:8000;
 uwsgi_pass 192.167.0.2:8000;
 # proxy_set_header ホスト $host;
 # proxy_redirect をオフ;
 # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 # uwsgi_pass unix:/usr/src/app/my_django/uwsgi.sock;
 uwsgi_pass 10.0.0.10:8008;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header ホスト $host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
 場所 /static {
 エイリアス /usr/share/nginx/html/static;
 }
}

OK、設定を少し変更したら、直接実行できます

docker-compose の実行

1. イメージのビルドの開始 &&コンテナの開始

docker-compose up または docker-compose up -d background run

2. 停止

docker-compose stop #コンテナを停止する

3. コンテナを停止して削除する

docker-compose ダウン

4. IP アドレスを入力して結果にアクセスします。

docker-composeを使うのはとても便利だと思いますか? ぜひ使ってみてください!

要約する

これで、Docker を使用して Centos8 に Django プロジェクトをデプロイする方法に関する詳細なチュートリアルに関するこの記事は終了です。Docker に Django プロジェクトをデプロイする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援してください。

以下もご興味があるかもしれません:
  • CentOS7へのDjangoの導入の詳しい説明
  • DjangoプロジェクトをCentOsサーバーにデプロイする
  • Centos7+Django+Python3+MySQL+Alibaba Cloud 導入プロジェクトの全プロセスの詳細な説明
  • Centos8 の Django プロジェクトに nginx+uwsgi をデプロイするチュートリアル
  • Centos に Django サービス nginx+uwsgi をデプロイする方法
  • CentOS での Django プロジェクトのデプロイに関する詳細なチュートリアル
  • Django プロジェクトを CentOS にデプロイする方法

<<:  JavaScript で円形のプログレスバー効果を実装する

>>:  jsはクリックしてカードを切り替える機能を実現します

推薦する

Vuex でゲッターとアクションを使用するための追加手順

予備的注釈1.Vue2.xとVue3.xの違い: Vue 3.x にはヘルパー関数はありません。 V...

レスポンシブなアコーディオン効果を実現するための CSS3 の詳細な説明

最近、外国人が CSS3 を使用してアコーディオン効果を実現しているビデオを見たので、自分で学習した...

MySQL ソートの原則とケース分析

序文ソートはデータベースの基本的な機能であり、MySQL も例外ではありません。ユーザーは、Orde...

Linux で MySQL 5.7.19 をアンインストールする方法

1. MySQLが以前にインストールされていたかどうかを確認するコマンド: rpm -qa|grep...

ネイティブJSで禁止すべきメソッドの記述

目次ブロックレベル関数オブジェクトのプロトタイプを直接変更すると呼び出された人発信者評価ブロックレベ...

入力選択スタイルを変更する CSS 疑似クラスのサンプルコード

注: この表はW3Schoolチュートリアルから引用したものです疑似要素の分類と機能: 入力選択スタ...

Linux システムでデプロイメント プロジェクトを設定する方法

1. ファイアウォールの設定を変更し、対応するポートを開きますLinux システムのファイアウォール...

HTMLタグのフルネームと機能の紹介

アルファベット順DTD: このタグが許可される XHTML 1.0 DTD を示します。 S=厳密、...

ハイパーリンクの幅と高さを直接設定できない問題の解決策

幅と高さを直接使用することはできません。 display:block; または display:in...

ico ミラー コードを HTML に追加します (favicon.ico はルート ディレクトリに配置されます)

コード:コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC &...

階段効果を実現するためのWeChatアプレットカスタムメニューナビゲーション

設計意図ページを開発する際には、ページ上のナビゲーション メニューをクリックしたときにページを対応す...

MySQLデータベースを使い始めるための最初のステップはテーブルを作成することです

データベースを作成する右クリック - 新しいデータベースを作成ライブラリ名を入力し、文字セットと並べ...

React のグローバル状態管理の 3 つの基本メカニズムの調査

目次序文小道具コンテクスト州要約する序文最新のフロントエンド フレームワークはすべて、コンポーネント...

CSS の一部のプロパティの前には「*」または「_」が付きます。

CSS の一部のプロパティの前には「*」または「_」が付きます。さまざまなブラウザを識別する例えば...

React Native JSIはRNとネイティブ通信のサンプルコードを実装します

目次JSIとはJSIの違いiOS で JSI を使用するiOS 設定RN側の構成jsはパラメータ付き...