推荐
关注
TOP
Message

ubuntu+Django + nginx + uwsgi 部署

ubuntu+Django + nginx + uwsgi 部署

0.前期准备

注意:以下几件事都必须在激活虚拟环境下完成

  1. 运行以下命令生成项目所需的依赖列表,会在项目根目录生成一个requirements.txt的文件

读取requirements.txt文件,并安装项目依赖命令!

 pip3 install -r requirements.txt
  1. 搜集项目的静态文件

在项目的配置文件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

posted @ 2022-10-23 20:38  始識  阅读(121)  评论(0编辑  收藏  举报