【 Docker＋Nginx＋Django＋RDS】WEBアプリができるまで②NginxでDjangoのようこそページへたどり着く

# 前置き
独学で、子供の成長アプリを作った時のことを、記録として残していきます。
間違っているところなどあれば、ご連絡お願いします。
　①[Djangoのようこそページへたどり着くまで](https://qiita.com/quantity82/items/e8c2392bf982efb55f80)
　②[NginxでDjangoのようこそページへたどり着くまで](https://qiita.com/quantity82/items/88a6348135e25c661feb)　<--ここです
　③[カスタムユーザーを作ってadminにたどり着く](https://qiita.com/quantity82/items/b3cd6ded5bbb5f3726f3)
　④[ログインログアウトをしよう](https://qiita.com/quantity82/items/8e4b7ce2ef56e60ad392)
　⑤[ユーザー登録（サインイン）機能を作ろう](https://qiita.com/quantity82/items/bbfc7e72d4a65c71e24c)
　⑥[ユーザーごとのデータ登録できるようにする〜CRU編](https://qiita.com/quantity82/items/4d019a4ee475208a5a26)
　⑦[ユーザーごとのデータ登録できるようにする〜削除編](https://qiita.com/quantity82/items/c48fee71b5f8eb766dae)
　⑧[画像ファイルのアップロード](https://qiita.com/quantity82/items/9bcbd25902f6878ee325)
　⑨[身長体重を記録する＠一括削除機能つき](https://qiita.com/quantity82/items/c8e58742eeaa8c0fc954)
　⑩[成長曲線グラフを描いてみよう](https://qiita.com/quantity82/items/619f5ed2a6cd45f7f592)
　⑪[本番環境へデプロイ＋色々手直し](https://qiita.com/quantity82/items/6e91b7ee7a2d7e0fab32)
# Goal
NginxからDjangoのようこそページへたどり着く

# uWsgiの設定
NginxとDjangoを繋ぐためのuwsgiを入れる。

```requirement.txt
Django==2.2.2
psycopg2==2.8.4
uwsgi==2.0.17
```

docker-composeも変更する。
nginxのコンテナ設定追加と、webコンテナのコマンド・ポート設定を変更する。

```yml:docker-compose.yml
version: "3"

services:

  nginx: #ここを追加する
    image: nginx:1.13
    ports:
      - "8000:8000"
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d
      - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
      - ./static:/static #staticも繋ぐ
    depends_on:
      - web

  db-postgres:
    image: postgres

  web:
    build: ./web
    volumes:
      - ./src:/code
    expose:
     - "8000" #ポートフォワードじゃなくて普通にport空ける
    depends_on:
      - db-postgres
    command: uwsgi --socket :8000 --module mysite.wsgi #uwsgi起動に変更
```

# Nginxの設定
こんなファイル体系になるように、nginx配下を作っていく

```
.
├── docker-compose.yml
├── nginx
│   ├── conf
│   │   └── mysite_nginx.conf
│   └── uwsgi_params
├── src
│   ├── manage.py
│   ├── mysite
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   │   ├── __init__.cpython-37.pyc
│   │   │   ├── settings.cpython-37.pyc
│   │   │   ├── urls.cpython-37.pyc
│   │   │   └── wsgi.cpython-37.pyc
│   │   ├── settings.py
│   │   ├── urls.py
│   │   └── wsgi.py
│   └── static
└── web
    ├── Dockerfile
    └── requirements.txt
```

confファイルで、静的レスポンスと動的レスポンスを振り分けてるイメージ。

```conf:conf/mysite_nginx.conf
upstream django {
    ip_hash;
    server web:8000;
}

server {
    listen      8000;
    server_name 127.0.0.1;
    charset     utf-8;

    client_max_body_size 75M;

    location /static {
        alias /static;
    }

    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params;
    }
}
```

uwsgi_paramsは、そのまま。

```:uwsgi_params
uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;
```

# Dockerで立ち上げよう

requirement.txtを直したら、buildしておく。

```
docker-compose build
```

Dockerを起動

```
docker-compose up
```

localhost:8000へアクセスする
Djangoのrunserverと同じように、初期画面が表示されたら成功！
<img width="1440" alt="スクリーンショット 2020-02-11 14.01.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547363/13a791fd-65d9-8d0e-83c8-0ad2ccc60474.png">


# 参考
https://www.macky-studio.com/entry/2019/07/01/132337