简体   繁体   中英

Django w/ Docker, Nginx, Gunicorn and SSL

this may be a duplicate but I didn't find a good answer in previous questions, and I am totally new to sysadmin and Django. Docker, Nginx etc. but am trying to troubleshoot HTTPS deployment w/ Django from this guide here

The connection to my server isn't working and visiting my FQDN in a browser times out.

Here's my project structure:

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

Here are my files:

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

main 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 \

How can I make this setup work properly for SSL/HTTPS requests? I can't seem to find my error.

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

server django:8000;

Your gunicorn (start.sh) tries to listen on port 80 and nginx also has port 80 acquired. Change gunicorn port to something else like 8000. Also look into nginx errors.log file to know what exact errors are. Make sure your application server gunicorn is running and accepting request.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM