CentOS下 Django部署 uWSGI+Django(一)
由于新冠疫情的缘故,公司要求员工停薪休假,赋闲在家的时候还是决定做点正事,学学习。
本人Linux入门水平,Python入门水平,所以在网上找的那些python部署的帖子,看的是云里雾里的,也没有达到预期的运行效果。好不容易摸索了一个简单易懂的部署方式,记录一下为了加深理解。
CentOS Linux release 7.6.1810
Python 2.7.5 # 系统自带的python版本
pip 20.0.2 # 已升过级
查看系统版本
# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
# rpm -q centos-release
centos-release-7-6.1810.2.el7.centos.x86_64
1. 安装基础开发包
yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel pcre-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel
2.安装uwsgi
pip install uwsgi
uwsgi --version # 查看 uwsgi 版本
在安装过程中可能会遇到上面的错误,执行“yum install python-devel.x86_64”可以应对。
安装时报错ModuleNotFoundError: No module named '_ctypes'的解决办法
yum install libffi-devel
然后从config开始重新安装
3. 安装Django
pip install django
pip list # 查看已经安装的模块
4. 上传项目
如果本地有自己的Django项目可以上传。我没有项目,只是在服务器上新建了一个,为了学习如何部署和运行。
如果项目有数据库,则需要进行同步操作。在项目根目录下执行如下命令。
# python manage.py makemigration
# python manage.py migrate
5. 命令行运行django项目
uwsgi --http=ip:port --file=wsgifile_path # 不配置静态文件也可运行,但是项目加载不到静态文件
6. 收集静态文件
# vim setting.py
找到: STATIC_URL = '/static/'
在下面添加: STATIC_ROOT = '/howm/damu/work/shopping/static_file/'
执行:python manage.py collectstatic
最后: uwsgi --http=192.168.37.128:8000 --file=shopping/wsgi.py --static-map=/static=static_file
# 命令 & # 则命令在后台运行
如果是阿里云服务器,此处的ip需要填写内网的ip地址。
7. 配置所有需要的选项,通过配置文件启动uwsgi服务器
在shopping项目根目录下创建wsgi.ini
[uwsgi] http = 192.168.37.128:8000 #web服务IP端口,uWSGI做web服务器时用 chdir = /home/damu/work/shopping/ # 项目根目录 wsgi-file = shopping/wsgi.py #指定wsgi模块 rocesses = 4 # 启动的进程数 threads = 2 # 每个进程的线程 master = true # 表示主进程模式进行 pidfile = uwsgi.pid # 主管理进程文件放置的位置 daemonize = uwsgi.log # 日志文件 static-map = /static=static_file # 静态文件
以配置文件方式启动服务
# uwsgi --ini uwsgi.ini
进程文件,用于服务重启、停止。如:
重启指令:uwsgi --restart [pidfile路径]
停止指令:uwsgi --stop [pidfile路径]
或者:
pkill -f uwsgi -9
killall -s INT /uws/bin/uwsgi
killall -9 uwsgi # 删除uwsgi进程,由于释放端口有延迟,要等几秒。
8. 其他
ps -ef | grep uwsgi # 查看进程
一共六个进程(1个主进程,4个创建进程,1个守护进程)。