

### 実現したいこと

EC2インスタンスのpublic IPアドレスに紐づけた独自ドメイン（=
example.com)にアクセスし、GunicornでサーブされているDjangoアプリからの応答を、Nginx as a reverse
proxyを通じて、ブラウザに表示したいです。

### 問題点

  * public IPアドレスにアクセスすると、Djangoアプリからの応答を確認できます。
  * example.comにアクセスすると、「このサイトにアクセスできません」となります。
  * 以上より、ドメインの紐付けに失敗していると予測するも、「example.com/admin」にはアクセスできるため、紐付け自体には問題がなさそうです。

### 試したこと

  1. Route53にて独自ドメインとEC２インスタンスのpublic IPを、Aレコード及びネームサーバーの設定を通じて、紐づけました。

  2. HTTPアクセスを受けられるように、セキュリティグループでポート80を開け、ソースを0.0.0.0と設定した。

  3. EC2インスタンス内で、Gunicorn/Django、Nginx、PostgreSQLのコンテナたちを、以下のdocker-compose.yml & default.confを用いて作成しました。

どうかアドバイス宜しくお願いいたします！

### 関連するコード類

docker-compose.yml

[code]

    version: "3.9"
    services:
    
      web:
        # コンテナ名をwebに指定
        container_name: web
        # NginxのDockerfileをビルドする
        build:
          # ビルドコンテキストはカレントディレクトリ
          context: .
          dockerfile: ./nginx/Dockerfile
        # ボリュームを指定
        # ローカルの/staticをコンテナの/staticにマウントする
        volumes:
          - ./static:/static
          - ./nginx/conf.d:/etc/nginx/conf.d
          - ./etc/letsencrypt:/etc/letsencrypt
          - ./var/www/html:/var/www/html
        
        ports:
          - "80:80"
       
        depends_on:
          - api
      certbot:　# 後のHTTPS化に使います
        image: certbot/certbot:v1.7.0
        volumes:
          - /etc/letsencrypt:/etc/letsencrypt
          - /var/www/html:/var/www/html
        command: ["--version"]
    
      api:
        build: ./api
        command: gunicorn server.wsgi:application --bind 0.0.0.0:8000
        environment: 
          - OPENAI_API_KEY=${OPENAI_API_KEY}
          - SECRET_KEY=${SECRET_KEY}
          - DB_NAME=${DB_NAME}
          - DB_USER=${DB_USER}
          - DB_PASS=${DB_PASS}
          - DB_HOST=${DB_HOST}
          - DB_PORT=${DB_PORT}
        volumes:
          - ./api:/app
        ports:
          - "8000"
        depends_on:
          - db
    
      db:
        image: postgres:13
        environment:
          POSTGRES_DB: ${DB_NAME}
          POSTGRES_USER: ${DB_USER}
          POSTGRES_PASSWORD: ${DB_PASS}
        volumes:
          - postgres_data:/var/lib/postgresql/data/
    
    volumes:
      postgres_data:
    
[/code]

default.conf

[code]

    upstream django {
        # サーバにDjangoのコンテナ名を指定。今回はapp
        # ポートはDjangoのコンテナの8000番ポート
        server api:8000;
    }
    
    server {
        # HTTPの80番ポートを指定
        listen 80;
        server_name example.com;
    
        # プロキシ設定
        # 実際はNginxのコンテナにアクセスしてるのをDjangoにアクセスしてるかのようにみせる
        location / {
            proxy_pass http://django;
        }
    }
    
[/code]


CC BY-SA 4.0
2023-06-29T07:28:17.397
95412
2023-06-29T12:10:16.843
2023-06-29T12:10:16.843
question
django nginx amazon-ec2 docker-compose amazon-route53
独自ドメインをEC2インスタンスのpublic IPに紐付けたが、ブラウザからアクセスできない