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

推薦する

Linux で xargs コマンドを使用する詳細なチュートリアル

みなさんこんにちは。私は梁旭です。 Linux を使用しているときに、いくつかのコマンドを連結する必...

MySQL binlog の解析

目次1. binlogの紹介2. Binlog関連のパラメータ3. バイナリログの内容を分析するIV...

優れたユーザー インターフェース デザインのための 37 のヒント (画像付き)

1. 複数列レイアウトではなく、単一列レイアウトを使用する1 列のレイアウトにより、全体的な状況をよ...

Dockerfile における ENTRYPOINT と CMD の違い

Docker システムの学習チュートリアルでは、Dockerfile を使用して Docker イメ...

単一の MySQL テーブル内の行数が 500 万を超えてはいけないのはなぜですか?

今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に...

CSS プロパティ *-gradient の実用的な価値を探る

まず興味深い性質であるconic-gradientを紹介しましょう。円錐グラデーション!円グラフの作...

TypeScript における列挙型の理解と応用シナリオ

目次1. 何ですか2. 使用数値列挙文字列列挙異種列挙自然3. 応用シナリオ要約する1. 何ですか列...

Docker /var/lib/docker/aufs/mnt ディレクトリのクリーニング方法

会社のサービスはdockerを使用しており、ディスクマンが見つかりました。その後、次のコマンドを実行...

Vue で動的に読み込まれたローカル画像を処理する方法

問題を見つける今日は、vue ファイルにローカル画像を導入する際に問題が発生したので、この記事を書き...

Linux の 5 ステップ ビルド カーネル ツリー

目次0. システムに付属するカーネルツリー1. 環境設定最初のステップステップ2 2. ソースコード...

Vue3 の使用 (パート 1) Vue CLI プロジェクトの作成

目次1. 公式ドキュメント2. Vue CLIプロジェクトを作成する1. Vue CLIをインストー...

MySQL で遅いファジークエリを最適化する方法

目次1. はじめに: 2. 最初のアイデアはインデックスを構築することです3. 命令P.S. Lik...

ウェブサイトアイコンを追加するにはどうすればいいですか?

最初のステップは、アイコン作成ソフトウェアを準備することです。まず、いわゆるアイコンは拡張子 .ic...

XHTML チュートリアル: 初心者のための XHTML の基礎

<br />当サイトのオリジナルコンテンツですので、転載の際は出典を123WORDPRE...

Zabbix による SQL Server の監視プロセスの詳細な説明

Zabbix による SQL Server の監視を見てみましょう。まずfreetdsをダウンロード...