【问题标题】:cron jobs for let's encrypt ssl renewal with mongod on nginx让我们在 nginx 上使用 mongod 加密 ssl 更新的 cron 作业
【发布时间】:2016-05-16 14:01:20
【问题描述】:

this guide 之后,我已经在数字海洋上启动并运行了一个解析服务器。 在为迁移配置 mongo db 时,您执行以下命令:

sudo cat /etc/letsencrypt/archive/domain_name/{fullchain1.pem,privkey1.pem} | sudo tee /etc/ssl/mongo.pem

之后教程说:

更新 Let's Encrypt 证书后,您必须重复上述命令。如果您配置 Let's Encrypt 证书的自动续订,请记住包含此操作。

为了做到这一点,我在我的 let's encrypt cronjobs 中添加了一个 cronjob,如下所示:

30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
33 2 * * 1 cat /etc/letsencrypt/archive/DOMAIN/{fullchain1.pem,privkey1.pem} | tee /etc/ssl/mongo.pem
35 2 * * 1 /etc/init.d/nginx reload

但是在星期一重新启动服务器后,mongod 无法启动,因为它无法找到/读取/etc/ssl/mongo.pem

如何正确设置?我需要在另一个 cronjob 中对文件进行 chown/chmod 吗?

感谢您的帮助!

【问题讨论】:

    标签: mongodb ssl nginx cron lets-encrypt


    【解决方案1】:

    我在上面的脚本中遇到了问题。不幸的是,让我们加密不会覆盖 fullchain 和 privkey,而是在证书到期时添加新版本: fullchain2.pem privkey2.pem

    所以我不得不相应地修改脚本。我还把更新和 nginx 部分放在里面,所以我们只需要一个 cronjob:

    #!/bin/bash
    
    # stop nginx
    /etc/init.d/nginx stop
    
    # check for new cert
    /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
    
    # combine latest letsencrypt files for mongo
    
    # find latest fullchain*.pem
    newestFull=$(ls -v /etc/letsencrypt/live/DOMAIN/fullchain*.pem | tail -n 1)
    echo "$newestFull"
    
    # find latest privkey*.pem
    newestPriv=$(ls -v /etc/letsencrypt/live/DOMAIN/privkey*.pem | tail -n 1)
    echo "$newestPriv"
    
    # combine to mongo.pem
    cat {$newestFull,$newestPriv} | tee /etc/ssl/mongo.pem
    
    # set rights for mongo.pem 
    chmod 600 /etc/ssl/mongo.pem
    chown mongodb:mongodb /etc/ssl/mongo.pem
    
    # restart mongo
    /sbin/restart mongod
    
    # start nginx
    /etc/init.d/nginx start
    

    【讨论】:

    • 这帮助我解决了类似的问题;但我很好奇你为什么使用 /etc/letsencrypt/archive/ 而不是 /etc/letsencrypt/live/ 有最新文件的快捷方式?
    • 实际上除了??‍♂️之外没有其他原因 - 将很快审查它:) 谢谢!
    【解决方案2】:

    好的,这就是我最终的结果。 我写了一个小脚本:

    #!/bin/bash
    
    # combine letsencrypt files for mongo
    cat /etc/letsencrypt/archive/DOMAIN/{fullchain1.pem,privkey1.pem} | tee /etc/ssl/mongo.pem
    
    # set rights for mongo.pem 
    chmod 600 /etc/ssl/mongo.pem
    chown mongodb:mongodb /etc/ssl/mongo.pem
    
    # restart mongo
    /sbin/restart mongod
    

    并使用 cron 作业触发它:

    30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
    33 2 * * 1 cat /root/myScript
    35 2 * * 1 /etc/init.d/nginx reload
    

    【讨论】:

    • 如果使用 cron 运行,cat 命令不会向 root 发送包含您私钥内容的电子邮件吗?我希望 mongod 有一个重新加载命令。对于使用 SELinux 的任何人,如有必要,请不要忘记在新文件上使用 restorecon
    猜你喜欢
    • 2020-06-29
    • 2021-01-14
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2016-05-26
    相关资源
    最近更新 更多