基础概念
项目部署是指在软件发布完毕后,将开发机器上运行的软件实时安装到服务器上进行长期运行
1,在安装机器上安装和配置同版本的环境[py,数据库等]
2,django项目迁移
sudo scp /home/tarena/django/mysite1
root@88.77.66.55:/home/root/xxx
请输入root密码:
3,用uWSGI替代python3 manage.py runserver方法启动服务器
4,配置nginx反向代理服务器
5,用nginx配置静态文件路径,解决静态路径问题
WSGI定义
WSGI(Web Server Gateway Interface)Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛使用
使用python manage.py runserver 通常只在开发和测试环境中使用。
当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用WSGI
image.png
uWSGI定义
uWSGI是WSGI的一种,它实现了HTTP协议WSGI协议以及uwsgi协议
uWSGI功能完善,支持协议众多,在python web圈热度极高
uWSGI主要以学习配置为主
uWSGI安装
Ubuntu执行sudo pip3 install uwsgi==2.0.18 -i
我在macos是直接执行pip install uwsgi安装成功的
检查是否安装成功
- sudo pip3 freeze|grap -i 'uwsgi'
- 如果成功安装,则会输出 uWSGI==2.0.18
配置uWSGI
添加配置文件 项目同名文件夹/uwsgi.ini
如:mysite1/mysite1/uwsgi.ini
文件以[uwsgi]开头,有如下配置项:
- 套接字方式的IP地址:端口号【此模式需要有nginx】
socket=127.0.0.1:8000 - Http通信方式的IP地址:端口号
http=127.0.0.1:8000 - 项目当前工作目录
chdir=/home/tarena/.../my_project - 项目中wsgi.py文件的目录,相对于当前工作目录
wsgi-file=my_project/wsgi.py - 进程个数
process=4 - 每个进程的线程个数
threads=2 - 服务的pid记录文件
pidfile=uwsgi.pid - 服务的日志文件位置
daemonize=uwsgi.log - 开启主进程管理模式
master = true
[uwsgi]
http=127.0.0.1:8000
chdir=/Users/liujia/program/django_code/tedu_note
wsgi-file=tedu_note/wsgi.py
process=4
threads=2
pidfile=uwsgi.pid
daemonize=uwsgi.log
master=true
特殊说明:Django的settings.py需要做如下配置
1,修改settings.py将DEBUG=True改为DEBUG=False
2,修改settings.py将ALLOWED_HOSTS=[]改为ALLOWED_HOSTS=['网站域名']或者['服务监听的ip地址']
uWSGI的运行管理
启动uwsgi
cd 到uWSGI配置文件所在目录
uwsgi --ini uwsgi.ini
liujiadeMacBook-Pro:tedu_note liujia$ uwsgi --ini uwsgi.ini
[uWSGI] getting INI configuration from uwsgi.ini
liujiadeMacBook-Pro:tedu_note liujia$ ps aux|grep 'uwsgi'
liujia 7583 0.0 0.0 4267768 900 s000 S+ 10:05下午 0:00.00 grep uwsgi
liujia 7578 0.0 0.0 4377652 648 ?? S 10:05下午 0:00.00 uwsgi --ini uwsgi.ini
liujia 7577 0.0 0.0 4378176 2356 ?? S 10:05下午 0:00.00 uwsgi --ini uwsgi.ini
liujia 7576 0.0 0.2 4377652 33744 ?? S 10:05下午 0:00.47 uwsgi --ini uwsgi.ini
liujiadeMacBook-Pro:tedu_note liujia$
停止uwsgi
cd 到uWSGI配置文件所在目录
uwsgi --stop uwsgi.pid
liujiadeMacBook-Pro:tedu_note liujia$ uwsgi --stop uwsgi.pid
liujiadeMacBook-Pro:tedu_note liujia$ ps aux|grep 'uwsgi'
liujia 7598 0.0 0.0 4285176 924 s000 S+ 10:07下午 0:00.00 grep uwsgi
liujiadeMacBook-Pro:tedu_note liujia$
注意点
1,无论启动还是关闭,都需要执行ps aux|grep 'uwsgi' 确认是否符合预期
2,启动成功后,进程在后台执行,所有日志均输出在配置文件所在目录的uwsgi.log中
3,Django中代码有任何修改,需要重新启动uwsgi
uWSGI测试
在浏览器输入http://127.0.0.1:8000/url 进行测试
注意:
此时端口8000被uWSGI进程监听,并非runserver
如果当前有预期返回,则uWSGI启动成功
uWSGI常见问题汇总
1,启动失败:端口被占用
原因:有其他进程占用uWSGI启动的端口;
解决方案:可执行 sudo lsof -i:端口号 查询出具体进程;杀掉进程后,重新启动uWSGI即可
2,停止失败:stop无法关闭uWSGI
原因:重复启动uWSGI,导致pid文件中的进程号失准
解决方案:ps出uWSGI进程,手动kill掉
网友评论