django - 我正在尝试在 AWS Lightsail 中的 Docker 上部署 Django,页面在没有连接到服务器的情况下卡住加载

标签 django docker nginx gunicorn amazon-lightsail

我一直在尝试使用 Gunicorn、NginX 和 Docker 在 Lightsail 上部署 Django 应用程序。我看过多个教程,但都没有成功。我对大多数概念都不熟悉,而且我几乎一直在盲目跟随。到目前为止,一切似乎都在服务器本身上运行,但我无法在网页上看到结果。我已经将它配置为“生产”(不确定我是否做得对),并且我已经在我的域中添加了一条记录,该记录重定向到该服务器。该网页只是不断缓冲,即使我尝试将其设置为端口 8000(用于开发)也是如此。我想我已经遇到了一些实例,我在 docker-compose logs 上看到了“301 5”永久移动的日志,但仅此而已。

这是 Dockerfile、docker-compose.yml 和 nginx conf.d 文件(这可能是最重要的。

docker-compose.yml

version: '3.7'

services:
    web:
        build:
        environment: 
            - ENVIRONMENT=production
            - SECRET_KEY=NOT IMPORTANT
            - DEBUG=0
            - EMAIL_HOST_USER=EMAIL
            - EMAIL_HOST_PASSWORD=PASSWORD
        volumes:
            - .:/code
            - static_volume:/code/staticfiles
        depends_on: 
            - db
        networks:
            - nginx_network
            - db_network
    db:
        image: postgres:11
        env_file:
            - config/db/db_env
        networks:
            - db_network
        volumes:
            - db_volume:/var/lib/postgresql/data
    nginx:
        image: nginx:1.17.0
        ports:
            - 80:80
        volumes:
            - ./config/nginx/conf.d:/etc/nginx/conf.d
            - static_volume:/code/staticfiles
        depends_on:
            - web
        networks:
            - nginx_network
networks:
        nginx_network:
            driver: bridge
        db_network:
            driver: bridge
volumes:
        db_volume:
        static_volume:

docker 文件:

   # Pull base image
FROM python:3.7

# Environment variables

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Work directory

WORKDIR /code

# Dependencies
COPY Pipfile Pipfile.lock /code/
RUN pip install pipenv && pipenv install --system

# Copy project
COPY . /code/

# expose port
EXPOSE 80

# gunicorn
CMD ["gunicorn", "--chdir", "my_project", "--bind", ":80", "mbdebate_project.wsgi:application"]

session 文件:

upstream hello_server {
    server web:80;
}

server {
    listen 80;
    server_name mydomain.com;

    location / {
        proxy_pass http://hello_server;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }

    location /static/ {
        alias /code/staticfiles/;
    }
}

设置很标准,我不认为问题在那里。任何帮助将不胜感激:)。

我遵循的教程:tpawamoy.github.io/2018/02/01/docker-compose-django-postgres-nginx.html

最佳答案

在处理 Flask 应用程序时,我在连接 Nginx 时遇到了类似的问题。

在 nginx.conf 上,我在 app.run 中使用了相同的主机配置。

将 conf.d 中的 web:80; 更改为 Django 应用程序公开的主机。**

我的情况:-

应用.py

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

nginx.conf

upstream flask-app {
    server 0.0.0.0:5000; 
}

server {

    listen 80 default_server;
    # https for production
    location / {
        proxy_pass http://flask-app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }
}

关于django - 我正在尝试在 AWS Lightsail 中的 Docker 上部署 Django,页面在没有连接到服务器的情况下卡住加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61692085/

相关文章:

docker-compose,无法在docker容器中打印环境变量

python - AWS EB docker 应用程序 : why to configure nginx twice?

php - Docker 化 Laravel 应用程序,为什么要复制源代码两次?

django - 如何更改使用 Django AbstractEmailForm 类创建的表单上的提交按钮文本

django - uWSGI 作为 HTTP 服务器 : in config. ini 选项称为 `http-socket` ,而不是 `http`

Django:具有 blank=True、null=True、unique=True 的模型字段给管理员带来麻烦

node.js - 如何配置 nginx 将 websocket 转发到不同的进程

python - 在 django 中按 ManyToMany 关系列出标签

docker - 使用 Docker-Compose 在 Docker Volume 中生成测试 ASP.NET Core 测试结果

docker - docker ps -a是什么意思