LoginSignup
0
1

More than 3 years have passed since last update.

初学者がDocker+Django+gunicorn+nginx+PostgreSQL環境でCSSを配信できるようにしてみた

Last updated at Posted at 2021-03-08

前回の記事では簡単な日記アプリを作りましたが、CSSが配信されていなかったので、今回はその部分を修正していきます。

つくったもの

cssが適用されたページを表示したいと思います。

ログイン画面.PNG

コンテナを起動

$ docker-compose up -d
$ docker-compose exec web bash

静的ファイルの置き場所を変更する

settings.pyを開いて、静的ファイルの置き場所を指定します。

conf/settings.py
# 静的ファイルの配信
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

collectstaticを行い、静的ファイルを指定した場所に集めます。

$ python manage.py collectstatic

ボリュームがマウントされる

今、webコンテナの中でcollectstaticを実行したので、webコンテナ内にstaticフォルダが作成され、静的ファイルはその中に格納されました。下の図で言うと①です。

マウント.PNG

実は、docker-compose.ymlにボリュームマウントを記述しておいたので、作成したstaticフォルダはホストにもコピーされます。 上の図の②です。

docker-compose.yml
services:
  web:
    volumes:
      - './web:/code'

そして、staticフォルダはnginxコンテナにもマウントしているので、静的ファイルはnginxコンテナにもコピーされます。上の図の③です。

docker-compose.yml
services:
  nginx:
    volumes:
      - './web/static:/static'

さらにnginxコンテナにはguicornの設定ファイルがあり、静的ファイルの配信先として先ほどコピーされたstaticフォルダが指定されています。

nginx/conf/gunicorn.conf
location /static {
    alias /static/;
}

以上より、静的ファイルはnginxから配信されるようになります……というのが、私の理解なのですが、どうでしょうか…。間違っていたらご指摘いただけると嬉しいですm(_ _)m

確認する

localhost:80/adminにアクセスすると、今度はcssが適用されたページが表示されると思います。

ログイン画面.PNG

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1