You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gunicorn启动提示找不到Let's Encrypt证书文件该如何处理

问题根因

报错的核心原因是Let's Encrypt证书默认存储目录/etc/letsencrypt/只有root用户有读写权限,运行Gunicorn的普通用户没有权限读取证书文件。直接修改文件/目录权限会在certbot自动续期后被重置,必须使用持久化的权限配置方案才能永久解决问题。

解决方案

方案1:配置certbot续期钩子自动设置权限(永久生效)

该方案适配直接用Gunicorn对外提供HTTPS服务的场景,配置后证书续期不会重置权限:

  • 首先创建专门的证书访问用户组,把Gunicorn的运行用户加入组(示例中运行用户为ubuntu,你可以替换为自己的实际运行用户):
# 创建证书访问组
sudo groupadd cert-users
# 将Gunicorn运行用户加入组
sudo usermod -aG cert-users ubuntu
  • 修改certbot全局配置文件/etc/letsencrypt/cli.ini,在末尾添加续期后自动执行的权限设置钩子:
post-hook = chown -R root:cert-users /etc/letsencrypt/archive /etc/letsencrypt/live && chmod -R 750 /etc/letsencrypt/archive /etc/letsencrypt/live && chmod 640 /etc/letsencrypt/archive/*/*
  • 手动执行一次钩子让权限立即生效:
sudo certbot renew --force-renewal --post-hook "chown -R root:cert-users /etc/letsencrypt/archive /etc/letsencrypt/live && chmod -R 750 /etc/letsencrypt/archive /etc/letsencrypt/live && chmod 640 /etc/letsencrypt/archive/*/*"

方案2:添加Nginx反向代理(生产环境更推荐)

不需要修改任何证书权限,架构也更合理:

  • 让Gunicorn只监听本地127.0.0.1的端口(比如8000),启动时去掉所有SSL证书相关参数
  • 部署Nginx作为前置反向代理,由Nginx处理HTTPS证书解析、静态资源分发、流量限制等逻辑,再把动态请求转发给本地的Gunicorn服务即可。Nginx默认运行用户有权限访问Let's Encrypt证书,不需要额外调整权限。
验证配置

切换到Gunicorn运行用户,执行以下命令确认可以正常读取证书:

sudo su - ubuntu
cat /etc/letsencrypt/live/api.redrebelgames.com/cert.pem

如果能正常输出证书内容,说明权限配置生效,重新启动Gunicorn即可正常运行。

内容的提问来源于stack exchange,提问作者Ryan Glenn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:06:05