【Django部署】Nginx+uWsgi部署Django项目

简介: 最近需要部署一个Django项目但是不能用宝塔面板!呜呜呜 不能懒人式一键部署了 那就学习一下黑框框部署吧

Nginx+uWsgi部署Django项目

最近需要部署一个Django项目但是不能用宝塔面板!

呜呜呜 不能懒人式一键部署了

那就学习一下黑框框部署吧

基本原理

  • 首先用户浏览器向nginx发送请求,nginx判断是动态请求还是静态请求,如果是静态请求,则直接返回静态文件。如果是动态请求,则将请求转发给uwsgi服务器,uwsgi调用我们的django进行处理请求,然后一步一步的再返回。
  • WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口
  • uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议
  • uwsgi是Nginx服务器和uWSGI服务器的通信协议,规定了怎么把请求转发给应用程序和返回

img

img

使用Xshell完成

1.上传文件到服务器

使用scp命令

scp 文件名 用户名@服务器HOST:上传到服务器的路径
// 需要提供 root 密码
scp name root@82.156.215.40:/root/ipbdTCF/

使用xftp等其他方式也可

2.配置虚拟环境

检查是否安装virtualenv

virtualenv --version

安装virtualenv

pip3 install virtualenv virtualenvwrapper
// 遇到权限问题在前面加上 sudo
sudo pip3 install virtualenv virtualenvwrapper

创建虚拟环境

virtualenv --no-site-packages --python=python3  虚拟环境文件夹名
  • --no-site-packages 这是构建干净,隔离的模块的参数 (如果virtualenv版本大于20默认携带此参数不需要此参数)
  • --python=python3 这个参数是指定虚拟环境以哪一个物理解释器为基础的
  • 最后一个是虚拟环境的名字 会创建这么一个文件夹

激活虚拟环境

source /路径/虚拟环境文件夹名/bin/activate

激活虚拟环境的原理就是修改了PATH变量,path的执行是有顺序的

修改了环境变量的位置

  • echo $PATH 检查环境变量
  • which python3
  • which pip3 检查虚拟环境是否正常

退出虚拟环境

deactivate 

项目依赖都装在虚拟环境中管理!

3.配置uwsgi

检查是否安装uwsgi

# 已安装会显示版本号
uwsgi --version

# 未安装使用 pip 安装一下
# 注意要在虚拟环境中安装
pip install uwsgi

启动项目

  • 注意:启动前先runserver测试一下是否配置完成能够正常运行
# 使用uwsgi启动项目
# --file 指向项目内  wsgi.py 文件
# --static-map 指向静态文件路径
# uwsgi --http 0.0.0.0:80 --file 项目名称/wsgi.py --static-map=/static=static
# 在项目目录下
uwsgi --http 0.0.0.0:80 --file teacher/wsgi.py --static-map=/static=static

启动后可在自己服务器的公网IP访问到Django项目

配置uwsgi

# 在项目目录下创建 uwsgi.ini 作为uwsgi配置文件
vim uwsgi.ini
# uwsgi.ini文件详情
[uwsgi]
# 项目目录
chdir=/opt/project_teacher/teacher/
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 指定项目的application
module=项目名.wsgi:application

# 指定sock的文件路径
# 与nginx通讯使用
socket=/项目绝对路径/uwsgi.sock
# 启用主进程
master=true
# 进程个数
workers=4
pidfile=/项目绝对路径/uwsgi.pid
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=1028

# 设置日志目录
# 日志保存地点
daemonize=/项目绝对路径/uwsgi.log
# 启动: ini 为uwsgi配置文件
uwsgi --ini uwsgi.ini
# 重启: pid 为uwsgi启动后保存uwsgi启动进程的文件
uwsgi --reload uwsgi.pid
# 停止: 
uwsgi --stop uwsgi.pid
# 查看uwsgi是否正常启动
ps aux | grep uwsgi

Nginx配置

nginx的安装请查看另外一篇博客

配置文件

worker_processes  4;
# 指定使用的用户
user root;

events {
    worker_connections  1024;
}

http {
    keepalive_timeout  65;
    server {
        # http 请求的端口
        listen 80;
        # https 请求的端口
        listen 443 ssl http2;
        # 配置的IP与域名
        # 这里随便输入的
        server_name www.abc.com 123.123.24.23;
        charset  utf-8;
        gzip on;
        gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
        # SSL证书配置
        ssl_certificate /usr/local/nginx/conf/cert/tcfapi/tcfapi.snowhouse.space_bundle.pem;
        ssl_certificate_key /usr/local/nginx/conf/cert/tcfapi/tcfapi.snowhouse.space.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        error_page  404           /404.html;
        error_page   500 502 503 504  /50x.html;
        # 指定项目路径uwsgi
        location / {
            include uwsgi_params;
            uwsgi_connect_timeout 30;
            # unix: 刚刚配置好的 uwsgi.sock 路径
            uwsgi_pass unix:/root/IPBDPythonGroup/medicalSys/tichengfen/uwsgi.sock;
        }
        # 指定静态文件路径
        location /static/ {
            alias  /root/IPBDPythonGroup/medicalSys/tichengfen/static/;
            index  index.html index.htm;
        }
    }
}
# 使用时记得配置全局环境变量
# 启动nginx
# 启动之后访问对应的nginx配置好的路径即可
nginx
# 关闭nginx
nginx -s stop
相关文章
|
4月前
|
前端开发 数据库 Docker
一款可以直接使用的招聘网站, react django开发招聘网站,docker 部署
一款可以直接使用的招聘网站, react django开发招聘网站,docker 部署
50 0
|
4月前
|
XML 应用服务中间件 Linux
在一个centos服务器上同时部署tomcat,django,flask
在一个centos服务器上同时部署tomcat,django,flask
72 0
|
6月前
|
负载均衡 应用服务中间件 nginx
Django通过Nginx和uWSGI实现负载均衡
Django通过Nginx和uWSGI实现负载均衡
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
101 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
1月前
|
数据采集 存储 数据处理
Python爬虫在Django项目中的数据处理与展示实例
Python爬虫在Django项目中的数据处理与展示实例
|
3月前
|
安全 JavaScript 搜索推荐
【实测】记一次用windows11家庭中文版部署django+vue项目的踩坑之旅
【实测】记一次用windows11家庭中文版部署django+vue项目的踩坑之旅
|
4月前
|
算法 Docker Python
Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
59 0
|
4月前
|
算法 Java Python
Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
47 0
|
4月前
|
Python
如何在 Django 中使用 MVT 创建基本项目?
如何在 Django 中使用 MVT 创建基本项目?
15 0
|
4月前
|
存储 前端开发 关系型数据库
Django 项目 MVT 结构
Django 项目 MVT 结构
51 1