如何使用 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
您想部署 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 build
和 docker-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。
需要通过安全网络启动 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
您想部署 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 build
和 docker-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。