作者:HelloGitHub-追梦人物
在教程中,我们通过手工方式将代码部署到了服务器。整个过程涉及到十几条命令,输了N个字符。一旦我们本地的代码有更新,整个过程又得重复来一遍,这将变得非常繁琐。
使用Fabric可以在服务器中自动执行命令。因为整个代码部署过程都是相同的,只要我们用Fabric写好部署脚本,以后就可以通过运行脚本自动完成部署了。
首先在本地安装Fabric:
$pipenvinstallfabric--dev因为Fabric只需在本地使用,因此使用--dev选项,让Pipenv将Fabric依赖写到dev-packages配置下,线上环境就不会安装Fabric。
部署过程回顾
在写Fabric脚本之前,先来回顾一下当我们在本地开发环境下更新了代码后,在服务器上的整个部署过程。
远程连接服务器。进入项目根目录,从远程仓库拉取最新的代码。如果项目引入了新的依赖,需要执行pipenvinstall--deploy--ignore-pipfile安装最新依赖。如果修改或新增了项目静态文件,需要执行pipenvrunpythonmanage.pycollectstatic收集静态文件。如果数据库发生了变化,需要执行pipenvrunpythonmanage.pymigrate迁移数据库。重启Nginx和Gunicorn使改动生效。整个过程就是这样,把每一步操作翻译成Fabric对应的脚本代码,这样一个自动化部署脚本就完成了。
完善项目配置
分离settings文件
为了安全,线上环境我们将debug改为了False,但开发环境要改为True,改来改去将很麻烦。此外,django的SECRET_KEY是很私密的配置,django的很多安全机制都依赖它,如果不慎泄露,网站将面临巨大安全风险,像我们现在这样直接写在配置文件中,万一不小心公开了源代码,SECRET_KEY就会直接泄露,好的实践是将这个值写入环境变量,通过从环境变量取这个值。
解决以上问题的一个方案就是拆分settings.py文件,不同环境对应不同的settings文件,django在启动时会从环境变量中读取DJANGO_SETTINGS_MODULE的值,以这个值指定的文件作为应用的最终配置。
我们来把settings.py拆分,首先在blogproject目录下新建一个Python包,名为settings,然后创建一个