如果你使用 Nginx 作为反向代理服务器,可以通过 Let's Encrypt 免费申请 HTTPS 证书,让网站支持 https:// 访问,并由 Certbot 自动续期。
https://
推荐使用 Nginx + Certbot:
Nginx 负责 HTTPS 监听和反向代理。
Certbot 负责申请、安装和续期证书。
Let's Encrypt 提供免费、受浏览器信任的证书。
下面以 Ubuntu 服务器为例,假设域名为 brave.example.com,后端 Go 服务运行在 127.0.0.1:8080。
brave.example.com
127.0.0.1:8080
Bash
sudo apt update sudo apt install -y nginx certbot python3-certbot-nginx
确认 Nginx 已启动:
sudo systemctl enable --now nginx
确保域名已经解析到服务器公网 IP,并且防火墙允许 80 和 443 端口访问。
创建配置文件:
sudo nano /etc/nginx/sites-available/brave
写入以下内容:
Nginx
server { listen 80; listen [::]:80; server_name brave.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; 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; } }
启用配置:
sudo ln -s /etc/nginx/sites-available/brave \ /etc/nginx/sites-enabled/brave sudo nginx -t sudo systemctl reload nginx
将 brave.example.com 替换为你的域名,8080 替换为 Go 服务实际监听端口。
8080
执行:
sudo certbot --nginx -d brave.example.com
根据提示:
输入邮箱地址。
同意服务条款。
选择是否将 HTTP 自动重定向到 HTTPS,建议选择重定向。
成功后,Certbot 会自动:
申请 Let's Encrypt 证书。
修改 Nginx 配置,启用 HTTPS。
配置证书路径。
设置 HTTP 到 HTTPS 的重定向。
访问:
https://brave.example.com
浏览器就可以正常使用受信任的 HTTPS 连接。
Certbot 通常会自动生成类似下面的配置:
server { listen 80; server_name brave.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name brave.example.com; ssl_certificate /etc/letsencrypt/live/brave.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/brave.example.com/privkey.pem; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; 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; } }
注意: 如果已经使用 certbot --nginx 成功配置证书,就不需要再手动添加这段配置。
certbot --nginx
Let's Encrypt 证书有效期较短,Certbot 通常通过系统定时任务或 systemd 自动续期。
测试续期:
sudo certbot renew --dry-run
查看证书:
sudo certbot certificates
例如你有以下域名:
可以分别申请:
sudo certbot --nginx \ -d brave.example.com \ -d api.example.com \ -d jupyter.example.com
但如果三个域名需要代理到不同的服务,建议先分别配置好 Nginx 的 server 块,再分别申请证书。
server
总结: 如果你的 Nginx 已经部署完成,通常只需要先配置 HTTP 反向代理,再执行:
sudo certbot --nginx -d 你的域名
即可完成 HTTPS 证书申请和 Nginx 配置。
对于你使用的 BRAVE + Go + Gin + Traefik v3,推荐通过 Traefik 自动申请和续期 Let's Encrypt 证书。
整个过程只需要:
准备一个已经解析到服务器公网 IP 的域名。
在 Traefik 中配置 Let's Encrypt 的 ACME 证书申请。
配置 HTTP 或 DNS 验证方式。
启动 Traefik,自动申请证书。
后续由 Traefik 自动续期,无需手动操作。
如果你已经使用 Traefik,通常不需要在 Go 服务或容器内部单独安装证书。
假设你的域名是:
brave.example.com:BRAVE 网站
api.example.com:API 服务
api.example.com
请将域名替换成自己的真实域名。
需要满足:
域名已经注册并完成 DNS 解析。
域名能够指向服务器公网 IP。
如果使用 HTTP-01 验证,公网 80 端口需要能够访问。
如果使用 TLS-ALPN-01 验证,公网 443 端口需要能够访问。
下面以 Traefik v3 为例,采用 HTTP-01 验证。这是最简单的方式,适合有公网 IP、80 端口可访问的服务器。
GitHub
+1
在服务器执行:
mkdir -p ./traefik/letsencrypt touch ./traefik/letsencrypt/acme.json chmod 600 ./traefik/letsencrypt/acme.json
acme.json 用于保存证书及 ACME 账户信息,需要持久化保存。
acme.json
v2.3
创建 traefik/traefik.yml:
traefik/traefik.yml
YAML
entryPoints: web: address: ":80" websecure: address: ":443" certificatesResolvers: letsencrypt: acme: email: "your-email@example.com" storage: "/letsencrypt/acme.json" httpChallenge: entryPoint: web providers: docker: exposedByDefault: false
将 your-email@example.com 替换成你的邮箱。
your-email@example.com
services: traefik: image: traefik:v3.5 container_name: traefik restart: unless-stopped ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro - ./traefik/letsencrypt:/letsencrypt brave: image: your-brave-image container_name: brave restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.brave.rule=Host(`brave.example.com`)" - "traefik.http.routers.brave.entrypoints=websecure" - "traefik.http.routers.brave.tls=true" - "traefik.http.routers.brave.tls.certresolver=letsencrypt" - "traefik.http.services.brave.loadbalancer.server.port=8080"
注意:
brave.example.com 替换为你的域名。
your-brave-image 替换为实际镜像。
your-brave-image
8080 替换为 BRAVE 容器内部的实际服务端口。
如果你的 Traefik 已经运行,不要重复创建一个占用 80/443 端口的实例。
Traefik 的路由器需要指定 tls.certresolver=letsencrypt,才能使用对应的证书解析器。
tls.certresolver=letsencrypt
v3.5
docker compose up -d
查看日志:
docker logs -f traefik
当域名验证成功后,Traefik 会自动申请证书并提供 HTTPS。
Traefik 会自动管理证书续期,无需配置额外的定时任务。证书数据保存在 acme.json 中,重启容器时应保留该文件。
v3.3
openssl s_client \ -connect brave.example.com:443 \ -servername brave.example.com </dev/null
例如希望一个证书覆盖:
jupyter.example.com
以及其他一级子域名,可以考虑 *.example.com 泛域名证书。
*.example.com
泛域名证书需要使用 DNS-01 验证,通常需要通过 DNS 服务商 API 自动创建 TXT 记录。
v3.2
官方文档:
Traefik v3.5 ACME 证书配置
。
你的域名是什么?
希望使用哪种证书?
单个域名证书(例如 brave.bioinfo.online)
多个子域名分别申请证书
泛域名证书(例如 *.bioinfo.online)
Cloudflare
阿里云 DNS
腾讯云 DNS
其他 / 不确定
Docker Compose
Kubernetes / k3s
已有 Traefik v3 独立部署
生成我的配置
Github开源生信云平台 DEMO