最少的停机时间部署和pipenv

时间:2017-11-15 16:21:24

标签: python django pipenv

我正在考虑从我的网络项目(主要是Django)切换到pip / virtualenv到pipenv。他们使用“最小停机时间部署”流程,其灵感来自https://kuttler.eu/en/post/django-deployments-without-downtime/

中描述的流程

TL; DR

是否有pipenv命令从头开始创建新环境(新解释器,没有包),然后安装依赖项,然后将其设置为当前目录的默认值?

我们举一个简单的例子。我在我的debian服务器上安装了一个项目,具有以下结构:

/srv
└── project
    ├── .git/
    ├── etc/
    ├── sources/
    ├── venv_20170922/
    └── venv -> venv_20170922

目前,当我需要部署它时,我希望尽可能限制网站离线的持续时间。请参阅我通常遵循的步骤的简化视图(缩进仅用于帮助理解过程):

cd /srv/project
git pull
virtualenv -p python3 venv_20171015
source venv_20171015/bin/activate
  pip install -r sources/requirements.txt
  pushd sources
    python manage.py migrate
    python manage.py collectstatic
  popd
deactivate

supervisorctl stop myproject
# Now the website is offline
ln -f -s venv_20171015 venv
supervisorctl start myproject
# Now the website is back online

通过这个过程,网站只停留片刻,只需要停止,更新符号链接和重新开始所需的时间。 Supervisor脚本基于“venv”路径从环境中运行gunicorn进程。

但是如何用pipenv重现类似的行为呢?据我所知,环境是在项目文件夹中第一次使用pipenv命令时动态创建的。在这种情况下,是否有一些命令可以很好地控制这种行为?

1 个答案:

答案 0 :(得分:0)

不要在实时服务器上使用pipenv,而应在开发计算机上使用它,并使用以下命令创建requirements.txt文件:

$ pipenv lock -r > requirements.txt

在部署过程中,请使用pip安装软件包(根本不需要安装或使用pipenv):

$ pip install -r requirements.txt