ubuntu+Django + nginx + uwsgi 部署

2022-12-21,,,,

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

ubuntu+Django + nginx + uwsgi 部署的相关教程结束。

《ubuntu+Django + nginx + uwsgi 部署.doc》

下载本文的Word格式文档,以方便收藏与打印。