跳转到内容
搜教程里的步骤和配置项 例如 Vercel、Docker、TOKEN、播放器、域名。

Docker 绑定域名、反代与 HTTPS

目标:把 Docker 版 danmu_api服务器IP:9321 改成你自己的 域名 访问。

说明:这页前半段通用,后半段二选一:CaddyNginx

权限:下面命令默认按 root 写;如果你不是 root,就在需要权限的命令前面加 sudo

开始前先确认这 4 件事:

  • Docker 部署 已经跑通
  • 你已经有自己的域名;如果还没有,先去 先准备一个域名
  • 你能登录这台 VPS
  • 这台 VPS 的 80443 端口没有被防火墙拦住
把 Docker 服务改成域名访问并开启 HTTPS 时的整体流程图
先把域名指到 VPS,再把请求交给 Caddy 或 Nginx,最后再转到本机上的 danmu_api

第 2 步:先把 Docker 端口改成只监听本机

Section titled “第 2 步:先把 Docker 端口改成只监听本机”

先回到主服务目录:

Terminal window
cd ~/danmu-api

再打开主服务的 Compose 文件:

Terminal window
nano docker-compose.yml

把原来的:

- "9321:9321"

改成:

- "127.0.0.1:9321:9321"
把 Docker Compose 的端口映射改成只监听 127.0.0.1 的实操图
只改这一行,把公网入口留给反代服务。

第 3 步:重建容器,并确认现在只绑定到 127.0.0.1

Section titled “第 3 步:重建容器,并确认现在只绑定到 127.0.0.1”

先回到主服务目录:

Terminal window
cd ~/danmu-api

再重建容器:

Terminal window
docker compose up -d

最后检查端口绑定:

Terminal window
docker compose ps

正常情况下,你应该能看到:

127.0.0.1:9321->9321/tcp
重建容器后在 docker compose ps 里确认 danmu_api 只绑定 127.0.0.1 的实操图
只要这里是 127.0.0.1:9321->9321/tcp,后面就能安全交给反代。

第 4 步:给域名先建一条 DNS 记录

Section titled “第 4 步:给域名先建一条 DNS 记录”

这条 Docker / VPS 路线通常只需要一条 A 记录:子域名指向 VPS 公网 IP。这里不是填云平台给的 CNAME,也不是先改 nameserver。

推荐直接用一个子域名,例如:

api.example.com

大多数 DNS 提供商里,这条记录都可以先按下面这个口径填:

把子域名指向 VPS 时 DNS 记录通常怎么填写的示意图
A 记录最常见:主机名填 api,记录值填 VPS 公网 IP。

如果你的 DNS 在 Cloudflare,第一次先用 DNS only 灰云。找不到添加记录的位置时,看 云平台绑定域名页里的 Cloudflare 填记录步骤;Docker 这条线的记录值仍然填 VPS 公网 IP。如果不托管 Cloudflare,再看 域名商直接解析

下一步:查看 Cloudflare 填记录步骤

下面两条路线只走一条:

Terminal window
apt update
Terminal window
apt install -y caddy
Terminal window
caddy version
Terminal window
systemctl status caddy --no-pager --lines=0
安装完成后查看 Caddy 版本和 systemd 状态的实操图
看到 Active: active (running) 就可以继续。
Terminal window
nano /etc/caddy/Caddyfile

改成下面这样:

api.example.com {
encode gzip
reverse_proxy 127.0.0.1:9321
}

这里只需要改 1 个地方:

  • api.example.com 换成你自己的完整域名
在 Caddyfile 里把域名反代到本机 127.0.0.1:9321 的实操图
域名进来以后,全部转发到 127.0.0.1:9321
Terminal window
caddy validate --config /etc/caddy/Caddyfile
Terminal window
systemctl reload caddy
用 caddy validate 检查 Caddyfile 语法是否正确的实操图
先看到 Valid configuration,再 reload。

先打开普通页面:

https://你的域名/87654321

再打开管理员页面:

https://你的域名/你的ADMIN_TOKEN
最后用 HTTPS 域名打开页面和管理员入口的示意图
页面和管理员入口能打开后,再按 部署后自检 跑一遍弹幕测试,就说明 Caddy 这条线已经跑通。
Terminal window
apt update
Terminal window
apt install -y nginx
Terminal window
nginx -v
Terminal window
systemctl status nginx --no-pager --lines=0
安装完成后查看 Nginx 版本和 systemd 状态的实操图
看到 Active: active (running) 就可以继续。
Terminal window
nano /etc/nginx/sites-available/danmu-api.conf

改成下面这样:

server {
server_name 你的域名;
location / {
proxy_pass http://127.0.0.1:9321;
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;
}
}

这里只需要改 1 个地方:

  • 你的域名 换成你自己的完整域名
在 Nginx 站点配置里把域名反代到本机 127.0.0.1:9321 的实操图
域名进来以后,全部转发到 127.0.0.1:9321
Terminal window
ln -s /etc/nginx/sites-available/danmu-api.conf /etc/nginx/sites-enabled/danmu-api.conf
Terminal window
rm -f /etc/nginx/sites-enabled/default
Terminal window
nginx -t
Terminal window
systemctl reload nginx
启用站点、校验 Nginx 配置并重载服务的实操图
先看 nginx -t 是否通过,再 reload。
Terminal window
apt install -y certbot python3-certbot-nginx
Terminal window
certbot --version
安装 Certbot 和 python3-certbot-nginx 插件的实操图
装好插件后,后面才能直接用 certbot —nginx
Terminal window
certbot --nginx -d 你的域名

如果它问你要不要把 HTTP 自动跳到 HTTPS,直接选“跳转”那一项。

使用 certbot --nginx 给域名申请 HTTPS 证书的实操图
只要最后看到证书申请成功,就说明这一步完成了。

先打开普通页面:

https://你的域名/87654321

再打开管理员页面:

https://你的域名/你的ADMIN_TOKEN
最后用 HTTPS 域名打开页面和管理员入口的示意图
页面和管理员入口能打开后,再按 部署后自检 跑一遍弹幕测试,就说明 Nginx 这条线已经跑通。

先检查两件事:

  • DNS 记录是不是还没生效
  • 服务器的 80443 有没有放行

如果当前机器用的是 UFW,可以先执行:

Terminal window
ufw allow 80/tcp
Terminal window
ufw allow 443/tcp

最常见的原因:

  • 域名还没真正指到这台 VPS
  • 80 / 443 被拦住了
  • Cloudflare 一上来就开了代理

第一次做这条线时,Cloudflare 建议先用 DNS only

回去再看一次:

Terminal window
docker compose ps

确认端口是不是已经变成:

127.0.0.1:9321->9321/tcp

如果你走的是 Caddy:

Terminal window
journalctl -u caddy -n 50 --no-pager

如果你走的是 Nginx:

Terminal window
journalctl -u nginx -n 50 --no-pager

参考来源:Caddy 官方反向代理文档Caddy Linux service 文档huangxd-/danmu_api README、Ubuntu 软件源中的 nginx / certbot / python3-certbot-nginx 包信息,以及本次按正文真实命令整理的终端实操图。