在nginx.conf中使用dotcloud env变量

时间:2013-10-13 19:45:07

标签: dotcloud

dotcloud提供了许多有用的信息作为环境变量,但我的nginx.conf无法访问环境变量。这有什么好办法?

以下是该方案:我想将某些网址从我的www静态服务重定向到我的rest服务,因此我目前正在将目标网址硬编码为nginx.conf。我宁愿使用DOTCLOUD_REST_HTTP_HOST变量,因为这样可以让我的服务轻松迁移。

2 个答案:

答案 0 :(得分:4)

这是使用postinstall脚本进行服务的好例子。 dotCloud提供build hooks在推送​​和部署周期的每个阶段运行,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 / postinstall中找到)从环境中读取$ LIMITRATEVAR的值并使用sed更新nginx.conf:

#!/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"

答案 1 :(得分:2)

解决方案here适用于某些人,这并不是说在DotCloud上实现它可能会有一些问题,但如果你没有尝试过它,那就值得一试。

在顶级配置级别:

 env MYVAR;

在http级别:

 perl_set $myvar 'sub { return $ENV{"MYVAR"}; }';

然后,例如,在服务器级别:

 root $myvar;