Skip to content

Docker 绑定域名与 HTTPS

把已跑通的 Docker 服务从 http://服务器IP:9321 换成自己的 HTTPS 域名。新手推荐 1Panel 面板版

准备工作

开始前确认这几件事:

  1. Docker 版 LogVar 弹幕 API 已经运行。
  2. 你已经有域名;没有的话先看 先准备一个域名
  3. 域名已经解析到这台 VPS 的公网 IP。
  4. 服务器安全组 / 防火墙已放行 80443
  5. 你知道自己的两个令牌:
    • TOKEN:播放器访问令牌。
    • ADMIN_TOKEN:系统配置令牌。

如果 DNS 在 Cloudflare,第一次申请证书建议先把记录设为 DNS only。等 HTTPS 跑通后,再决定是否打开代理。

选择路线

你只需要选一条路线。1Panel 和宝塔用户看前两个标签;纯命令行用户在 Caddy 和 Nginx 里选一个。

适合已经按 Docker 部署 的 1Panel 面板版跑通服务的用户。下面统一把反向代理目标写成:

text
http://127.0.0.1:9321

1. 确认域名已经指向这台 VPS

先在域名服务商或 Cloudflare 里添加 A 记录,让域名指向 VPS 公网 IP。

1Panel 面板首页,确认正在操作这台 VPS

这一步不是在 1Panel 里改 DNS。确认域名已经指到当前服务器后,再继续下面的面板操作。

2. 进入网站页面,检查 OpenResty

点击左侧 网站。如果提示还没有安装 OpenResty,需要先安装;如果已经启动,可以直接跳到创建网站。

进入 1Panel 网站页面,提示需要安装 OpenResty

3. 安装 OpenResty

点击左侧 应用商店,找到 OpenResty,点击 安装

在 1Panel 应用商店找到 OpenResty

安装表单保持默认即可,确认 HTTP 端口是 80,HTTPS 端口是 443,然后点击 确认

OpenResty 安装表单,端口保持 80 和 443

等待安装任务执行完成。

OpenResty 安装任务开始执行

安装完成后,在 应用商店 → 已安装 里能看到 openresty 已启动。

OpenResty 已安装并启动

4. 创建反向代理网站

回到左侧 网站,确认顶部显示 OpenResty 已启动,然后点击 创建

网站页面里 OpenResty 已启动,可以点击创建

创建页面默认可能停留在“一键部署”。这里要选择 反向代理

1Panel 创建网站页面默认选项

创建网站时选择反向代理

5. 填写域名和代理地址

按下面填写:

  • 域名你的域名
  • 代号:可以填 danmu_api
  • 代理地址127.0.0.1:9321
  • 备注:可选

填写域名、代号和 127.0.0.1:9321 代理地址

这里的代理地址不要填公网 IP。LogVar 弹幕 API 和 OpenResty 在同一台服务器上,所以填 127.0.0.1:9321

点击 确认。创建成功后,网站列表里能看到你的域名,协议暂时还是 HTTP。

反向代理网站创建成功,当前协议还是 HTTP

6. 申请 HTTPS 证书

点击左侧 网站 → 证书,进入证书列表。

进入网站证书页面

点击 申请证书

打开申请证书表单

按下面填写:

  • 主域名你的域名
  • Acme 账户:保持默认 Let's Encrypt 账户即可
  • 验证方式:选择 HTTP
  • 自动续签:保持勾选

填写主域名并选择 HTTP 验证方式

HTTP 验证需要公网能访问服务器 80 端口。如果申请失败,先检查 DNS、服务器安全组和防火墙。

点击 确认 后等待申请任务完成。

证书申请任务执行完成

证书列表里状态为 正常,说明证书申请成功。

证书列表里显示证书状态正常

7. 给网站启用 HTTPS

回到 网站 列表,点击你的域名这一行右侧的 配置

进入网站配置页面

在左侧配置菜单里点击 HTTPS

进入网站 HTTPS 配置页,当前还未启用 HTTPS

打开 启用 HTTPS

打开启用 HTTPS 后出现证书设置区域

证书设置按下面选:

  • HTTP 选项:访问 HTTP 自动跳转到 HTTPS
  • SSL 选项:选择已有证书
  • Acme 账户:选择面板里的 Let's Encrypt 账户
  • 证书:选择刚才申请的 你的域名

选择 acme 账户后,证书自动选中 你的域名

点击页面底部 保存

保存 HTTPS 配置成功

回到网站列表,确认协议已经变成 HTTPS,并显示证书过期时间。

网站列表里协议已经变成 HTTPS,并显示证书过期时间

8. 用 HTTPS 域名验证

浏览器打开:

text
https://你的域名/你的TOKEN

通过 HTTPS 域名打开 LogVar 弹幕 API 自检页

能看到 LogVar 弹幕 API 自检界面,就说明域名、反向代理和 HTTPS 已经跑通。

适合已经用宝塔面板管理网站的用户。下面统一把反向代理目标写成:

text
http://127.0.0.1:9321

1. 确认域名已经指向这台 VPS

先在域名服务商或 Cloudflare 里添加 A 记录,让域名指向 VPS 公网 IP。

2. 进入宝塔网站页面

登录宝塔面板,点击左侧 网站

进入宝塔网站页面

3. 切换到反向代理

在顶部项目类型里点击 反向代理,然后点击 添加反代

切换到宝塔反向代理页面

4. 打开添加反代表单

表单里主要填 域名目标 URL地址发送域名(host)

宝塔添加反向代理空表单

5. 填写域名和代理地址

按下面填写:

  • 域名你的域名
  • 目标 URL地址http://127.0.0.1:9321
  • 发送域名(host):保持 $http_host
  • 备注:可填 LogVar Docker 反向代理

填写宝塔反向代理域名和目标地址

这里不要填公网 IP。LogVar 弹幕 API 和宝塔 Nginx 在同一台服务器上,所以目标地址填 127.0.0.1:9321

点击 确定。创建成功后,反向代理列表里能看到域名,状态为 开启,SSL 暂时显示 未部署

宝塔反向代理创建成功

6. 进入 SSL 设置

点击这一行右侧 设置,在弹窗左侧点击 SSL

进入宝塔反向代理 SSL 设置

7. 申请免费证书

切换到 免费证书,点击 申请证书。如果面板弹出绑定宝塔账号提示,按提示绑定账号后再回来继续申请。

宝塔免费证书申请入口

申请方式建议选 HTTP验证。如果 DNS 在 Cloudflare,第一次申请证书前先把记录设为 DNS only

证书申请成功后,回到反向代理列表,确认 SSL 不再显示“未部署”。

8. 用 HTTPS 域名验证

浏览器打开:

text
https://你的域名/你的TOKEN

通过 HTTPS 域名打开 LogVar

能看到 LogVar 弹幕 API 页面,就说明宝塔反向代理和 HTTPS 已经跑通。

适合不用面板、希望用 Caddy 自动申请和续签 HTTPS 的服务器。命令都在 VPS 的 SSH 窗口里执行。

1. 先把 Docker 端口收口到本机

进入 Docker 部署目录:

bash
cd ~/danmu-api

打开 Compose 文件:

bash
nano docker-compose.yml

把原来的端口映射:

yaml
- "9321:9321"

改成只监听本机:

yaml
- "127.0.0.1:9321:9321"

把 Docker Compose 的端口映射改成只监听 127.0.0.1

保存后重建容器:

bash
docker compose up -d

检查端口绑定:

bash
docker compose ps

正常应看到类似:

text
127.0.0.1:9321->9321/tcp

重建容器后确认 danmu_api 只绑定 127.0.0.1

2. 配置 DNS

在域名 DNS 面板里添加一条 A 记录,把域名指向 VPS 公网 IP。

把子域名指向 VPS 时 DNS 记录通常怎么填写

如果 DNS 在 Cloudflare,第一次先用 DNS only。证书签发成功后,再按需要打开代理。

3. 安装 Caddy

bash
apt update
bash
apt install -y caddy
bash
caddy version
bash
systemctl status caddy --no-pager --lines=0

安装完成后查看 Caddy 版本和 systemd 状态

看到 Active: active (running) 就可以继续。

4. 写 Caddyfile

bash
nano /etc/caddy/Caddyfile

改成下面这样:

text
你的域名 {
    encode gzip
    reverse_proxy 127.0.0.1:9321
}

只需要把 你的域名 换成自己的完整域名。

在 Caddyfile 里把域名反代到本机 127.0.0.1:9321

5. 校验并重载 Caddy

bash
caddy validate --config /etc/caddy/Caddyfile
bash
systemctl reload caddy

用 caddy validate 检查 Caddyfile 语法

先看到 Valid configuration,再 reload。

6. 用 HTTPS 域名验证

打开:

text
https://你的域名/你的TOKEN

如果还要进入系统配置,再打开:

text
https://你的域名/你的ADMIN_TOKEN

最后用 HTTPS 域名打开页面和系统配置入口

两个地址都能打开后,再按 部署后自检 跑一遍弹幕测试。

适合已经习惯 Nginx 的服务器。命令都在 VPS 的 SSH 窗口里执行。

1. 先把 Docker 端口收口到本机

进入 Docker 部署目录:

bash
cd ~/danmu-api

打开 Compose 文件:

bash
nano docker-compose.yml

把原来的端口映射:

yaml
- "9321:9321"

改成只监听本机:

yaml
- "127.0.0.1:9321:9321"

把 Docker Compose 的端口映射改成只监听 127.0.0.1

保存后重建容器:

bash
docker compose up -d

检查端口绑定:

bash
docker compose ps

正常应看到类似:

text
127.0.0.1:9321->9321/tcp

重建容器后确认 danmu_api 只绑定 127.0.0.1

2. 配置 DNS

在域名 DNS 面板里添加一条 A 记录,把域名指向 VPS 公网 IP。

把子域名指向 VPS 时 DNS 记录通常怎么填写

如果 DNS 在 Cloudflare,第一次先用 DNS only。证书签发成功后,再按需要打开代理。

3. 安装 Nginx

bash
apt update
bash
apt install -y nginx
bash
nginx -v
bash
systemctl status nginx --no-pager --lines=0

安装完成后查看 Nginx 版本和 systemd 状态

看到 Active: active (running) 就可以继续。

4. 写 Nginx 站点配置

bash
nano /etc/nginx/sites-available/danmu-api.conf

写入下面内容,把 你的域名 换成自己的完整域名:

nginx
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;
    }
}

在 Nginx 站点配置里把域名反代到本机 127.0.0.1:9321

5. 启用站点并重载 Nginx

bash
ln -s /etc/nginx/sites-available/danmu-api.conf /etc/nginx/sites-enabled/danmu-api.conf
bash
rm -f /etc/nginx/sites-enabled/default
bash
nginx -t
bash
systemctl reload nginx

启用站点、校验 Nginx 配置并重载服务

先看 nginx -t 是否通过,再 reload。

6. 安装 Certbot

bash
apt install -y certbot python3-certbot-nginx
bash
certbot --version

安装 Certbot 和 python3-certbot-nginx 插件

7. 申请 HTTPS

bash
certbot --nginx -d 你的域名

如果提示是否把 HTTP 自动跳到 HTTPS,选择跳转。

使用 certbot --nginx 给域名申请 HTTPS 证书

看到证书申请成功后,这一步完成。

8. 用 HTTPS 域名验证

打开:

text
https://你的域名/你的TOKEN

如果还要进入系统配置,再打开:

text
https://你的域名/你的ADMIN_TOKEN

最后用 HTTPS 域名打开页面和系统配置入口

两个地址都能打开后,再按 部署后自检 跑一遍弹幕测试。

验证结果

最后用这三个地址检查:

text
https://你的域名/
https://你的域名/你的TOKEN
https://你的域名/你的ADMIN_TOKEN

正常结果:

  • / 能打开服务首页或说明页面。
  • /你的TOKEN 能打开普通自检页面,播放器也用这个地址。
  • /你的ADMIN_TOKEN 能进入系统配置页面。

常见问题

域名一直打不开

先检查:

  • DNS 记录是否已经生效。
  • 域名是否指向当前 VPS 的公网 IP。
  • 云厂商安全组是否放行 80 / 443
  • 服务器防火墙是否放行 80 / 443

如果使用 UFW,可以执行:

bash
ufw allow 80/tcp
ufw allow 443/tcp

证书申请失败

常见原因是:

  • 域名没有真正指到这台 VPS。
  • 80 端口被安全组或防火墙拦住。
  • Cloudflare 一开始就开了橙云代理。

第一次申请证书时,Cloudflare 建议先用 DNS only

HTTPS 打开后是 404

确认访问路径里带了正确令牌:

text
https://你的域名/你的TOKEN

如果根路径能打开,但 /你的TOKEN 不行,回到部署时的 .env 或系统配置里确认 TOKEN 是否一致。

想关闭公网 9321 端口

命令行部署可以把 Compose 端口改成:

yaml
- "127.0.0.1:9321:9321"

1Panel 部署也可以在 容器 → 编排 里编辑 Compose,把 "9321:9321" 改成 "127.0.0.1:9321:9321",然后重新保存编排。

改完后,外部只通过 https://你的域名/你的TOKEN 访问,http://服务器IP:9321/你的TOKEN 就不再作为公网入口使用。

反向代理 reload 后还是不通

Caddy 查看日志:

bash
journalctl -u caddy -n 50 --no-pager

Nginx 查看日志:

bash
journalctl -u nginx -n 50 --no-pager

1Panel 路线可以在 网站 → 日志容器 → 日志 里分别看反代日志和 LogVar 弹幕 API 容器日志。

下一步

本项目仅供个人学习与交流,请勿在国内媒体平台宣传。