如何在Docker-Compose.yml中有条件运行不同的配置



我已经通过LIVE服务器上的certbot配置了SSL。我在docker-compose.ymlnginx部分中有一个卷映射:

volumes:
  ...
  - /etc/letsencrypt:/etc/letsencrypt

这在实时服务器上可以正常工作,但是我在本地计算机上设置了不同的设置,在那里我运行该应用程序并在http://localhost上查看它。我想我不需要本地计算机上的SSL,因此,如果本地运行,我可能只能将其排除。

此外,这种情况使我认为我将不得不有潜在地配置其他一些不同的事物,而在本地与现场直播。

因此,问题是如何正确区分本地和实时设置之间的这些差异,并根据环境自动应用它们(半)?

环境变量通常是创建这样的简单运行时可移植性的好方法,许多工具/应用程序/软件包仅支持运行时配置,而不仅仅是环境变量。不幸的是,nginx不是这些应用程序之一

对于nginx,尝试这样的东西:

environment:
  - NGINX_CONF=localhost.conf

在这里,localhost.conf将是您本地计算机的nginx配置。运行某种类型的entrypoint.sh,并列为nginx_conf指定的config to nginx将其拾取的地方(通常/etc/nginx/conf.d or/etc/etc/etc/nginx/stites-enabled)。

)。 )。 >
ln -s /etc/nginx/conf.d/running.conf /app/nginx-confs/${NGINX_CONF}

这假设您将所有conf都复制到/app/nginx-confs中的容器中,但是它们可以在您喜欢的任何地方生活。localhost.conf将以http://localhost。

为您的网站提供服务

对于您的实时服务器,通过nginx_conf = liveserver.conf。此conf将服务于https://www.liveserver.com或您的主持人。

在这一点上,您可以使用环境变量选择在启动容器时运行的NGINX配置。即使您不想这样做,希望它能使您朝着正确的方向前进,并将环境变量作为一种在运行时进行配置的方式。


在运行时,还有其他更精细的NGINX conf的方法。诸如confd或像胡子模板引擎之类的模板引擎是选项。NGINX中有env指令和set_by_lua的回旋方式,但这感觉就像是我最容易的解决方案,所以我更喜欢其他。

您可以根据您的需求编写Makefile来生成不同的docker-compose.yml文件。

makefile:

# Makefile
-include config.mk
A_CONFIG_VAR ?= default_value
all: docker-compose.yml
docker-compose.yml: docker-compose.yml.in config.mk
        @echo 'Generating docker-compose.yml'
        @sed -e 's|@@A_CONFIG_VAR@@|$(A_CONFIG_VAR)|g' $< > $@

config.mk:将您的配置变量放在此文件中。

# config.mk
A_CONFIG_VAR = "a_value"

docker-compose.yml.in:写一个输入docker-compose.yml文件,如

volumes:
  - /path/to/somewhere:@@A_CONFIG_VAR@@

更改config.mk的内容以满足您的需求。然后运行

make

这应该为您生成docker-compose.yml文件。

最新更新