[技术博客]ubuntu+nginx+uwsgi+Django+https的部署

ubuntu+nginx+uwsgi+Django+https部署文档

配置机器介绍

操作系统:Ubuntu 18.04.2 LTS 64位

python版本:Python 3.6.7

Django版本:Django 2.2

首先使用root用户登录服务器。

安装python3和pip3

apt update
apt install python3
apt install python3-pip

安装Django

pip3 install django

配置并启动Django项目

下载项目后,进入项目主目录,切换到back_end_server分支,进入backend文件夹,执行

pip3 install -r requirements.txt

安装相关依赖。安装过程中下载速度过慢时可以更换pip源为国内源(https://blog.csdn.net/chenghuikai/article/details/55258957)。

将settings.example.py文件内容复制到settings.py并修改相关配置:

在settings.py文件中加入域名:

ALLOWED_HOSTS = ['www.example.com']

在数据库中构建相关的数据表:

python3 manage.py makemigrations
python3 manage.py migrate

启动Django自带开发服务器runserver进行临时开发和测试:

python3 manage.py runserver 0:80

启动之后便可以对服务器进行访问。

runserver默认使用http连接,可通过如下方式配置ssl证书使用https连接:

pip3 install django-extensions 
pip3 install django-werkzeug-debugger-runserver 
pip3 install pyOpenSSL

将生成的ssl证书放在服务器上后启动runserver:

python3 manage.py runserver_plus 0:443 --cert-file /etc/certificate/certificate.crt  --key-file /etc/certificate/key.key

其中--cert-file--key-file后为对应的ssl证书文件路径。

安装并配置uWSGI

Django 自带的runserver是一个用于开发的简易服务器,它是一个用纯Python写的轻量级的Web服务器,目的是为了让你能快速的开发出想要的东西,并不适用于实际的生产环境中。

在生产环境中,Django的主要部署平台是WSGI,它是Python的标准web服务器和应用,而uWSGI是实现了WSGI的工具。

安装uWSGI:

pip3 install uwsgi

遇到如下问题时

    [x86_64-linux-gnu-gcc -pthread] core/dot_h.o
    [x86_64-linux-gnu-gcc -pthread] core/config_py.o
    *** uWSGI compiling embedded plugins ***
    [x86_64-linux-gnu-gcc -pthread] plugins/python/python_plugin.o
    In file included from plugins/python/python_plugin.c:1:0:
    plugins/python/uwsgi_python.h:2:10: fatal error: Python.h: No such file or directory
     #include <Python.h>
              ^~~~~~~~~~
    compilation terminated.

    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-8zavi4g8/uwsgi/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-g8yr_0sf-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-8zavi4g8/uwsgi/

需要安装python3-dev包:

apt install build-essential python-dev

在Django项目的同级目录下新建uwsgi目录并在其中添加uwsgi.ini文件:

[uwsgi]
# 这个端口需要打开
http-socket = :8001

# 需要生成的sock文件,nginx会通过这个sock文件与django通信
# 注意这个socket文件要放在服务器的根目录下,不要是某个用户的文件夹下
# 否则以后会出现访问权限问题
socket=/www/backend_uwsgi.sock

chdir = /root/GroupWork/backend/
# module=backend.wsgi:application

# Django项目中uwsgi.py的路径(相对于Django项目根路径)
wsgi-file = backend/wsgi.py
# wsgi-file = /root/GroupWork/backend/backend/wsgi.py

master = true

# 设置启动相应的uwsgi进程数和线程数
processes = 10
threads = 2

# 设置日志文件路径
daemonize = /root/GroupWork/backend/uwsgi/uwsgi.log
pidfile = /root/GroupWork/backend/uwsgi/uwsgi.pid

# env = DJANGO_SETTINGS_MODULE=backend.settings

在根目录下新建www文件夹:

mkdir /www

启动uwsgi:

uwsgi --ini uwsgi/uwsgi.ini

关闭所有uwsgi进程:

killall -9 uwsgi

安装并配置nginx

Nginx是一个异步框架的开源Web服务器,因为并发能力强、占用资源少而被广泛应用在许多网站项目中。在实际应用中,可以使用Nginx作为反向代理服务器,通过uWSGI连接Nginx和Django,当Nginx接收到一个静态文件请求时直接从磁盘读取并返回对应的文件,而接收到一个动态数据请求时,先将请求代理到uWSGI服务器,然后调用Django中相应的视图函数进行处理。

安装Nginx:

apt install nginx

/etc/nginx/conf.d/文件夹内添加如下配置文件:

# /etc/nginx/conf.d/django.conf

upstream django {
    server 服务器的外网ip:443;  # 服务器的外网ip,443是https的默认端口
}

server {
  listen 443 ssl;
  server_name 域名;

  ssl on;
  # 证书和秘钥的绝对路径
  ssl_certificate /etc/certificate/certificate.crt;
  ssl_certificate_key /etc/certificate/key.key;

  client_max_body_size 5M;
  charset utf-8;

  # nginx日志文件的路径
  access_log /root/GroupWork/backend/nginx/https.access.log; 
  error_log /root/GroupWork/backend/nginx/https.error.log;

  # 指定django项目中存储媒体文件的地址
  location /media { 
      alias /root/GroupWork/backend/media;
  }

  # 指定django项目中存储静态文件的地址
  location /static {
      alias /root/GroupWork/backend/static;
  }

  location / {
    # 之前配置uwsgi时新建的socket文件
    uwsgi_pass unix:///www/backend_uwsgi.sock; 
    include /etc/nginx/uwsgi_params;
  }
}

修改/etc/nginx/nginx.conf文件,将nginx的使用用户改变为当前用户:

user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

启动nginx:

nginx

重启nginx:

reload -s nginx

强制关闭所有nginx进程:

pkill -9 nginx

启动服务器

启动服务器时需先启动uwsgi,再启动Nginx:

uwsgi --ini uwsgi/uwsgi.ini
nginx

每次修改django项目后都需要重新启动uwsgi:

killall -9 uwsgi
uwsgi --ini uwsgi/uwsgi.ini

转载于:https://www.cnblogs.com/Water-T/p/11044196.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值