最少的停机时间部署和 pipenv
Minimal downtime deployment and pipenv
我目前正在考虑从 pip / virtualenv 切换到 pipenv for my web projects (mainly Django). They use a "minimal downtime deployment" process, inspired by the one described at 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
在这个过程中,网站离线只有片刻,只是停止、更新符号 link 和重新启动所需的时间。 Supervisor 脚本 运行 来自基于 "venv" 路径的环境中的 gunicorn 进程。
但是我怎样才能用 pipenv 重现类似的行为?据我所知,第一次在项目文件夹中使用 pipenv
命令时会即时创建环境。在这种情况下,是否有一些命令可以很好地控制这种行为?
不要在实时服务器上使用 pipenv,而是仅在您的开发机器上使用它并使用以下命令创建一个 requirements.txt
文件:
$ pipenv lock -r > requirements.txt
在部署期间使用 pip 安装包(根本不需要安装或使用 pipenv):
$ pip install -r requirements.txt
我目前正在考虑从 pip / virtualenv 切换到 pipenv for my web projects (mainly Django). They use a "minimal downtime deployment" process, inspired by the one described at 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
在这个过程中,网站离线只有片刻,只是停止、更新符号 link 和重新启动所需的时间。 Supervisor 脚本 运行 来自基于 "venv" 路径的环境中的 gunicorn 进程。
但是我怎样才能用 pipenv 重现类似的行为?据我所知,第一次在项目文件夹中使用 pipenv
命令时会即时创建环境。在这种情况下,是否有一些命令可以很好地控制这种行为?
不要在实时服务器上使用 pipenv,而是仅在您的开发机器上使用它并使用以下命令创建一个 requirements.txt
文件:
$ pipenv lock -r > requirements.txt
在部署期间使用 pip 安装包(根本不需要安装或使用 pipenv):
$ pip install -r requirements.txt