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

配置机器介绍

操作系统:Ubuntu 18.04.2 LTS 64位

python版本:Python 3.6.7

Django版本:Django 2.2

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

安装python3和pip3

  1. apt update
  2. apt install python3
  3. apt install python3-pip

安装Django

  1. pip3 install django

配置并启动Django项目

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

  1. pip3 install -r requirements.txt

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

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

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

  1. ALLOWED_HOSTS = ['www.example.com']

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

  1. python3 manage.py makemigrations
  2. python3 manage.py migrate

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

  1. python3 manage.py runserver 0:80

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

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

  1. pip3 install django-extensions
  2. pip3 install django-werkzeug-debugger-runserver
  3. pip3 install pyOpenSSL

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

  1. 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:

  1. pip3 install uwsgi

遇到如下问题时

  1. [x86_64-linux-gnu-gcc -pthread] core/dot_h.o
  2. [x86_64-linux-gnu-gcc -pthread] core/config_py.o
  3. *** uWSGI compiling embedded plugins ***
  4. [x86_64-linux-gnu-gcc -pthread] plugins/python/python_plugin.o
  5. In file included from plugins/python/python_plugin.c:1:0:
  6. plugins/python/uwsgi_python.h:2:10: fatal error: Python.h: No such file or directory
  7. #include <Python.h>
  8. ^~~~~~~~~~
  9. compilation terminated.
  10. ----------------------------------------
  11. 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包:

  1. apt install build-essential python-dev

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

  1. [uwsgi]
  2. # 这个端口需要打开
  3. http-socket = :8001
  4. # 需要生成的sock文件,nginx会通过这个sock文件与django通信
  5. # 注意这个socket文件要放在服务器的根目录下,不要是某个用户的文件夹下
  6. # 否则以后会出现访问权限问题
  7. socket=/www/backend_uwsgi.sock
  8. chdir = /root/GroupWork/backend/
  9. # module=backend.wsgi:application
  10. # Django项目中uwsgi.py的路径(相对于Django项目根路径)
  11. wsgi-file = backend/wsgi.py
  12. # wsgi-file = /root/GroupWork/backend/backend/wsgi.py
  13. master = true
  14. # 设置启动相应的uwsgi进程数和线程数
  15. processes = 10
  16. threads = 2
  17. # 设置日志文件路径
  18. daemonize = /root/GroupWork/backend/uwsgi/uwsgi.log
  19. pidfile = /root/GroupWork/backend/uwsgi/uwsgi.pid
  20. # env = DJANGO_SETTINGS_MODULE=backend.settings

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

  1. mkdir /www

启动uwsgi:

  1. uwsgi --ini uwsgi/uwsgi.ini

关闭所有uwsgi进程:

  1. killall -9 uwsgi

安装并配置nginx

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

安装Nginx:

  1. apt install nginx

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

  1. # /etc/nginx/conf.d/django.conf
  2. upstream django {
  3. server 服务器的外网ip:443; # 服务器的外网ip,443是https的默认端口
  4. }
  5. server {
  6. listen 443 ssl;
  7. server_name 域名;
  8. ssl on;
  9. # 证书和秘钥的绝对路径
  10. ssl_certificate /etc/certificate/certificate.crt;
  11. ssl_certificate_key /etc/certificate/key.key;
  12. client_max_body_size 5M;
  13. charset utf-8;
  14. # nginx日志文件的路径
  15. access_log /root/GroupWork/backend/nginx/https.access.log;
  16. error_log /root/GroupWork/backend/nginx/https.error.log;
  17. # 指定django项目中存储媒体文件的地址
  18. location /media {
  19. alias /root/GroupWork/backend/media;
  20. }
  21. # 指定django项目中存储静态文件的地址
  22. location /static {
  23. alias /root/GroupWork/backend/static;
  24. }
  25. location / {
  26. # 之前配置uwsgi时新建的socket文件
  27. uwsgi_pass unix:///www/backend_uwsgi.sock;
  28. include /etc/nginx/uwsgi_params;
  29. }
  30. }

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

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

启动nginx:

  1. nginx

重启nginx:

  1. reload -s nginx

强制关闭所有nginx进程:

  1. pkill -9 nginx

启动服务器

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

  1. uwsgi --ini uwsgi/uwsgi.ini
  2. nginx

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

  1. killall -9 uwsgi
  2. uwsgi --ini uwsgi/uwsgi.ini

[技术博客]ubuntu+nginx+uwsgi+Django+https的部署的更多相关文章

  1. 【技术博客】nginx服务器的https协议实现

    在本学期软件工程的Alpha和Beta阶段,我们的服务器部署都是使用基础的http协议,http在网络路由间的信息转发都为明文,这对我们网站的账户密码登录来说很不安全,因此在Gamma阶段我们实现了h ...

  2. Ubuntu Nginx uwsgi django 初试

    /************************************************************************************** * Ubuntu Ngi ...

  3. nginx+uwsgi+django+virtualenv+supervisor部署web服务器

    wsgi 全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则 ...

  4. 【技术博客】MySQL和Django常用操作

    MySQL和Django是搭建网站常用的配置之一,在此记录一下在Windows系统搭建网站时MySQL以及Django常用的操作. MySQL MySQL的SQL语句不区分大小写,推荐将保留字大写,数 ...

  5. [技术博客]使用pylint实现django项目的代码风格检查

    使用pylint实现django项目的代码风格检查 前言 ​ 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码的风格必定会有很大的差别.且不说会存在多个人同时开发同一模块的情 ...

  6. [技术博客]海报图片生成——小程序canvas画布

    目录 背景介绍 canvas简介 代码实现 难点讲解 圆角矩形裁剪失败之PS的妙用 编码不要过硬 对过长的文字进行截取 真机首次生成时字体不对 drawImage只能使用本地图片 背景介绍 目标:利用 ...

  7. 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客

    多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署

  8. 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客

    自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署

  9. ubuntu NGINX uwsgi https 部署Django 遇到的问题

    搞了3天终于把Django成功部署到Ubuntu,记录一下: 引用来自泡泡茶壶: Ubuntu下的Nginx + Uwsgi + Django项目部署详细流程 前提说明: Django作为小程序的后端 ...

随机推荐

  1. 《 .NET并发编程实战》实战习题集 - 4 - 如何重用一次性资源

    如何重用以下一次性资源代码呢? string text; using (var stream = new StreamReader(path)) { text = stream.ReadToEnd() ...

  2. 配置 SSL、TLS 以及 HTTPS 来确保 Elasticsearch、Kibana、Beats 和 Logstash 的安全

    配置主机hosts文件 192.168.75.20 filebeat.local kibana.local logstash.local 192.168.75.22 node2.elastic.tes ...

  3. .net core SIMD范例分析

    单指令多数据流(SIMD)是CPU基本运算之外为了提高并行处理多条数据效率的技术,常用于多媒体处理如视频,3D模拟的计算.实现方式不同品牌的CPU各有自己的指令集,如SSE MMX 3DNOW等. C ...

  4. 在VB编程中,若一行代码太长需要换行时,行尾要加什么符号

    & _ 注意,&与_之间一定要有一个空格 例如: aa="select " & _     "  a,b,c" & _      ...

  5. tf.image.adjust_brightness等的使用

    import tensorflow as tfimport numpy as npimport cv2 as cvimport matplotlib.pyplot as pltsess=tf.Sess ...

  6. Python基础9

    Anacanda软件内更新的方法,而不是每次重装整个软件, 整体更新,省时省力. 但仍要掌握单个包更新的方法.

  7. MS Sql 优化步骤及优化not in一例

    今天接到客户投诉说系统卡死了,经过一翻努力,终于解决了.现将解决步骤记录一下,以便下次参考: 因为客户系统集中在阿里云上面,使用的是ms sql2008数据库,上面有N个客户,一下子无法知道是哪个客户 ...

  8. LoadRunner脚本录制常见问题

    LoadRunner录制脚本时为什么不弹出IE浏览器?当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决. 启动浏览器,打开Internet ...

  9. linux 下按照文件名模糊查找文件

    fnmatch int fnmatch(const char *pattern, const char *string, int flags); 参数说明 FNM_NOESCAPE 如果这个标志设置了 ...

  10. 201671010459 张旭辉 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 作业学习目标 (1)掌握软件项目评审会流程(2)反思总结课程学习内容 github仓库地址链接 [Git ...