【问题标题】:Minimal downtime deployment and pipenv最少的停机时间部署和 pipenv
【发布时间】:2017-11-15 16:21:24
【问题描述】:

我目前正在考虑将我的网络项目(主要是 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

在此过程中,网站仅会在几分钟内离线,仅需要停止、更新符号链接和重新启动所需的时间。主管脚本从基于“venv”路径的环境中运行一个 gunicorn 进程。

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

【问题讨论】:

  • 我很困惑。您说您使用的是零停机时间方法,而实际上您并没有使用...
  • 你是对的。我实际上不使用零 DT 流程,而是使用最小 DT 流程,并且我粘贴了错误的链接。刚刚编辑了问题。这里的想法是,每次我想部署时,我都需要从头开始构建一个全新的 venv,然后在最后执行“切换 venv”操作,这样应用程序无响应的时间就会大大减少

标签: python django pipenv


【解决方案1】:

不要在实时服务器上使用 pipenv,而是仅在您的开发机器上使用它并使用以下命令创建一个 requirements.txt 文件:

$ pipenv lock -r > requirements.txt

在部署期间使用 pip 安装包(根本不需要安装或使用 pipenv):

$ pip install -r requirements.txt

【讨论】:

  • 你说得对,这或多或少是我几个月前采用的解决方案(这个问题现在已经很老了;))。但我认为你给出了错误的命令。是pipenv lock 而不是pip 对吧?
猜你喜欢
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多