MENU
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
カテゴリー
  • IT関連 (623)
    • Bootstrap (2)
    • クラウド (4)
    • サーバー技術 (185)
    • ストレージ (7)
      • NetApp (7)
    • ネットワーク技術 (91)
      • Cisco (36)
      • Juniper (18)
      • 負荷分散装置 (17)
    • パソコン関連 (92)
      • MAC (25)
      • Windows (54)
    • プログラミング (154)
      • Ansible (11)
      • C言語 (23)
      • Python (111)
        • Django (20)
    • 仮想化 (88)
      • Docker (63)
      • VMware (23)
  • VPS (200)
    • ABLENET VPS (16)
    • Amazon Lightsail(VPS) (2)
    • ConoHaVPS (37)
    • mixhostVPS (4)
    • WebARENAIndigo (16)
    • XServerVPS (34)
    • お名前.com VPS (12)
    • さくらのVPS (24)
    • カゴヤクラウドVPS (13)
    • シンVPS (7)
  • レンタルサーバー (56)
    • エックスサーバー (38)
  • 光回線 (8)
  • 技術スキルアップ開発・学習 (7)
    • Envader (2)
    • RareTECH (2)
    • Udemy (3)
もう現役20年超えましたー。経験値ならだれにも負けないエンジニア技術ブログ
インフラエンジニアの技術LOG
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
インフラエンジニアの技術LOG
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
  1. ホーム
  2. IT関連
  3. 仮想化
  4. Docker
  5. 【docker-compose】Django+PostgreSQL+Nginxを連携した構築手順(CentOS8+VPS環境)

【docker-compose】Django+PostgreSQL+Nginxを連携した構築手順(CentOS8+VPS環境)

2021 9/30
Docker
2020年5月2日2021年9月30日

VPS+CentOS8環境下で、docker-composeを利用し、Djangoの環境構築をしましたのでまとめます。

今回の構築では「docker-compose」でDjango+PostgreSQL+Nginxを連携した設計となっています。
構築に時間がかからず簡単にできるので参考にしてください。

前回、docker-composeの記事はこちらを参照

あわせて読みたい
docker-composeでDjangoとPostgreSQLを連携した構築手順(VPS環境) docker-composeを利用し、「Django」と「PostgreSQL」を連携した環境を作成する手順をまとめました。 今回の構築手順は、事前に「docker」と「docker-compose」をインス...

今回の環境はConoHaVPSを使用しています。

目次
安くて高速!高性能VPSで快適開発!
最速5分でサーバー構築
>>>こちらをチェック

エンジニア必見! 技術力を伸ばすVPS徹底比較
>>>VPS比較

「docker-compose」Django+PostgreSQL+Nginxを連携(CentOS8)

CentOS8環境下で「dockcer-compose」を作成する前に事前に「firewalld」で「IPマスカレード(NAPT)」の許可が必要となります。
この設定をしていないと、「dockcer-compose」実行時に、ビルド中にyum、dnf、pipインストールの名前解決ができずエラーになったり、データベースへの内部アクセスができなくなります。

Docker環境では、NAPTを利用した通信が必要となるため、ここは許可設定をしておくことが重要となります。

※もう一つの解決方法として、「–network host」オプションを指定することで解消します。
こちらで実施したことはないのでメモ程度で。

「Firewalld」CentIPマスカレード(NAPT)の許可設定

Docker構築前にまずはfirewalldの設定を実施します。

Dockerが起動している場合は事前に停止します。
Dockkerが起動している状態で、firewalldの変更をするとDockerが正常に動かない不具合あがあります。

Docker停止

systemctl stop docker

IPマスカレード(NAPT)をfirewalldで許可

$ firewall-cmd --add-masquerade --permanent
success
$ firewall-cmd --reload
success

Docker起動

systemctl start docker

「docker-compose」構築

今回作成した「docker-compose」ですが「django」フォルダ配下で以下の構成とし、Nginxを連携するので「Nginx」フォルダを追加しています。

また、PostgreSQLのデータベースは同フォルダ内に「db-data」フォルダを作成し、ボリュームを共有します

$ tree
.
|-- Dockerfile
|-- db-data
|-- docker-compose.yml
|-- manage.py
|-- mysite
|   |-- __init__.py
|   |-- __pycache__
|   |   |-- __init__.cpython-38.pyc
|   |   |-- settings.cpython-38.pyc
|   |   |-- urls.cpython-38.pyc
|   |   `-- wsgi.cpython-38.pyc
|   |-- asgi.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
|-- nginx
|   |-- Dockerfile
|   |-- nginx.conf
`-- requirements.txt

作成する必要なファイルは以下となります。

  • Dockerfile
  • docker-compose.yml
  • requirements.txt
  • Nginxフォルダ配下(Dockerfile、nginx.conf)

それぞれのファイルの設定は以下の通りとなります。

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir ./code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

docker-compose

$ cat docker-compose.yml
version: '3'
 
services:
  db:
    image: postgres
    ports:
            - 5432:5432
    environment:
            - POSTGRES_PASSWORD=postgres
    volumes:
            - ./db-data:/var/lib/postgresql/data
    container_name: postgres

  web:
    restart: always
    build: .
    command: bash -c "python manage.py runserver 0.0.0.0:8000 && python manage.py migrate"
    volumes:
            - .:/code
    ports:
            - 8000:8000
    depends_on:
            - db
    container_name: django

  nginx:
    build: ./nginx
    ports:
            - 80:80
    depends_on:
            - web
    container_name: nginx

volumes:
    db-data:

$ 

requirements.txt

Django
psycopg2
gunicorn

Nginx(Dockerfile、nginx.conf)

Nginxを連携する場合は別途、「nginx」フォルダを作成し、配下で「Dockerfile」と「nginx.conf」を作成します。

$ cd nginx/
$ touch Dockerfile
$ touch nginx.conf

作成した、各ファイルの内容は以下となります。

Dockerfile

FROM nginx:latest

# デフォルトのconfを消して、別の設定を追加
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d

nginx.conf

upstream django {
    # コンテナのサービス名を指定し、名前解決
    server web:8000;
}

server {
    # 80ポートで待ち受け
    listen 80;

    location / {
        proxy_pass http://django;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
	# gzip圧縮
        gzip on;
        gzip_min_length 1k;
        gzip_types text/css text/javascript application/x-javascript application/javascript application/json image/svg+xml;
        gzip_disable "msie6";
    }

}
$

「docker-compose」でDjangoプロジェクト作成

上記ファイルの作成が完了したら、次に対象のフォルダ直下で以下コマンドでDjangoプロジェクトを作成します。

$ docker-compose run web django-admin startproject mysite .

プロジェクト実行後、以下のようにプロジェクトのファイル・フォルダが作成されたことを確認できます。

$ ll
total 40
-rw-r--r--  1 root             root  147 Apr 28 16:17 Dockerfile
drwx------ 19 systemd-coredump root 4096 May  2 15:12 db-data
-rw-r--r--  1 root             root  641 Apr 28 15:05 docker-compose.yml
-rwxr-xr-x  1 root             root  626 Apr 28 16:22 manage.py
drwxr-xr-x  3 root             root 4096 Apr 28 16:25 mysite
drwxr-xr-x  2 root             root 4096 Apr 30 10:55 nginx
-rw-r--r--  1 root             root   25 Apr 12 16:59 requirements.txt

DjangoをPostgreSQLデータベースに接続

Djangoのデータベース接続をPostgreSQLに設定します。
プロジェクトディレクトリで、「mysite/settings.py」ファイルを編集します。

vi mysite/settings.py
#ALLOWED_HOSTS = []
ALLOWED_HOSTS = ["*"]
 
#DATABASES = {
#    'default': {
#        'ENGINE': 'django.db.backends.sqlite3',
#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#    }
#}
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD' : 'postgres',
        'HOST' : 'db',
        'PORT' : 5432,
    }
}

データベースの「HOST」には、「docker-compose」のサービスであるdbを指定することで、コンテナ上で名前解決しアクセスします。

「docker-compose」でDjango+PostgreSQL+Nginx起動

Djangoプロジェクトが正常に作成された後、「docker-compose」で起動します。

$ docker-compose up

ブラウザを起動し、Nginxで設定したポート番号(80)へアクセスするとDjangoのポート(8000)へ転送され、以下のページが表示されると成功となります。

docker-composeを利用した連携の構築は以上となります。

エンジニアスキルをアップする勉強法

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。

あわせて読みたい
現役エンジニアがおすすめするVPSレンタルサーバ比較(高速SSD限定) 格安VPS比較(2025年最新版)

Docker
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)



検索
カテゴリー
新着記事
  • XServerVPS アニメ風 男の子 プログラミングをしている VPSを利用している 楽しそうにしている
    XServerVPSで証明書(SSL)を取得する方法
    2025年3月24日
    XServerVPS
  • レンタルサーバ アニメ風 女の子 楽しんでパソコンをしている 目がキラキラ
    WordPressがレンタルサーバよりVPSで利用する方がおすすめの理由
    2025年3月19日
    VPS
  • VPS レンタルサーバー アニメ風 女の子 プログラミングをしている VPSを利用している 楽しそうにしている
    VPSとクラウドの違いとは?初心者向けにわかりやすく解説
    2025年3月5日
    VPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSはWindows serverを利用できない。その理由と利用できるOSは?
    2025年3月4日
    シンVPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSでゲームを利用する環境はあるのか
    2025年3月4日
    シンVPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSのサイトの表示速度は他社に比べて早いのか?
    2025年3月4日
    シンVPS
目次
目次