如何使用 letsencrypt 运行 docker 通过安全服务器应用程序?

How to run docker application over a secure server using letsencrypt?

需要通过安全网络启动 Horizon 服务器。 使用这个 github 回购 https://github.com/stellar/docker-stellar-core-horizon

按照我试过的 README 文档,

    docker run --rm -it -p "8000:8000" --name stellar stellar/quickstart --testnet

这会使用 http 服务器通过端口 8000 启动我的 horizon 应用程序。我需要 运行 通过 https 服务器。为此,我尝试了一些东西,

    docker run --rm -it -p "8000:443" --name stellar stellar/quickstart --testnet 

    docker run --rm -it -p "8000:8000" --name stellar stellar/quickstart --testnet docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem 

还有一些使用这些 ssl 密钥。 尝试使用 nginx 将 https 调用从服务器重定向到 http 调用,但是失败了。

请提供一种通过安全服务器启动 docker 容器的方法。

您需要使用 nginx 在 docker 图像中进行代理配置。

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

由于 docker 文件在 dockerhub 中可用,您可以修改它以使用 https 并公开端口 443。 然后 运行 docker 为

docker 运行 --rm -it -p "8000:443" --name stellar stellar/quickstart --testnet

https://hub.docker.com/r/stellar/quickstart/~/dockerfile/

您想部署 stellar 核心的 https 版本,或者在这种情况下部署任何 docker 化的应用程序,即网络服务器,您可以使用官方的 let's encrypt image。

这是 docker-compose.yml 文件,您可以在其中部署任何 docker 化的 Web 服务器 docker compose 来自动化您的证书流程。

nginx: build: nginx-image links: - letsencrypt - app environment: - MY_DOMAIN_NAME=DOMAIN_NAME mem_limit: 2g cpu_shares: 256 # restart: always ports: - "80:80" - "443:443" volumes_from: - letsencrypt letsencrypt: image: quay.io/letsencrypt/letsencrypt:latest command: bash -c "sleep 6 && certbot certonly --standalone -d DOMAIN_NAME --text --agree-tos --email your_email --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --renew-by-default --standalone-supported-challenges http-01" entrypoint: "" volumes: - /etc/letsencrypt - /var/lib/letsencrypt ports: - "80" - "443" environment: - TERM=xterm app: build: app-image ports: - "80"

将上述文件中的域名替换为您的服务器 CNAME 和电子邮件 ID。您需要在其中分配图像名称的应用程序部分(docker 在您的案例中使用了 stellar 图像的网络服务器)。然后,只需 运行 docker-compose builddocker-compose up 到 运行 就安全了。

还有其他技术,一旦您获得证书,您就可以简单地挂载到容器,如 here 所示。或者您可以直接在安全端口上编辑上述答案中提到的 dockerfile 和 运行。

到目前为止我学到的是我们不能 运行 docker 通过安全服务器。 Docker 只要求提供服务的端口即可。 解决方案是使用需要安全的 docker 的简单应用程序。在这里,我无法理解这个 docker 应用程序,所以我为此使用了 nginx。

我的 nginx 文件有点像这样

server {
  listen 9000 ssl;
  server_name 127.0.0.1;

ssl_certificate /etc/letsencrypt/live/staging.globalblockchain.io/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/staging.globalblockchain.io/privkey.pem; # managed by Certbot


  location / {
    proxy_pass http://127.0.0.1:8000;
  }
}

我所做的是,使用 nginx 将通过安全 9000 的调用重定向到我本地的 8000。所以我在 8000 端口上的所有内容都可以通过安全 9000 访问并且 UI 能够使用这个安全 9000。