ubuntu+Django + nginx + uwsgi 部署
ubuntu+Django + nginx + uwsgi 部署
0.前期准备
注意:以下几件事都必须在激活虚拟环境下完成
- 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个
requirements.txt
的文件
读取requirements.txt文件,并安装项目依赖命令!
pip3 install -r requirements.txt
- 搜集项目的静态文件
在项目的配置文件settings.py文件中添加添加静态文件路径
STATIC_ROOT = '/home/zic/singleBlog/static/'
这将会把所有的静态文件拷贝至STATIC_ROOT配置的路径!
1.安装nginx
sudo apt-get install nginx
并且重启
使用本机地址是否能访问成功
2.虚拟环境
一、进入Nginx用来默认放置网站的文件夹
cd /home/zic
二、克隆项目到该文件夹
git clone git@gitee.com:but-chen-chen/single-blog.git
三、创建虚拟环境
python3 -m venv venv
四、激活虚拟环境
linux: . venv/bin/activate windows: venv\Scripts\activate
五、安装依赖
pip3 install -r requirements.txt -i [https://pypi.tuna.tsinghua.edu.cn/simple/](https://pypi.tuna.tsinghua.edu.cn/simple/)
3.安装uwsgi
linux-ubuntu安装uwsgi
对于 Python3.x 版本
sudo apt-get install python3-dev sudo apt-get install python3-pip sudo pip3 install uwsgi
4.创建uwsgi配置文件
在项目目录下创建一个deploy的文件,创建一个uwsgi.ini的文件
cd /var/www/django-blog mkdir 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 = /home/zic/Desktop/singleBlog # Django的wsgi文件,用来加载blog2/wsgi.py这个模块 module = singleBlog.wsgi # Python虚拟环境的路径 home = /home/zic/Desktop/singleBlog/venv # master 启动主进程。 master = true # 最大数量的工作进程数 processes = 10 # 指定工作进程中的线程数 threads = 2 # 设置socket的权限 chmod-socket = 664 # 退出的时候是否清理环境,自动移除unix Socket 和 Pid 文件 vacuum = true #日志文件路径 daemonize = /home/zic/Desktop/singleBlog/deploy/uwsgi.log # pid文件 pidfile = /home/zic/Desktop/singleBlog/deploy/uwsgi.pid
5.创建项目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.153.146; charset utf-8; # max upload size client_max_body_size 75M; # adjust to taste # location 配置请求静态文件多媒体文件。 location /media { alias /home/zic/Desktop/singleBlog/media/; } # 静态文件访问的url location /static { # 指定静态文件存放的目录 alias /home/zic/Desktop/singleBlog/static/; } # 将所有非媒体请求转到Django服务器上 location / { # 包含uwsgi的请求参数,路径为qmblog_uwsgi_params绝对路径 include /home/zic/Desktop/singleBlog/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常用命令!
6.启动uwsgi服务
备注:请务必在激活虚拟环境下运行
cd /var/www/django-blog uwsgi --ini deploy/uwsgi.ini
出现[uWSGI] getting INI configuration from deploy/uwsgi.ini
类似这行的命令说明启动成功,直接去浏览器访问即可!
7.启动停止重启
uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。
uWSGI 启动:uwsgi --ini xxx.ini
uwsgi 重启:uwsgi --reload xxx.pid
uwsgi 停止:uwsgi --stop xxx.pid
如果不行,执行
sudo pkill -f uwsgi -9
作者博客:https://www.cnblogs.com/zichliang
本文地址:https://www.cnblogs.com/zichliang/p/16819465.html
本文原创授权为:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix