如何把 prompts.chat 放到 Nginx 或 Caddy 反向代理后面启用 HTTPS?
【免费下载链接】prompts.chatf.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open source — self-host for your organization with complete privacy.项目地址: https://gitcode.com/GitHub_Trending/aw/prompts.chat
当你按照 DOCKER.md 用 Docker Compose 自建 prompts.chat 实例后,容器默认把应用映射到主机4444端口(见 compose.yml 中 app 服务的${PORT:-4444}:3000),直接暴露 HTTP 端口不适合生产使用。DOCKER.md 的 “Security Considerations” 明确建议:使用 HTTPS,把 Nginx、Caddy、Traefik 这类反向代理放在应用前面。本文按该文档给出 Nginx 和 Caddy 两条代理路径:前提是你已经能在本机通过http://localhost:4444访问到 prompts.chat,目标是让访问方通过https://你的域名使用它。
准备工作:确认实例已在 4444 端口运行
如果还没有实例,按 DOCKER.md 的 Quick Start 启动(使用预构建镜像时不加--build;需要本地构建时加上):
git clone https://github.com/f/prompts.chat.git cd prompts.chat docker compose up -d启动后先确认应用本身可用,再配置代理:
curl http://localhost:4444/api/healthDOCKER.md 给出的示例响应(文档示例,时间戳会不同):
{ "status": "healthy", "timestamp": "2024-01-01T00:00:00.000Z", "database": "connected" }看到"status": "healthy"且"database": "connected"后,再进行下一步。同时按 DOCKER.md 的 “Production Setup” 要求,为生产环境显式设置AUTH_SECRET(可写入compose.yml同目录的.env文件):
export AUTH_SECRET=$(openssl rand -base64 32)另外,compose.yml 中POSTGRES_PASSWORD的默认值是prompts,文档的 Security Considerations 要求生产环境修改该密码并同步更新连接字符串。
方案一:Nginx 反向代理(需要自备 TLS 证书)
DOCKER.md 的 “Running Behind a Reverse Proxy” 一节给出了完整的 Nginx 配置。其中证书路径/etc/letsencrypt/live/prompts.example.com/...是文档示例值,替换为你自己的域名和证书实际存放位置;server_name也替换为你的域名:
server { listen 443 ssl http2; server_name prompts.example.com; ssl_certificate /etc/letsencrypt/live/prompts.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/prompts.example.com/privkey.pem; location / { proxy_pass http://localhost:4444; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } }要点说明:
proxy_pass http://localhost:4444指向宿主机上 docker compose 映射的端口。如果你修改过PORT环境变量(compose.yml 中 app 服务的映射端口),这里的4444要同步改成实际端口。- 文档中的
Upgrade/Connection等头用于 WebSocket 类连接升级,X-Forwarded-Proto让应用感知到外部是 https。 - 这份配置本身不负责申请证书,它假设
/etc/letsencrypt/live/下已有你域名的fullchain.pem和privkey.pem;证书的申请流程不在项目文档范围内,需要按你的证书工具自行完成。
方案二:Caddy 反向代理(配置最简)
如果你的域名解析已经指向这台服务器,DOCKER.md 给出的 Caddyfile 只有三行(prompts.example.com替换为你的域名):
prompts.example.com { reverse_proxy localhost:4444 }将上述内容写入 Caddy 的站点配置后重载 Caddy 即可。与 Nginx 方案不同,这里不需要手动维护ssl_certificate路径。
两种代理方案二选一即可,不需要同时配置。
验证代理是否生效
在能访问该域名的客户端上执行健康检查(
prompts.example.com替换为你的域名):curl https://prompts.example.com/api/health返回 JSON 中
"status"为"healthy"、"database"为"connected",说明 HTTPS 链路已经通到应用。用浏览器打开
https://prompts.example.com,确认站点正常加载且地址栏是 https。
代理上线后的两项安全收尾
DOCKER.md 的 Security Considerations 中与本场景直接相关的两条:
- 限制暴露端口:代理接管 443 后,宿主机 4444 端口不再需要对外。可以在防火墙层只放行 80/443(文档只给出“只暴露必要的端口”这一要求,具体规则按你的系统防火墙配置)。
- OAuth 回调地址要对上域名:如果实例启用了 GitHub/Google 登录,DOCKER.md 的 “Common Issues” 指出,认证出问题时应“验证回调 URL 与你的域名一致”。上线后把 OAuth 应用的回调地址改为
https://你的域名对应的登录/回调路径,否则走 https 域名登录会失败。
出问题时的排查入口
沿用 DOCKER.md 的 Troubleshooting 一节:
# 查看应用容器日志 docker compose logs app # 查看数据库容器日志 docker compose logs db # 确认 db 服务健康状态 docker compose ps文档给出的对应关系:应用容器反复重启时先看docker compose logs app(入口脚本会在数据库就绪前重试最多 60 秒);数据库连接错误时先docker compose ps确认db服务健康,再看docker compose logs db。若代理返回 502 且上述检查都正常,通常是proxy_pass/reverse_proxy指的目标与PORT实际映射端口不一致。
参考
- 完整的部署、环境变量、备份与迁移说明:DOCKER.md
- 服务定义(端口映射、数据库健康检查):compose.yml
【免费下载链接】prompts.chatf.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open source — self-host for your organization with complete privacy.项目地址: https://gitcode.com/GitHub_Trending/aw/prompts.chat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考