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はクリックしてカードを切り替える機能を実現します

推薦する

Nginx における accept lock の仕組みと実装の詳細な説明

序文nginx はマルチプロセス モデルを使用します。リクエストが届くと、システムはプロセスをロック...

MySQLデータベース監視binlogを有効にする手順

序文多くの場合、ユーザーが自分のデータに対して実行する操作に基づいて何かを行う必要があります。たとえ...

ul リスト タグ デザイン ウェブ ページ 複数列レイアウト

数日前、CSS で 3 列レイアウトを書いていたときに、突然この方法を思いつきました。このアイデアは...

Vue は Websocket カスタマー サービス チャット機能を実装します

この記事では主に基本的なチャットの実装方法を紹介します。今後は絵文字や写真のアップロードなどの機能も...

ドロップダウンメニュー効果を実現するJavaScript

参考までに、JavaScriptを使用してドロップダウンメニューを実装します。具体的な内容は次のとお...

Linux で Oracle データベースをバックアップするためのスケジュールされたタスクの設定に関するチュートリアル

1. データベースの文字セットを確認するデータベースの文字セットは、Linux で設定された環境変数...

Node.js での SerialPort モジュールの使用

目次目的モジュールのインストール基本的な使い方ポートをスキャンする開いているポートデータの送信データ...

Linux で環境変数 JAVA_HOME を変更/設定する方法について簡単に説明します。

1. 永久的な変更、すべてのユーザーに有効# vi /etc/プロファイル//キーボードの[Shi...

Vueは指定された日付間のカウントダウンを実装します

この記事では、指定された日付間のカウントダウンを実装するためのVueの具体的なコードを例として紹介し...

jsはショッピングカートの加算と減算、価格計算機能を実現します

この記事では、ショッピングカートの増減と価格計算を実現するためのjsの具体的なコードを紹介します。具...

HTMLポップアップ透明レイヤーインスタンスのサイズを設定でき、比例することができます

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

LinuxシステムでFuserコマンドを使用する方法

Fuser コマンドとは何ですか? fuser コマンドは、特定のファイル、ディレクトリ、またはソケ...

vue3を使用して人間と猫のコミュニケーションアプレットを実装する

目次序文プロジェクトを初期化するデザインコードの実装オンデマンドロードオーディオを再生録音長押しイベ...

JavaScript での正規表現の使用について詳しく学ぶ

目次1. 正規表現とは何か1. 正規表現の特徴2. 正規表現の使用2. 正規表現における特殊文字1....

HTML チュートリアル、簡単に学べる HTML 言語 (2)

*******************HTML言語入門(パート2)*****************...