ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

changedetection.io 如何通过 SSL_CERT_FILE 与 SSL_PRIVKEY_FILE 启用直连 HTTPS

2026/9/12 12:28:45 拓冰建站 浏览量
changedetection.io 如何通过 SSL_CERT_FILE 与 SSL_PRIVKEY_FILE 启用直连 HTTPS changedetection.io 如何通过 SSL_CERT_FILE 与 SSL_PRIVKEY_FILE 启用直连 HTTPS【免费下载链接】changedetection.ioBest and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring—all for free or enjoy our SaaS plan!项目地址: https://gitcode.com/GitHub_Trending/ch/changedetection.io当你要在没有反向代理的情况下直接通过https://访问 changedetection.io 的 Web 界面时比如自托管在内网或直接用域名 证书部署需要让 Web 服务以 SSL 模式启动。changedetection.io 通过一对环境变量SSL_CERT_FILE与SSL_PRIVKEY_FILE来开启这一模式两者同时设置后应用会在监听端口上用证书与私钥启动 HTTPS支持 Socket.IO 与纯 Flask 两种启动路径无需再配置 Nginx 等反向代理的 TLS 终结。下文以仓库自带的 docker-compose.yml 与启动入口 changedetectionio/init.py 为准说明配置方法、Docker 部署步骤和启动后的验证方式。开启 SSL 模式的条件先弄清代码里的判定逻辑避免设了变量却没生效ssl_cert_file os.getenv(SSL_CERT_FILE, cert.pem) ssl_privkey_file os.getenv(SSL_PRIVKEY_FILE, privkey.pem) if os.getenv(SSL_CERT_FILE) and os.getenv(SSL_PRIVKEY_FILE): ssl_mode TrueSSL_CERT_FILE与SSL_PRIVKEY_FILE是成对生效的只有两者同时设置ssl_mode才会被置为True。只设置其中一个不会开启 SSL 模式。两个变量都是字符串值即证书 / 私钥文件的相对路径或文件名。未设置时默认值是cert.pem和privkey.pem这个默认值只对命令行-s方式生效见下文。启动时还会做一次文件存在性检查文件不存在则直接退出退出码为2if ssl_mode: if not os.path.isfile(ssl_cert_file) or not os.path.isfile(ssl_privkey_file): logger.critical(fCannot start SSL/HTTPS mode, Please be sure that {ssl_cert_file} and {ssl_privkey_file} exist in in {os.getcwd()}) os._exit(2)注意检查是相对进程当前工作目录os.getcwd()做的。因此证书文件放在哪里、容器里的工作目录是什么决定了变量该填什么值。方式一Docker Compose 部署主路径仓库的 docker-compose.yml 已经内置了 SSL 相关配置的注释样例按注释指引修改即可。1. 把证书文件挂载进容器docker-compose.yml中给出的挂载示例是把宿主机证书挂到/app下services: changedetection: image: ghcr.io/dgtlmoon/changedetection.io container_name: changedetection hostname: changedetection volumes: - changedetection-data:/datastore # HTTPS SSL Mode 需要把证书文件挂进容器例如 - ./cert.pem:/app/cert.pem - ./privkey.pem:/app/privkey.pem这里挂载到/app的依据来自 Dockerfile容器的工作目录是WORKDIR /app默认命令为CMD [python, ./changedetection.py, -d, /datastore]。也就是说证书放在/app下时工作目录内就能看到cert.pem、privkey.pem。2. 打开 environment 段并设置两个变量docker-compose.yml中environment整段默认是被注释掉的#开头SSL 配置位于该段末尾# environment: # HTTPS SSL Mode for webserver, unset both of these, you may need to volume mount these files also. # ./cert.pem:/app/cert.pem and ./privkey.pem:/app/privkey.pem # - SSL_CERT_FILEcert.pem # - SSL_PRIVKEY_FILEprivkey.pem把整段environment取消注释并确保SSL_CERT_FILE、SSL_PRIVKEY_FILE两行同时生效。变量值cert.pem/privkey.pem是容器内相对路径与上面的挂载点/app对应。如果证书放在容器内其他位置例如随/datastore一起挂载把变量值改成对应的相对路径即可。3. 确认端口映射直连 HTTPS 时浏览器直接访问 5000 端口需要保持ports映射开启ports: - 127.0.0.1:5000:5000默认只绑定127.0.0.1仅在宿主机本机可达。如果要让局域网/公网访问需把127.0.0.1改为0.0.0.0或去掉前缀并自行保证证书私钥安全。4. 启动docker compose pull docker compose up -d启动成功后日志中会出现来自代码的明确提示见下文验证部分然后就可以用https://你的地址:5000访问。方式二非 Docker 运行可选分支如果直接用源码或 pip 安装的方式运行代码提供两条等价的开启途径命令行参数-s开启ssl_mode证书文件取默认名cert.pem和privkey.pem需要放在启动目录即os.getcwd()下同时设置SSL_CERT_FILE与SSL_PRIVKEY_FILE两个环境变量可指定任意文件路径例如SSL_CERT_FILE/etc/ssl/changedetection/cert.pem \ SSL_PRIVKEY_FILE/etc/ssl/changedetection/privkey.pem \ python changedetection.py -d /datastore无论哪种方式文件存在性检查都在启动早期执行文件缺失时进程直接退出不会先起来再报错。验证是否以 HTTPS 启动看启动日志。SSL 模式下两条启动路径都会输出成功级别的日志使用 Socket.IO 时SSL mode enabled, attempting to start with SSL_CERT_FILE and SSL_PRIVKEY_FILE in 工作目录随后以ssl_context(ssl_cert_file, ssl_privkey_file)启动Socket.IO 禁用时走app.run(..., ssl_context(ssl_cert_file, ssl_privkey_file))同样先输出这条日志。在 Docker 场景下用docker compose logs changedetection查看确认出现 SSL mode enabled 字样且没有退出。确认失败现象。如果证书或私钥文件在工作目录中不存在容器会打印Cannot start SSL/HTTPS mode, Please be sure that cert.pem and privkey.pem exist in in 当前工作目录并直接退出退出码 2。此时按日志里提示的工作目录核对挂载路径与变量值是否一致。用浏览器或命令行访问。配置正确后https://宿主机地址:5000应能打开 changedetection.io 界面。证书由你自己提供的证书链决定自签证书会有浏览器警告属正常现象。限制与说明SSL_CERT_FILE/SSL_PRIVKEY_FILE只控制 changedetection.io自身 Web 服务的直连 HTTPS它与抓取目标页面时使用的HTTP_PROXY、HTTPS_PROXY等代理设置是两回事不要混用。文件存在性检查基于相对路径 当前工作目录Docker 场景下工作目录是/app见 Dockerfile所以官方 compose 注释给出的挂载位置是/app/cert.pem与/app/privkey.pem换位置挂载时务必同步修改两个变量的值。两个环境变量只设一个不会报错但 SSL 模式也不会开启服务仍以 HTTP 监听容易误判为配置未生效配置后请核对启动日志中是否出现 SSL mode enabled。若你实际是通过 Nginx 等反向代理终结 TLS 再转发到本服务则不需要开启这对变量docker-compose.yml注释中也提示置于反向代理后时应注释掉ports映射。【免费下载链接】changedetection.ioBest and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring—all for free or enjoy our SaaS plan!项目地址: https://gitcode.com/GitHub_Trending/ch/changedetection.io创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考