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. Python
  5. Django
  6. 【Django】Dockerコンテナの本番環境設定と静的ファイル(DEBUG=False)読み込みエラー解決方法

【Django】Dockerコンテナの本番環境設定と静的ファイル(DEBUG=False)読み込みエラー解決方法

2020 7/21
Django
2020年7月21日

現在、Dockerコンテナ上でDjangoでWebアプリを構築していますが、前回、404エラーページを作成し表示するために「settings.py」で「DEBUG = False」(本番環境)にした際、static配下の静的ファイルが読み込めない事象が発生しました。

色々と調べた結果、うまく表示ができる様になりエラーも解決したので今回は「Django」の本番環境に変更した際の静的ファイルの読み込ませ方をまとめます。
ちなみにこの設定は、通常の設定でも問題ないですが、Dockerコンテナ上での設定となるので注意してください。

前回の記事はこちらから

あわせて読みたい
【Django】簡単な404エラーページを作成し表示する方法 DjangoでWebアプリを構築している際、開発環境下ではエラーページはデバックモードとなっているためにパスが見える表示の画面となります。 この画面だと、攻撃者からも...

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

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

Djangoで本番環境への切り替え時に静的ファイルを読み込ませるために「–insecure」オプションを付けることで解決

まず、私のDocker環境ですが、以下の通りの構成となります。

  • Django version3.0
  • https-portal (Nginxが含まれる)
  • PosgreSQL

静的ファイルは「static」フォルダ配下に配置しています。
ここにcssや画像ファイルなどをまとめています。

$ tree
.
|-- Dockerfile
|-- db-data
|-- docker-compose.yml
|-- manage.py
|-- myhp
|-- mysite
|-- requirements.txt
|-- ssl_certs
|-- static
|   |-- css
|   |   `-- simple-sidebar.css
|   |-- gulpfile.js
|   |-- images
|   |   |-- network
|   |   |   `-- pc.png
|   |   `-- win_flash01.png
|   |-- index.html
|   |-- js
`-- templates
    |-- 404.html
    |-- base.html
    |-- index.html

Djangoで本番環境へ設定した際に発生するエラー詳細

今回、Djangoで本番環境に変更する際に以下の設定を実施します。
以下の「DEBUG」を「False」に変更するだけです。

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

設定後、Webサイトを確認すると、サイトの構成が崩れ、テキストファイルしか表示されていない状態となっていました。

実際に検証をして確認した画像が以下となります。

エラーでは「text/html」として読み込んでいる様な状態となり、cssファイルをうまく読み込めていない様です。

Refused to apply style from 'https://test.engineers-life.com/static/css/simple-sidebar.css' because its MIME type ('text/html') is not a supported stylesheet MIME type, and strict MIME checking is enabled.

色々と調べて試行錯誤した結果、きれいにサイトが表示できる様になったので、以下でまとめます。

「Django」runserverコマンドのオプション「–insecure」をつけることで静的ファイルを読み込む

まず、コマンドオプションの「ー-insecure」ですが、DEBUGがFalseの場合でも静的ファイルの提供を許可するオプションコマンドの様です。

ただし、他のページでは、これはあまりよろしくないと言うところもありますが、デフォルトの「staticfiles」は使用しないことと、Django上で作成したアプリを「settings.py」内のINSTALLED_APPSに追加しすることでこの機能は有効となるとのことです。

実際の設定だと以下の様なコマンドとなります。

$ python manage.py runserver 0.0.0.0:8000 --insecure

ただし、今回はDockerコンテナ上で構築しているDjangoとなるので、以下の様に「docker-compose.yml」の17行目に設定を追加します。

※ 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 --insecure && python manage.py migrate"
    volumes:
            - .:/code
    ports:
            - 8000:8000
    depends_on:
            - db
    container_name: django

  https-portal:
    image: steveltn/https-portal:1
    ports:
            - 80:80
            - 443:443
    links:
            - web
    restart: always
    environment:
      DOMAINS: 'test.engineers-life.com -> http://web:8000'
      STAGE: 'production' # Don't use production until staging works
      #FORCE_RENEW: 'true'
    container_name: https-portal
    volumes:
            - ./ssl_certs:/var/lib/https-portal
            - ./nginx/http_config:/var/lib/nginx/test.engineers-life.com.conf.erb:ro
            - ./nginx/https_config:/var/lib/nginx/test.engineers-life.com.ssl.conf.erb:ro
volumes:
    db-data:
    ssl_certs:
$ 

次に「settings.py」で、「DEBUG」、「STATIC」の設定を以下の様に変更します。
「ALLOWED_HOSTS」は自身のホスト名、もしくは「localhost」、「127.0.0.1」を設定します。

アスタリスク「*」は本番環境では使用しないでください。


# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

ALLOWED_HOSTS = ['test.engineers-life.com']

------中略------

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/


STATIC_ROOT = "/docker/www/django/static/"
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

Dockerコンテナを再起動

上記設定が完了したら最後にDockerコンテナを再起動します。
docker-composeコマンドを実施しますが、「restart」は設定が反映されないので、「down」、「up」コマンドを実施します。

$ docker-compose down
$
$ docker-compose up -d

これで設定が反映されるのでサイトを確認しましょう。

静的ファイルも正常に読み込まれてきれいに表示されています。

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

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

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

Django
よかったらシェアしてね!
  • 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
目次
目次