首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django与Docker、Nginx、Gunicorn和SSL

Django与Docker、Nginx、Gunicorn和SSL
EN

Stack Overflow用户
提问于 2018-10-17 23:16:27
回答 2查看 2.8K关注 0票数 0

这可能是重复的,但我在前面的问题中没有找到好的答案,而且我对sysadmin和Django完全陌生。Docker,Nginx等,但我正在尝试使用this guide here的Django来排除HTTPS部署故障

与我的服务器的连接不起作用,在浏览器中访问我的FQDN超时。

下面是我的项目结构:

project_dir
├── assets
│   └── imgs
├── auth
│   ├── apps.py
│   ├── auth_forms.py
│   ├── __init__.py
│   ├── migrations
│   ├── __pycache__
│   ├── urls.py
│   └── views.py
├── changelog_6_3_2018.txt
├── changelog.txt
├── sub_app1
│   ├── tests.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
├── docker-compose.yml
├── Dockerfile
├── subapp2
│   ├── tests.py
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
├── main
│   ├── admin.py
│   ├── apps.py
│   ├── fields.py
│   ├── forms.py
│   ├── __init__.py
│   ├── migrations
│   ├── models.py
│   ├── __pycache__
│   ├── templatetags
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── manage.py
├── nginx
│   ├── nginx.conf
│   └── nginx.dockerfile
├── __pycache__
│   └── wsgi.cpython-36.pyc
├── README.md
├── requirements.txt
├── sheets
│   └── LTMonServer.xlsx
├── start.sh
├── static
│   ├── admin
│   └── imgs
├── templates
│   ├── auth
│   └── fv1
├── uwsgi.ini
├── venv
│   ├── bin
│   ├── lib
│   ├── pip-selfcheck.json
│   └── share
└── wsgi.py

以下是我的文件:

docker-compose.yml:

version: '2'
services:


  django:
    container_name: dsne_django
    build:
      context: .
    networks:
      - dsne-django-nginx
    volumes:
      - dsne-django-static:/usr/stc/app/static
    ports:
      - 8000:8000

  nginx:
    container_name: dsne-nginx
    build:
      context: ./nginx
      dockerfile: nginx.dockerfile
    networks:
      - dsne-django-nginx
    volumes:
      - dsne-django-static:/usr/src/app/static
      - dsne-nginx-cert:/etc/ssl/certs:ro
    ports:
      - 80:80
      - 443:443
    depends_on:
      - django

volumes:
  dsne-django-static:
  dsne-nginx-cert:

networks:
  dsne-django-nginx:
    driver: bridge

主Dockerfile:

FROM python:3.6.4-onbuild

ENV PROJECT_ROOT /usr/src/app
COPY start.sh /start.sh

# EXPOSE port 8000
EXPOSE 8000
EXPOSE 443
# command to execute to start server
CMD ["/start.sh"]

nginx.conf:

events { worker_connections 1024; }

http {

  upstream djangocluster {
    least_conn;
    server django:80;
  }

  server {

    listen 80;
    log_subrequest on;
    return 301 https://$host$request_uri;

  }

  server {

    listen 443;
    ssl on;

    ssl_certificate     /home/johnecker/iba_ltm.pem;
    ssl_certificate_key    /home/johnecker/ibaltm.key;

    log_subrequest on;

    location / {
      proxy_pass http://djangocluster;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_cache_bypass $http_upgrade;
    }

    location /static {
        autoindex on;
        alias /usr/src/app/static;
    }
  }
}

nginx Dockerfile:

FROM nginx:1.13.3

# Copy nginx configuration
COPY nginx.conf /etc/nginx/nginx.conf

# Expose website on ports
EXPOSE 80
EXPOSE 443

CMD ["nginx", "-g", "daemon off;"]

start.sh:

#!/bin/bash
# Start Gunicorn processes
echo Starting Gunicorn.

#make sure we are at project root
cd $PROJECT_ROOT


python manage.py collectstatic --noinput
cd /usr/src/app
pip3 install -r requirements2.txt

pwd
sudo exec gunicorn fv1.wsgi:application -w 3 \
    --bind 0.0.0.0:80 \
    --workers 3 \

如何才能使此设置针对SSL/HTTPS请求正常工作?我似乎找不到我的错误。

EN

回答 2

Stack Overflow用户

发布于 2019-04-08 09:00:57

django侦听端口8000而不是80。在nginx文件中替换。

server django:8000;
票数 0
EN

Stack Overflow用户

发布于 2019-05-11 15:58:13

您的gunicorn (start.sh)尝试侦听端口80,而nginx也获取了端口80。将gunicorn port更改为其他值,如8000。还要查看nginx errors.log文件,以了解确切的错误是什么。确保您的应用服务器gunicorn正在运行并接受请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52858269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档