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