【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
相关文章
|
5月前
|
中间件 应用服务中间件 nginx
Nginx+uWSGI+Django原理
Nginx+uWSGI+Django原理
|
5月前
|
前端开发 JavaScript 应用服务中间件
使用nginx部署网站
使用nginx部署网站
|
5月前
|
JavaScript 应用服务中间件 nginx
nginx部署vue项目
本文介绍了将Vue项目部署到Nginx的步骤,包括构建Vue项目、上传dist文件夹到服务器、安装Nginx、配置Nginx代理静态文件以及重启Nginx,确保了Vue应用可以通过域名或IP地址访问。
251 1
|
5月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
1420 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
5月前
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
326 1
|
5月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
300 0
|
4月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
299 45
|
6月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
192 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
4月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
127 2