[技术博客]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
[技术博客]ubuntu+nginx+uwsgi+Django+https的部署的更多相关文章
- 【技术博客】nginx服务器的https协议实现
在本学期软件工程的Alpha和Beta阶段,我们的服务器部署都是使用基础的http协议,http在网络路由间的信息转发都为明文,这对我们网站的账户密码登录来说很不安全,因此在Gamma阶段我们实现了h ...
- Ubuntu Nginx uwsgi django 初试
/************************************************************************************** * Ubuntu Ngi ...
- nginx+uwsgi+django+virtualenv+supervisor部署web服务器
wsgi 全称web server gateway interface,wsgi不是服务器,也不是python模块,只是一种协议,描述web server如何和web application通信的规则 ...
- 【技术博客】MySQL和Django常用操作
MySQL和Django是搭建网站常用的配置之一,在此记录一下在Windows系统搭建网站时MySQL以及Django常用的操作. MySQL MySQL的SQL语句不区分大小写,推荐将保留字大写,数 ...
- [技术博客]使用pylint实现django项目的代码风格检查
使用pylint实现django项目的代码风格检查 前言 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码的风格必定会有很大的差别.且不说会存在多个人同时开发同一模块的情 ...
- [技术博客]海报图片生成——小程序canvas画布
目录 背景介绍 canvas简介 代码实现 难点讲解 圆角矩形裁剪失败之PS的妙用 编码不要过硬 对过长的文字进行截取 真机首次生成时字体不对 drawImage只能使用本地图片 背景介绍 目标:利用 ...
- 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客
多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署
- 自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客
自动化运维工具Ansible详细部署 - 人生理想在于坚持不懈 - 51CTO技术博客 自动化运维工具Ansible详细部署
- ubuntu NGINX uwsgi https 部署Django 遇到的问题
搞了3天终于把Django成功部署到Ubuntu,记录一下: 引用来自泡泡茶壶: Ubuntu下的Nginx + Uwsgi + Django项目部署详细流程 前提说明: Django作为小程序的后端 ...
随机推荐
- 【leetcode-200 深度优先+广度优先】 岛屿数量
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 1: 输入: ...
- 关于插件Markdown Preview Enhanced的使用技巧
目录 1.关于TOC 2.关于转义符 3.绘图 3.0 绘图配色主题 3.1 Flowchart(流程图) 3.2 Sequence diagram(顺序图) 3.4 保存为HTML shanzm 1 ...
- mini QQ(项目一)
一个多人聊天工具(C/S结构),实现了如下功能: 一个可视化窗口,支持鼠标点击事件 注册功能,用户可以注册自己的聊天账号, 注册信息包括: 账号名(可以用姓名来替代账号,支持中文), 密码(聊天框输入 ...
- 2019 蓝鲸人java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.蓝鲸人等公司offer,岗位是Java后端开发,因为发展原因最终选择去了蓝鲸人,入职一年时间了,也成为了面试官 ...
- sql server 大数据, 统计分组查询,数据量比较大计算每秒钟执行数据执行次数
-- 数据量比较大的情况,统计十分钟内每秒钟执行次数 ); -- 开始时间 ); -- 结束时间 declare @num int; -- 结束时间 set @begintime = '2019-08 ...
- rpm安装包制作
RPM是RPM Package Manager(RPM软件包管理器) 1. 安装制作工具 # yum install rpm-build 2. 目录结构 /root/rpmbuild/SOURCES ...
- Alpha4
一.站立式会议照片 二.工作进展 (1) 昨天已完成的工作 a. 实现用户登录时获取用户信息功能 b. 实现个人目标列表,允许用户在个人目标界面浏览已设置的目标 c. 继续实现目标广场列表 (2)今天 ...
- 如何用StatSVN统计SVN服务器某项目的代码量
startsvn下载地址: https://sourceforge.net/projects/statsvn/?source=typ_redirect svn下载地址: https://www.vis ...
- javascript之DOM(三Element类型)
Element类型用于表现XML和HTML的元素,提供了对元素标签名.子节点及特性的访问. 要访问标签名可以使用nodeName和tagName属性,其返回值是一样的. <p id=" ...
- 工作必备之正则匹配、grep、sed、awk
常用正则:匹配空行:^\s*\n 匹配www开头:^www 添加行号:awk '$0=""NR". "$0' /etc/yum.conf 1.所有域名前加www ...