Ubuntu+Nginx+uwsgi部署django项目
liuian 2025-01-03 17:21 44 浏览
相比较学习Django来说,部署应该是在整个环节中比较难的一项,特别是一些自学者,对liunx系统的命令行操作不熟悉,甚至是从来没有接触过服务器,这一块我相信劝退了很多人!当初我自己学习的时候也是如此!
但我仍然觉得自学是一件非常酷的事,虽说可能会走些弯路,但这些弯路何尝不是一种历练和积累呢?你看人生的每一步都是这样,越想走捷径的人最后都绕了远路,马云在成功之前也曾经历过无数失败,所以直面困难。
自学习编程,请做到以下这三点:
一、学会总结归纳问题,并养成做笔记的习惯
二、出现问题,学会利用搜索引擎去搜索问题
三、不懂的可以先照猫画虎,将你的需求实现,然后再去探寻一些概念性以及你不懂的知识点
好了,开始我们今天的正题,部署我们已经用django开发好的博客项目!
部署之前需要做的几件事
注意:以下几件事都必须在激活虚拟环境下完成
- 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requirements.txt的文件
pip3 freeze > requirements.txt读取requirements.txt文件,并安装项目依赖命令!
pip3 install -r requirements.txt 2. 搜集项目的静态文件
在项目的配置文件settings.py文件中添加添加静态文件路径
STATIC_ROOT = '/var/www/django-blog/static/'这将会把所有的静态文件拷贝至STATIC_ROOT配置的路径!
解决服务器的问题
学习阶段我们需要买一个云服务器吗?
我的答案是如果条件允许,建议你买一个初级的!费用也不是很高,一般做活动的话阿里云等这些平台都会很便宜!但购买服务器不是必须的,我们可以在本地电脑上安装虚拟机来充当服务器学习,一般安装系统为ubuntu或centos,虚拟机使用 VMware就可以!
虚拟机VMware哪里有?以及如何在虚拟机安装liu,nx系统 ?请参照自学编程的第二点,大家自行去解决这两个问题!
如何在本地链接到服务器?
一般我们开发用的系统都是windows 10,至少我是如此,土豪Mac请绕过,那首先必须安装openssh!
win10 openSSH安装教程:https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_install_firstuse
使用vscode编辑器链接远程服务器
一、安装扩展Remote Development
vscode本身就支持远程开发,请安装下边这个扩展!
二、添加远程服务器连接
三、保存服务器配置文件
安装Nginx
sudo apt-get install nginx检查nginx是否安装成功:*nginx -v 查看nginx的版本,如果正确显示格式如这样 nginx version: nginx/1.18.0 (Ubuntu),那么证明安装成功!
nginx常用命令:
- 启动nginx: service nginx start
- 停止nginx:service nginx stop
- 重启nginx:service nginx restart
- 重载配置文件:service nginx reload
- 查看nginx状态:service nginx status
安装git并克隆项目
ubuntu安装git,请参考这篇文章:http://www.lotdoc.cn/blog/post/28/
一、进入Nginx用来默认放置网站的文件夹
cd /var/www二、克隆项目到该文件夹
git clone https://gitee.com/qbiancheng/django-blog.git三、创建虚拟环境
python3 -m venv venv四、激活虚拟环境
linux: . venv/bin/activate
windows: venv\Scripts\activate五、安装依赖
pip3 install -r requirements.txt安装uwsgi
linux-ubuntu安装uwsgi
对于 Python3.x 版本
sudo apt-get install python3-dev
sudo apt-get install python3-pip
sudo pip3 install uwsgi创建uwsgi配置文件
在项目目录下创建一个deploy的文件,创建一个uwsgi.ini的文件
cd /var/www/django-blog
makdir deploy
cd deploy
touch uwsgi.ini使用vim打开uwsgi.ini文件vim uwsgi.ini,复制以下代码并加以修改
# 配置域应该是uwsgi,记住这个不能丢,否则会报错
[uwsgi]
# uwsgi监听的socket,可以为socket文件或ip地址+端口号,用nginx的时候就配socket , 直接运行的时候配 http, http-socket = 127.0.0.1:8080
socket = 127.0.0.1:8001
#指定项目的目录,在app加载前切换到当前目录
chdir = /www/wwwroot/django-blog
# Django的wsgi文件,用来加载blog2/wsgi.py这个模块
module = mysite.wsgi
# Python虚拟环境的路径
home = /www/wwwroot/django-blog/venv
# master 启动主进程。
master = true
# 最大数量的工作进程数
processes = 10
# 指定工作进程中的线程数
threads = 2
# 设置socket的权限
chmod-socket = 664
# 退出的时候是否清理环境,自动移除unix Socket 和 Pid 文件
vacuum = true
#日志文件路径
daemonize = /www/wwwroot/django-blog/deploy/uwsgi.log创建项目nginx的配置文件
进入:cd /etc/nginx/sites-enabled
创建:touch blog
用vim编辑打开刚才创建的blog文件,将下边的内容填写进去,具体参考注释说明:
# 配置文件内容:
# 转发给哪个服务器,可以通过upstream配置项让nginx实现负载均衡
upstream django {
server 127.0.0.1:8001; # 这里的端口号必须和uwsgi里的保持一致
server 127.0.1.1:8001;
}
# 设定虚拟主机配置,一个http中可以有多个server。
server {
# 启动的nginx进程监听请求的端口
listen 80;
#定义使用域名访问
server_name 192.168.11.106;
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# location 配置请求静态文件多媒体文件。
location /media {
alias /www/wwwroot/django-blog/media/;
}
# 静态文件访问的url
location /static {
# 指定静态文件存放的目录
alias /www/wwwroot/django-blog/static/;
}
# 将所有非媒体请求转到Django服务器上
location / {
# 包含uwsgi的请求参数,路径为qmblog_uwsgi_params绝对路径
include /www/wwwroot/django-blog/deploy/params;
# 转交请求给uwsgi
# uwsgi_pass 127.0.0.1:8000;
uwsgi_pass django;
#这个django对应开头出的,对于动态请求,转发到本机的端口,也就是uwsgi监听的端口,uwsgi运行的主机和ip,后面我们会在本机的该端口上运行uwsgi进程
# 下面两个配置意思是如果比如通过http://www.xxx.com直接访问的是static下的index.html或者index.htm页面,一般用于将首页静态化
#root /root/src/www/CainiaoBlog/static/;
#index index.html index.htm;
}
# 精确匹配不同于上面/,这里http://www.xxx.com会匹配这个,根据这个配置将请求转发给另外nginx服务器,
# 让另外服务器提供静态首页。同上面的访问index.html在另外同一台服务器上同一配置文件中结合。
# location = / {
# proxy_pass http://ip:port;
# }
}最后,重启nginx,具体请参考nginx常用命令!
启动uwsgi服务
备注:请务必在激活虚拟环境下运行
cd /var/www/django-blog
uwsgi --ini deploy/uwsgi.ini出现[uWSGI] getting INI configuration from deploy/uwsgi.ini类似这行的命令说明启动成功,直接去浏览器访问即可!
相关推荐
- MySQL慢查询优化:从explain到索引,DBA手把手教你提升10倍性能
-
数据库性能是应用系统的生命线,而慢查询就像隐藏在系统中的定时炸弹。某电商平台曾因一条未优化的SQL导致订单系统响应时间从200ms飙升至8秒,最终引发用户投诉和订单流失。今天我们就来系统学习MySQL...
- 一文读懂SQL五大操作类别(DDL/DML/DQL/DCL/TCL)的基础语法
-
在SQL中,DDL、DML、DQL、DCL、TCL是按操作类型划分的五大核心语言类别,缩写及简介如下:DDL(DataDefinitionLanguage,数据定义语言):用于定义和管理数据库结构...
- 闲来无事,学学Mysql增、删,改,查
-
Mysql增、删,改,查1“增”——添加数据1.1为表中所有字段添加数据1.1.1INSERT语句中指定所有字段名语法:INSERTINTO表名(字段名1,字段名2,…)VALUES(值1...
- 数据库:MySQL 高性能优化规范建议
-
数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用MySQL保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)数据库对象的命名要能做到见名识意,...
- 下载工具合集_下载工具手机版
-
迅雷,在国内的下载地位还是很难撼动的,所需要用到的地方还挺多。缺点就是不开会员,软件会限速。EagleGet,全能下载管理器,支持HTTP(S)FTPMMSRTSP协议,也可以使用浏览器扩展检测...
- mediamtx v1.15.2 更新详解:功能优化与问题修复
-
mediamtxv1.15.2已于2025年10月14日发布,本次更新在功能、性能优化以及问题修复方面带来了多项改进,同时也更新了部分依赖库并提升了安全性。以下为本次更新的详细内容:...
- 声学成像仪:泄露监测 “雷达” 方案开启精准防控
-
声学成像仪背景将声像图与阵列上配装的摄像实所拍的视频图像以透明的方式叠合在一起,就形成了可直观分析被测物产生状态。这种利用声学、电子学和信息处理等技术,变换成人眼可见的图像的技术可以帮助人们直观地认识...
- 最稳存储方案:两种方法将摄像头接入威联通Qu405,录像不再丢失
-
今年我家至少被4位邻居敲门,就是为了查监控!!!原因是小区内部监控很早就停止维护了,半夜老有小黄毛掰车门偷东西,还有闲的没事划车的,车主损失不小,我家很早就配备监控了,人来亮灯有一定威慑力,不过监控设...
- 离岗检测算法_离岗检查内容
-
一、研发背景如今社会许多岗位是严禁随意脱离岗位的,如塔台、保安室、监狱狱警监控室等等,因为此类行为可能会引起重大事故,而此类岗位监督管理又有一定困难,因此促生了智能视频识别系统的出现。二、产品概述及工...
- 消防安全通道占用检测报警系统_消防安全通道占用检测报警系统的作用
-
一、产品概述科缔欧消防安全通道占用检测报警系统,是创新行业智能监督管理方式、完善监管部门动态监控及预警预报体系的信息化手段,是实现平台远程监控由“人为监控”向“智能监控”转变的必要手段。产品致力于设...
- 外出住酒店、民宿如何使用手机检测隐藏的监控摄像头
-
最近,一个家庭在他们的民宿收到了一个大惊喜:客厅里有一个伪装成烟雾探测器的隐藏摄像头,监视着他们的一举一动。隐藏摄像头的存在如果您住在酒店或民宿,隐藏摄像头不应再是您的担忧。对于民宿,房东应报告所有可...
- 基于Tilera众核平台的流媒体流量发生系统的设计
-
曾帅,高宗彬,赵国锋(重庆邮电大学通信与信息工程学院,重庆400065)摘要:设计了一种基于Tilera众核平台高强度的流媒体流量发生系统架构,其主要包括:系统界面管理模块、服务承载模块和流媒体...
- 使用ffmpeg将rtsp流转流实现h5端播放
-
1.主要实现rtsp转tcp协议视频流播放ffmpeg下载安装(公认业界视频处理大佬)a、官网地址:www.ffmpeg.org/b、gitHub:github.com/FFmpeg/FFmp…c、推...
- 将摄像头视频流从Rtsp协议转为websocket协议
-
写在前面很多通过摄像头拿到的视频流格式都是Rtsp协议的,比如:海康威视摄像头。在现代的浏览器中,已经不支持直接播放Rtsp视频流,而且,海康威视提供的本身的webSdk3.3.0视频插件有很多...
- 华芸科技推出安全监控中心2.1 Beta测试版
-
全球独家支持hdmi在线实时监看摄像机画面,具单一、循环或同时监看四频道视频影像,可透过华芸专用红外线遥控器、airemote或是键盘鼠标进行操作,提供摄像机频道增购服务,满足用户弹性扩增频道需...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
