Это хороший случай для использования сценарий postinstall
для вашего обслуживания. dotCloud предоставляет build hooks для запуска на каждом этапе цикла push и deploy, а крюк postinstall
работает последним, где он имеет доступ ко всем переменным среды. Вы можете прочитать переменные от ~/environment.json
или от фактической среды (файл немного более надежный, поскольку то, что попадает в окружающую среду, может варьироваться в зависимости от типа сервиса по историческим причинам).
Вот пример dotcloud.yml
:
www:
approot: www
type: static
environment:
LIMITRATEVAR: 2k
и пример nginx.conf
(найденный в WWW/nginx.conf):
# limitratevar should get set in dotcloud.yml's environment section
# or via `dotcloud env set limitratevar` if you want to set it for all services.
# And then use a postinstall script to update this nginx.conf with sed
limit_rate LIMITRATEVAR;
и, наконец, пример postinstall
(найденный в WWW/постустановочных), где считывается значение $ LIMITRATEVAR вне среды и обновляется nginx.conf с помощью sed
:
#!/usr/bin/env bash
# files named "postinstall" will get run automatically when the code is deployed
# to the container where your service runs.
# See:
# http://docs.dotcloud.com/guides/build-file/#prebuild-postbuild-postinstall-build-hooks
# http://docs.dotcloud.com/guides/hooks/#post-install
# Make sure we error-out if there are any problems
set -e
echo "Updating the limit_rate to $LIMITRATEVAR"
sed -i.original "s/LIMITRATEVAR/$LIMITRATEVAR/g" ~/current/nginx.conf
echo "nginx.conf updated. Original stored in nginx.conf.original"
Отключить ли dotCloud доступ к команде 'env' conf? http://wiki.nginx.org/CoreModule#env –