一, 背景
前台Vue项目构建部署到nginx服务器上,接下来部署后台,不再使用python managy.py runserver 0.0.0.0:10082测试方式,而是使用 uwsgi 启动 django
二, 部署流程 [在虚拟环境中]
0. . /root/venv/bin/activate
1. settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 't3static'),
)
2. python manage.py collectstatic
3. pip3.6 install uwsgi
4. 与manage.py 同级创建 uwsgi.ini 文件
[uwsgi]
# 用户自定义变量,方便后面引用
project = orange
username = root
base = /opt/gits
# 表示需要操作的目录,也就是项目的目录
chdir = %(base)/%(project)
wsgi-file = webhook/wsgi.py
# python 虚拟环境
home = /root/venv/
module = %(project).wsgi:application
master = true
processes = 20
uid = %(username)
gid = %(username)
socket = /var/run/%(project).sock
pidfile = /var/run/%(project).pid
chown-socket = %(username):%(username)
chmod-socket = 666
vacuum = true
# 记录日志,不要忘记创建目录及权限,注意这会导致进程为后台进程,即不可使用supervisor管理
daemonize = %(base)/log/%(project).log
#当python源文件变化时会自动加载,一般开发环境使用
py-autoreload =1
harakiri = 600
5. 启动 uwsgi
uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
[uwsgi-static] added mapping for /static => /opt/git/orange/static
6. 配置nginx , 使用nginx做uwsgi代理
/usr/local/nginx/conf/nginx.conf
include /usr/local/nginx/conf/conf.d/*.cnf;
/usr/local/nginx/conf/conf.d/uwsgi_orange.cnf
server {
listen 10082 default_server;
server_name _;
client_max_body_size 50m;
client_header_buffer_size 10m;
large_client_header_buffers 4 10m;
location / {
root /opt/gits/orange;
#index index.html;
uwsgi_send_timeout 1800s; # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
uwsgi_connect_timeout 1800s; # 指定连接到后端uWSGI的超时时间。
uwsgi_read_timeout 1800s; # 指定接收uWSGI应答的超时时间,完成握手后接收uWSGI应答的超时时间。
#uwsgi_pass 127.0.0.1:8000;
uwsgi_pass unix:///var/run/orange.sock;
include /usr/local/nginx/conf/uwsgi_params;
}
location /static {
alias /opt/gits/orange/static;
}
#通过这个参数,定义错误页面的文件 ,当状态码是 404 400 401 时,返回40x.html页面
error_page 404 401 400 403 /40x.html;
}
/usr/local/nginx/sbin/nginx -s reload
三,测试验证后台应用
ps aux | grep uwsgi # 有进程存在
打开浏览器 http://192.168.89.133:10082 网页存在,登录没有问题,则成功
四,封装启动脚本
/usr/local/bin/restart_orange.sh
#!/bin/bash
prj_base='/opt/gits/orange/'
PY_VENV=/root/venv
uwsgi_ini=/opt/gits/orange/uwsgi.ini
#判断用户是否为root
if [ `whoami` != "root" ]; then
echo "only root user can run !!!"
echo "运行uwsgi的用户必须为root"
exit 1
fi
ps aux |egrep ${uwsgi_ini} |grep -v 'grep'
if [ $? -eq 0 ];then
ps aux |egrep ${uwsgi_ini} |grep -v 'grep' |awk '{print $2}' |xargs kill -9
if [ $? -eq 0 ];then
echo "杀死uwsgi成功"
else
echo "杀死uwsgi失败"
exit 6
fi
else
echo "没有uwsgi在运行"
fi
source ${PY_VENV}/bin/activate
cd ${prj_base}
chmod 777 ${prj_base}manage.py
#${prj_base}manage.py collectstatic &>/dev/null
#if [ $? -eq 0 ];then
# echo "静态文件收集成功"
#else
# echo "静态文件收集失败,请手工收集"
#fi
uwsgi --uid root --gid root --ini ${uwsgi_ini}
if [ $? -eq 0 ];then
echo "uwsgi启动成功"
fi
chmod +x restart_orange.sh
restart_orange.sh
杀死uwsgi成功
[uWSGI] getting INI configuration from /opt/gits/orange/uwsgi.ini
uwsgi启动成功
ps aux | grep /opt/gits/orange/uwsgi.ini
root 94529 0.7 1.0 357048 41548 ? S 20:41 0:00 uwsgi --uid root --gid root --ini /opt/gits/orange/uwsgi.ini
root 94534 0.1 0.9 357304 34996 ? Sl 20:41 0:00 uwsgi --uid root --gid root --ini /opt/gits/orange/uwsgi.ini
root 94535 0.1 0.9 357304 34988 ? Sl 20:41 0:00 uwsgi --uid root --gid root --ini /opt/gits/orange/uwsgi.ini
... ...
五,Vue前端项目使用nginx代理的uwsgi提供的Django后端服务
前端Vue因为要访问后端nginx代理的uwsgi接口,所以需要修改 nginx 配置,打通前后端接口连通性。
vim /usr/local/nginx/conf/conf.d/orange_v1.cnf
server {
listen 80;
server_name www.orange.com;
location / {
try_files $uri $uri/ /index.html;
root /usr/local/nginx/html/orange_v1;
index index.html index.htm;
}
location /api {
proxy_pass http://192.168.89.133:10082;
}
}
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
/usr/local/nginx/sbin/nginx -s reload
六,全局性测试
因为已经做了前端域名解析服务,所以,浏览器打开直接访问服务对应的域名即可,http://www.orange.com
输入错误用户名和密码,有错误提示,输入正确的,登录后没有问题,则验证通过。
云计算之VUE-Django开发
最新推荐文章于 2025-04-07 21:56:21 发布
567

被折叠的 条评论
为什么被折叠?



