部署业务流程
零、已经具备的条件
django项目在建立之初,就预留了uwsgi的接口。我在学习了整个项目部署流程之后,感觉到这应该算是最简单的部署方式了。
在此我要特别感谢我的好友@小飞侠,没有他无数个日夜的教导和帮助,我一定没法那么快独立完成一个项目的部署。
前置条件
- 选择一个服务器供应商并建立一个服务器实例,本次部署中我使用的是亚马逊EC2服务器,这是一个免费使用一整年的服务器;
AWS 云服务-最专业的大数据和云计算服务以及云解决方案提供商
1.1.值得一提的是,亚马逊EC2因为是境外网站,比较卡,因此有条件的朋友建议使用腾讯云、阿里云等国内云服务 - 本次我们计划使用uwsgi+nginx方案来部署django项目,这也是当下最可靠的项目部署方案;
- 使用Xshell工具连接服务器,从这里开始整个部署流程;
- 购买域名(可选)
一、安装环境
- 进入超级管理员su(sudo passwd 设密码)、升级pip3到最新;
- 安装uwsgi、nginx、libmysqld-dev、mysql-server;
- 待部署业务和配置文件包上传(/home/ubuntu);(在Xshell上新建文件传输Ctrl+Alt+F,配置文件包括uwsgi文件、nginx文件和项目数据文件)
- test.py测试uwsgi;
关于如何测试的教程请参见:
uWSGI+django+nginx的工作原理流程与部署历程
uwsgi --http :8000 --wsgi-file test.py
- 调整服务器开放端口TCP:8000、安全组:0.0.0.0/24 ALL
- 安装项目环境:
这个项目环境是你在开发过程中的项目环境,可用
pip freeze > requirements.txt
将上述文件移动到服务器,使用如下命令即可:
pip3 install -r requirement.txt
二、实装项目
- 移动项目位置到特定目录(/opt/);(最好不要把所有项目都放在home,会比较混乱)
- 在业务文件下一级建立配置文件夹script、复制uwsgi.ini并修改路径、按照示例修改setting.py(如果文件应用太多、整体替换容易出错)
.../django-project/django-project/settings.py
-
DEBUG=False (从Debug状态退出)
-
ALLOWED_HOSTS = ['*'] (任意主机均可访问项目)
-
STATIC_URL = '/static/' (静态文件地址)
-
STATIC_ROOT= '/opt/MyProject/store/static/' (静态文件根目录)
- 建立数据库:
进入mysql命令行下,数据库名称最好与开发时相同
create myproject
- 收集静态文件
python3 manage.py collectstatic
(这是一个django命令) - 实装项目
python3 manage.py migrate
(这是一个django命令) - 导入数据库
source /opt/peizhi/myproject.sql;
(这是一个mysql命令)
如果项目在开发过程中有数据要一同迁移,则需提前将数据导出,上传到服务器再按照上述命令导入;
三、上线
- 复制配置文件nginx,
/etc/nginx/sites-avable/novel.conf
并作出修改
listen 80;
server_name localhost;
charset utf-8;
access_log /wwwroot/destiny/nginx_access.log;
error_log /wwwroot/destiny/nginx_error.log;
client_max_body_size 75M;
location /static {
alias /wwwroot/destiny/destiny/static;
}
location / {
include /etc/nginx/conf/uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
}
- 修改novel.conf路径、IP等信息;
- 进入/sites-enable文件夹设置快捷方式
ln -s /etc/nginx/sites-avable/novel.conf ./novel.conf
- 启动uwsgi、启动nginx(各种命令请见要点)
如果不出意外的话,输入启动命令之后就应该部署成功了
配置文件要点
- uwsgi.ini配置文件在django项目总文件夹下面(注意路径);
- novel.conf配置文件在/etc/nginx/sites-available/下;
- novel.conf配置文件在/etc/nginx/sites-enabled/下进行关联:ln -s /etc/nginx/sites-available/novel.conf ./novel.conf
- setting.py在django文件下,接命令python3 manage.py collectstatic
- mysql基础文件,libmysqld-dev需导入
- 去隔壁服务器拿东西:ssh ubuntu@(目标内网IP);scp novelsite.zip ubuntu@10.105.119.166(本机内网IP):/home/ubuntu/
启动命令
- uwsgi --ini uwsgi.ini # 启动uwsgi
- uwsgi --stop uwsgi.pid # 关闭uwsgi
- uwsgi.reload() # 重启uwsgi
- service nginx start/status/stop
- nginx -t # 检测配置文件是否错误
- nginx -s reload # 热重载配置文件
- tail -fn300 uwsgi.log # 滚动播放日志文件300行
- netstat -tulnp # 查看端口及进程号
- iftop # 查看流量监控,需安装
- ps -ef|grep nginx # 查看相关功能进程
- kill -9 1234 # 强制停止编号为1234的进程
ScrapyD
网友评论