gpt4 book ai didi

docker - 如何有条件地在 docker-compose.yml 中运行不同的配置?

转载 作者:行者123 更新时间:2023-12-02 20:11:46 25 4
gpt4 key购买 nike

我已通过 certbot 配置 SSL在实时服务器上。我在 nginx 中有一个卷映射。 docker-compose.yml的部分:

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

这在实时服务器上工作得很好,但我在本地机器上有不同的设置,我运行应用程序并在 http://localhost 上查看它.我想我的本地机器上不需要 SSL,所以如果它在本地运行,我可能只能排除这部分设置。

此外,这种情况让我认为我将不得不在本地与现场不同地配置其他一些东西。

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

最佳答案

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

对于 nginx,请尝试以下操作:

environment:
- NGINX_CONF=localhost.conf

在这里,localhost.conf 将是您本地机器的 nginx 配置。运行某种 entrypoint.sh,并将 NGINX_CONF 指定的配置符号链接(symbolic link)到 nginx 将选择它的任何位置(通常是/etc/nginx/conf.d 或/etc/nginx/sites-enabled)。
ln -s /etc/nginx/conf.d/running.conf /app/nginx-confs/${NGINX_CONF}

这假设您已将所有配置文件复制到/app/nginx-confs 中的容器中,但它们可以放在您喜欢的任何地方。 localhost.conf 将为您的站点提供 http://localhost .

对于您的实时服务器,请传递 NGINX_CONF=liveserver.conf。这个 conf 将服务 https://www.liveserver.com或您主持的任何内容。

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

还有其他更细粒度的方法可以在运行时管理 nginx 配置文件。像 confd或模板引擎,如 mustache templating engine是选项。在 nginx 中有迂回方式与 env指令和 set_by_lua ,但这对我来说感觉是最老套的解决方案,所以我更喜欢其他解决方案。

关于docker - 如何有条件地在 docker-compose.yml 中运行不同的配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46327704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com