docker-flow-letsencrypt, 添加服务,让我们将证书加密到 Docker 流

分享于 

10分钟阅读

GitHub

  繁體 雙語
Companion service which adds Let’s Encrypt certificates to docker flow
  • 源代码名称:docker-flow-letsencrypt
  • 源代码网址:http://www.github.com/hamburml/docker-flow-letsencrypt
  • docker-flow-letsencrypt源代码文档
  • docker-flow-letsencrypt源代码下载
  • Git URL:
    git://www.github.com/hamburml/docker-flow-letsencrypt.git
    Git Clone代码到本地:
    git clone http://www.github.com/hamburml/docker-flow-letsencrypt
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/hamburml/docker-flow-letsencrypt
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Docker 流:让我们加密
    GitHub releaselicenseDocker Pulls

    简介

    这里项目与 farcic Docker 流的维克多兼容: 代理和 Docker 流: 集群监听程序使用certbot自动创建和更新ssl证书,让我们为你的域加密并将它的存储在/etc/letsencrypt 中,因此需要持久存储。 可以从主机绑定文件夹并使用约束确保伙伴服务始终在同一主机上运行,或者使用诸如 rexray 这样的存储插件来允许数据跟踪其他节点上的容器。

    服务设置一个( 03: 00和 15: 00 ),它默认每天运行两次,并调用 renewAndSendToProxy。 你可以使用正确的环境变量 覆盖这些cron行为。 它运行certbot自动更新并将证书上载到运行的 Docker 流: 代理电子邮件服务。

    你也可以在 Docker-Hub 找到这个项目。

    :它是如何工作的

    这个 Docker 映像使用certbot自动。curl和cron来创建和更新你的加密证书。 如果你的帐户丢失并希望在你丢失帐户时使用 环境变量,那么我们将在你丢失帐户时进行加密,并希望使用 Docker 流程的dns名称和dns名称。 代理程序。

    映像启动时,certbot.sh 脚本运行并创建/更新证书并创建/etc/cron./renewcron。 脚本还运行 renewAndSendToProxy.sh,它将 cert.pem, chain.pem 和 privkey.pem 结合到 domainname.combined.pem 文件中,并通过curl将证书上传到代理。

    因为这个脚本每天通过/etc/cron. d/renewcron运行2 次,所以它也会调用certbot自动更新,因为这个脚本是在。 你可以通过更改CERTBOT_CRON_RENEW环境变量来覆盖这里行为。 这里脚本还创建/etc/letsencrypt 文件夹备份,存储在/etc/letsencrypt/backup. 中不用担心,备份文件夹从tar命令中排除。

    可以看到输出是通过管道传入/var/log/dockeroutput.log.的,这个文件是在 Dockerfile 创建的,直接重定向到 Docker 日志输出。 这些日志也 colorized,这样你就能毫不犹豫地找到重要信息。

    如果你只想测试这个映像,那么在创建服务时应该添加 -e CERTBOTMODE="staging",以使用让我们加密的临时模式。 请记住,证书不受信任,因此你将在浏览器中收到警告。

    certbot自动调用 --rsa-key-size 4096 --redirect --hsts --staple-ocsp 为了提高安全性。

    用法

    构建工具

    
    docker build -t hamburml/docker-flow-letsencrypt. 
    
    
    
    

    运行

    注意如果使用本地存储,请在启动服务之前创建 /etc/letsencrypt 文件夹。

    
    docker service create --name letsencrypt-companion 
    
    
     --label com.df.notify=true 
    
    
     --label com.df.distribute=true 
    
    
     --label com.df.servicePath=/.well-known/acme-challenge 
    
    
     --label com.df.port=80 
    
    
     -e DOMAIN_1="('haembi.de' 'www.haembi.de' 'blog.haembi.de')"
    
    
     -e DOMAIN_2="('michael-hamburger.de' 'www.michael-hamburger.de' 'blog.michael-hamburger.de')"
    
    
     -e CERTBOT_EMAIL="your.mail@mail.de" 
    
    
     -e PROXY_ADDRESS="proxy" 
    
    
     -e CERTBOT_CRON_RENEW="('0 3 * * *' '0 15 * * *')"
    
    
     --network proxy 
    
    
     --mount type=bind,source=/etc/letsencrypt,destination=/etc/letsencrypt 
    
    
     --constraint 'node.id==<nodeId>' 
    
    
     --replicas 1 hamburml/docker-flow-letsencrypt:latest
    
    
    
    

    aclName 标签是可选的。 然而,它帮助代理订购acl并确保附加规则在它的他服务规则上加以顺序添加。

    你还可以使用堆栈文件来部署letsencrypt伙伴。 docker-compose-stack.yml 文件的内容为:

    
    version:"3"
    
    
    
    services:
    
    
    
     # Let's Encrypt Companion
    
    
     letsencrypt-companion:
    
    
     image: hamburml/docker-flow-letsencrypt:latest
    
    
     networks:
    
    
     - proxy
    
    
     environment:
    
    
     - DOMAIN_1=('haembi.de' 'www.haembi.de' 'blog.haembi.de')
    
    
     - DOMAIN_2=('michael-hamburger.de' 'www.michael-hamburger.de' 'blog.michael-hamburger.de')
    
    
     - CERTBOT_EMAIL=your.mail@mail.de
    
    
     - PROXY_ADDRESS=proxy
    
    
     - CERTBOT_CRON_RENEW=('0 3 * * *' '0 15 * * *')
    
    
     volumes:
    
    
     -/etc/letsencrypt:/etc/letsencrypt
    
    
     deploy:
    
    
     labels:
    
    
     - com.df.servicePath=/.well-known/acme-challenge
    
    
     - com.df.notify=true
    
    
     - com.df.distribute=true
    
    
     - com.df.port=80
    
    
     placement:
    
    
     constraints: [node.id == <nodeId>]
    
    
     replicas: 1
    
    
    
    networks:
    
    
     proxy:
    
    
     external: true
    
    
    
    

    作为viktor和监听器代理的完整堆栈示例,检查 docker-compose-full-stack.yml 文件。

    你应该始终在同一 Docker 主机上启动该服务。 你通过设置为运行服务的Docker 主机的id来实现这一点。 映射可以通过 docker node ls 获取。 你不能把服务扩展到两个,这不会有任何意义 ! 这里伙伴的一个实例只能运行。 证书只有 60天或者更早时才会续订。 这是标准的certbot自动行为。 但是,当你将子域添加到域列表时,证书将被更新 ! 如果要更改certbot自动续订和发布脚本的次数,则需要更改 CERTBOT_CRON_RENEW。 这里的语法描述为

    重要:第一个域必须始终是没有任何子域的域。 使文件夹结构正常。

    我们需要遵守加密限制的速率 ! https://letsencrypt.org/docs/rate-limits/

    Docker 日志

    你可以通过日志查看运行的服务的进度。

    
    root@server # docker logs letsencrypt-companion... -f
    
    
    
    Docker Flow: Let's Encrypt started
    
    
    We will use your.email@mail.de for certificate registration with certbot. This e-mail is used by Let's Encrypt when you lose the account and want to get it back.
    
    
    
    Use certbot --standalone --non-interactive --expand --keep-until-expiring --agree-tos --standalone-supported-challenges http-01 --rsa-key-size 4096 --redirect --hsts --staple-ocsp -d domain1.de -d www.domain1.de -d subdomain1.domain1.de 
    
    
    -------------------------------------------------------------------------------
    
    
    Certificate not yet due for renewal; no action taken.
    
    
    -------------------------------------------------------------------------------
    
    
    (removed some entries...)
    
    
    Docker Flow: Proxy DNS-Name: proxy
    
    
    current folder name is: domain1.de
    
    
    concat certificates for domain1.de
    
    
    generated domain1.de.combined.pem
    
    
    transmit domain1.de.combined.pem to proxy
    
    
     % Total % Received % Xferd Average Speed Time Time Time Current
    
    
     Dload Upload Total Spent Left Speed
    
    
    100 7114 0 0 100 7114 0 108k --:--:-- --:--:-- --:--:-- 108k
    
    
    HTTP/1.1 100 Continue
    
    
    
    HTTP/1.1 200 OK
    
    
    Date: Tue, 10 Jan 2017 18:54:43 GMT
    
    
    Content-Length: 0
    
    
    Content-Type: text/plain; charset=utf-8
    
    
    
    proxy received domain1.de.combined.pem
    
    
    (removed some entries...)
    
    
    Thanks for using Docker Flow: Let's Encrypt and have a nice day!
    
    
    
    Starting supervisord (which starts and monitors cron)
    
    
    (removed some entries...)
    
    
    
    

    重新启动服务并且证书无法续订时,日志将显示以下内容。

    
    ...
    
    
    -------------------------------------------------------------------------------
    
    
    Certificate not yet due for renewal; no action taken.
    
    
    -------------------------------------------------------------------------------
    
    
    ...
    
    
    
    

    反馈

    感谢使用 docker-flow-letsencrypt。如果你有问题或者一些想法,如何更好地创建新问题。 感谢 Viktor Farcic的帮助和 Docker 流程:)

    Buy Me a Coffee at ko-fi.com

    我是一个学生,我和其他学生建立了一个游戏开发的启动。 我的收入相对较低,所以我真的非常感谢 Coffee的每一杯。 感谢你:)


    COM  DOC  添加  服务  Docker  DOCK  
    相关文章