【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
相关文章
|
3月前
|
中间件 应用服务中间件 nginx
Nginx+uWSGI+Django原理
Nginx+uWSGI+Django原理
|
3月前
|
JavaScript 应用服务中间件 nginx
nginx部署vue项目
本文介绍了将Vue项目部署到Nginx的步骤,包括构建Vue项目、上传dist文件夹到服务器、安装Nginx、配置Nginx代理静态文件以及重启Nginx,确保了Vue应用可以通过域名或IP地址访问。
172 1
|
3月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
872 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
3月前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
38 4
|
3月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
184 0
|
4月前
|
监控 应用服务中间件 nginx
nginx+uwsgi+flask
nginx+uwsgi+flask
|
5月前
|
应用服务中间件 Linux 测试技术
Nginx+uWSGI
【8月更文挑战第22天】
46 6
|
5月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
76 2
|
5月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
2月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
199 45