我使用nginx作为反向代理来服务Express.js后端和Vue.js前端。整个应用程序运行在两个Docker Composose映像中,一个用于开发,一个用于生产。我希望能够使用HTTPS本地测试生产映像(特别是因为Vue的PWA框架依赖HTTPS来正确注册服务工作者)。
问题是,要使用certbot配置let's encrypt证书,我需要通过DNS在与我的域关联的服务器上运行。设置CI/CD工作流的正确方法是什么?我可以在本地测试HTTPS并将其推送到生产服务器?我是否必须从不同的CA购买证书并手动更新?
我尝试使用certbot,但它不会工作,因为我不在服务器上,是与我的通过DNS关联。
2条答案
按热度按时间piok6c0g1#
如果服务器是独立的--你不想在开发机器上暴露你的生产系统私钥--你想要不同的证书,问题就变成了“你如何在你的开发/测试基础设施上使用TLS”。这是一个广泛讨论的问题。例如:
https://web.dev/how-to-use-local-https/
https://security.stackexchange.com/questions/121163/how-do-i-run-proper-https-on-an-internal-network
如果您的测试基础设施可以从互联网访问验证方法,您可以设置类似于生产机器的certbot,但您必须为此获取域/子域。
由于reverse-proxys配置和证书可能不是软件的一部分,因此您可以将其视为测试的基础设施,并将其保留在测试之间。独立于应用程序处理基础设施问题可以提高模块性,从而提高可维护性。
vbopmzt12#
certbot有一种验证方式DNS和HTTP
DNS方法验证DNS中的记录,同时HTTP检查来自您的Endpoint的200响应。
在CI/CD中,您可以使用HTTP方法来检查域状态
参考repo了解更多信息:Auth script
DNS verification参考要点
另一个选项手动一个
在CI/CD期间或只是想在docker中设置cert,我建议先下载/创建一个cert,然后使用多次SSL for free
您可以先在本地创建cert,然后在CI/CD过程中注入cert,并将其存储在变量中,如果您使用的是云,则可以从Bucket下载cert,然后进行多次复用。