跳转至

Docker 部署指南

使用 Docker 部署 danmu_api,获得最稳定、功能完整的运行环境。无流量限制,支持配置热更新,适合 NAS 和长期运行的服务器。

服务跑通后,可以继续看 Docker 绑定域名、反代与 HTTPS


目标

用 Docker 在服务器上跑起 danmu_api,改好 TOKENADMIN_TOKEN,最后打开自带页面做自检和接口调试。

如果你是新手,推荐先看 1Panel 面板版:大部分操作都在网页面板里完成,不需要反复敲命令。 如果你熟悉 SSH 和 Linux 命令,也可以切到 命令行版


选择部署方式

这一版适合不熟悉命令行的新手:先用命令安装好 1Panel,后面创建 danmu_api 容器、查看运行状态、检查 .env 文件,都在 1Panel 面板里操作。

不要直接用普通容器创建方式硬挂载

danmu_api 第一次启动会在 /app/config 里自动生成 .env。 如果直接在面板里创建容器并挂载宿主机目录,有些机器会遇到挂载目录权限问题,导致 .env 生成失败。

本教程用 容器 → 编排 部署,并在 Compose 里加上 user: "0:0",让容器第一次启动时可以正常写入挂载目录。

准备工作

先准备好这些信息:

  • 服务器公网 IP
  • 服务器 SSH 用户名,例如 rootubuntu
  • SSH 密码
  • SSH 端口;如果服务商没单独写,一般就是 22
  • 一个可以访问服务器的浏览器

第 1 步:安装并打开 1Panel

如果服务器还没有安装 1Panel,先 SSH 登录服务器,然后按 1Panel 官方安装脚本安装。

curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

安装完成后,终端会显示 1Panel 的访问地址、用户名、密码等信息。用浏览器打开面板地址。

只在这里需要命令行

1Panel 本身安装在服务器上,所以第一次安装面板需要用 SSH 命令。安装完成后,下面部署 danmu_api 的步骤都在面板里完成。

第 2 步:登录 1Panel

打开 1Panel 登录页,输入用户名和密码,勾选协议后点 登录

1Panel 登录页

登录后会进入 1Panel 首页。后面所有操作都在这个网页面板里完成。

第 3 步:进入容器页面

在左侧菜单点击 容器

进入容器页面

进入容器模块后,顶部会看到 概览 / 容器 / 编排 / 镜像 / 网络 / 存储卷 等选项。

第 4 步:切到编排页面

点击上方的 编排

切到编排

这里用“编排”创建服务,而不是直接点“容器 → 创建”。这样后面维护、重启、修改配置都更清楚。

第 5 步:创建新编排

在编排列表右上角点击 创建

创建编排

如果列表里现在没有任何数据,是正常的,直接点 创建 即可。

第 6 步:填写编排名称和 Compose 内容

在刚才打开的创建页面里按下面填写:

  • 来源:选择 编辑
  • 文件夹:填写 danmu-api-panel
  • 中间的大编辑框:粘贴下面这段 Compose 内容

把下面内容完整复制进去:

services:
  danmu-api:
    image: logvar/danmu-api:latest
    container_name: danmu-api
    user: "0:0"
    ports:
      - "9321:9321"
    volumes:
      - /opt/1panel/apps/danmu-api/config:/app/config
      - /opt/1panel/apps/danmu-api/cache:/app/.cache
    restart: unless-stopped

重点确认这几行不要漏:

  • container_name: danmu-api:容器名固定为 danmu-api
  • user: "0:0":解决挂载目录里 .env 生成失败的权限坑
  • "9321:9321":把服务暴露到服务器的 9321 端口
  • /opt/1panel/apps/danmu-api/config:/app/config:配置文件目录,.env 会生成在这里
  • /opt/1panel/apps/danmu-api/cache:/app/.cache:缓存目录

填好后,点右下角 保存

填写 Compose 并保存

为什么不用 ./config

命令行版里可以写 ./config:/app/config,因为你知道当前目录在哪里。 面板版为了让新手少踩坑,直接写绝对路径 /opt/1panel/apps/danmu-api/config,后面在 1Panel 文件管理里也能一路点进去找到。

第 7 步:等待镜像拉取和容器启动

第一次保存后,1Panel 会拉取 logvar/danmu-api:latest 镜像并启动容器。这个过程可能需要等一会儿。

保存后先看页面里的任务日志:出现 Container danmu-api Started,就说明容器已经创建并启动成功。

容器启动成功

同一页还能看到刚才填写的 Compose 内容。只要左侧日志已经显示 Started,就可以继续去检查 .env

编排保存成功

第 8 步:在文件管理里确认 .env 已生成

接下来确认最容易出问题的地方:.env 是否已经生成。

在左侧菜单点击 文件,进入文件管理。

进入文件管理

按下面路径一层一层点进去:

  1. 进入 opt

进入 opt

  1. 进入 1panel

进入 1panel

  1. 进入 apps

进入 apps

  1. 进入 danmu-api

进入 danmu-api

  1. 进入 config,看到 .env

确认 .env 已生成

如果你能看到 .env,说明挂载目录权限是正常的。

如果没有看到 .env

优先检查 Compose 里有没有这一行:

user: "0:0"

如果漏了,回到 容器 → 编排,编辑刚才的编排,补上这一行后重新保存/重建。

第 9 步:编辑 .env,只改 TOKEN 和 ADMIN_TOKEN

config 目录里点击 .env编辑更多 → 编辑

先只改这两项:

TOKEN=87654321
ADMIN_TOKEN=改成你自己的后台口令

建议这样处理:

  • TOKEN 是普通访问口令,可以先保持默认的 87654321,确认能打开后再改
  • ADMIN_TOKEN 是管理员口令,建议一定改成你自己的随机字符串
  • 如果 ADMIN_TOKEN 前面有 #,先删掉 #,再保存

保存后会自动热更新。Docker/1Panel 部署不需要重新部署;如果你保存后访问还是旧配置,再回到 容器 页面重启 danmu-api 容器。

第 10 步:打开自检界面测试

不建议让新手手动在浏览器里拼很长的 API 测试地址。部署完成后,优先打开 danmu_api 自带页面做自检。

用普通 TOKEN 打开:

http://你的服务器IP:9321/你的TOKEN

如果你还没改 TOKEN,默认就是:

http://你的服务器IP:9321/87654321

能看到 LogVar弹幕API 页面、配置预览和接口调试入口,就说明服务已经能正常访问。

TOKEN 自检界面

如果你已经配置了 ADMIN_TOKEN,也可以用管理员地址打开:

http://你的服务器IP:9321/你的ADMIN_TOKEN

管理员地址能进入 系统配置,后面改环境变量主要用这个页面。

ADMIN_TOKEN 系统配置界面

第 11 步:后续更新和维护

后续常用操作这样处理:

  • 测试接口:打开 http://你的服务器IP:9321/你的TOKEN → 点 接口调试,在页面里选择接口并发送测试
  • 改环境变量:打开 http://你的服务器IP:9321/你的ADMIN_TOKEN → 点 系统配置,在网页里修改并保存,支持热更新
  • 重启服务:1Panel → 容器 → 找到 danmu-api → 点重启
  • 停止服务:1Panel → 容器 → 找到 danmu-api → 点停止
  • 查看日志:1Panel → 容器 → 找到 danmu-api → 日志
  • 更新镜像:1Panel → 容器 → 编排 → 找到 danmu-api-panel → 重新拉取/重建

除了第一次确认 .env 是否生成,以后一般不需要再回到 1Panel 文件管理里手动改 .env。直接用 ADMIN_TOKEN 打开的系统配置页面修改即可。

第 12 步(可选):加 Watchtower 自动更新容器

如果你希望 danmu-api 镜像有更新时自动拉取并重启,可以再单独加一个 Watchtower 编排。

Watchtower 会通过 Docker Socket 管理容器,所以一定要保留 /var/run/docker.sock:/var/run/docker.sock 这一行。最后的 danmu-api 表示只监控前面创建的 danmu-api 容器。

  1. 回到 容器 → 编排 页面,点击 创建

Watchtower 编排列表

  1. 进入创建页面后,准备填写新的 Watchtower 编排。

Watchtower 创建页面

  1. 按下面填写:

  2. 来源:选择 编辑

  3. 文件夹:填写 watchtower-gx
  4. 中间的大编辑框:粘贴下面这段 Compose 内容
services:
  watchtower:
    image: nickfedor/watchtower
    container_name: watchtower-gx
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
    command:
      - --cleanup
      - --interval
      - "12600"
      - danmu-api

说明:

  • --cleanup:更新完成后清理旧镜像
  • --interval 后面的 "12600":检查间隔,单位是秒;如果想 30 分钟检查一次,改成 "1800"
  • danmu-api:只监控名为 danmu-api 的目标容器,不影响其他容器

填好后,点右下角 保存

填写 Watchtower Compose 并保存

  1. 保存后等待任务完成。日志里出现创建成功,说明 Watchtower 编排已经创建。

Watchtower 创建成功

  1. 回到编排列表,看到 watchtower-gx运行中 / 已启动,说明自动更新容器已经启动。

Watchtower 编排运行中

  1. watchtower-gx日志,能看到类似 Next scheduled run 的下一次检查时间,就说明 Watchtower 已经正常工作。

Watchtower 日志

面板版常见问题

1)浏览器打不开 9321

先检查这两个地方有没有放行 9321

  • 服务器自己的防火墙
  • 云厂商安全组

如果你只在 1Panel 里确认容器运行,但外部浏览器打不开,通常就是安全组或防火墙没放行。

2)config 目录里没有 .env

大概率是挂载目录权限问题,检查 Compose 里有没有:

user: "0:0"

补上后重新保存编排,再回到文件管理里看 /opt/1panel/apps/danmu-api/config/.env

3)端口被占用

如果 9321 已经被别的服务占用,可以把 Compose 里的左侧端口改掉:

ports:
  - "19321:9321"

改完后访问地址也要跟着变成:

http://你的服务器IP:19321/你的TOKEN

准备工作

先把这 4 项准备好,后面会反复用到:

  • 服务器公网 IP
  • SSH 用户名,例如 rootubuntu
  • SSH 密码
  • SSH 端口;如果服务商没单独写,一般就是 22

第 1 步:如果你用 Windows,先打开 cmd

按这个顺序做:

  1. 按键盘上的 Win
  2. 输入 cmd
  3. 命令提示符

如果你用的是 macOS 或 Linux,就打开系统自带的终端;后面的 SSH 命令同样可以照着执行。

打开 cmd

先把 cmd 打开,后面的 SSH 命令就在这个窗口里执行。


第 2 步:在终端里先用 SSH 登录 VPS

如果 SSH 端口就是默认的 22,执行:

ssh root@你的服务器IP

如果服务商给的是其他端口,就执行:

ssh -p 端口 root@你的服务器IP

替换说明:

  • root 换成服务商给你的 SSH 用户名(可能是 ubuntu
  • 你的服务器IP 换成服务器公网 IP
  • 端口 换成服务商给你的 SSH 端口

首次连接提示

第一次连接时,终端通常会询问是否继续,输入 yes,再回车。 如果后面要求输入密码,窗口里通常不会显示星号,也不会回显字符;直接输入密码,再回车就行,这是正常现象。

登录成功后,命令行前面会变成类似 root@你的服务器:~# 这种 Linux 提示符;看到这种变化,再继续下一步。

SSH 登录

先在本机终端里连上 VPS;看到服务器终端提示后,再继续安装 Docker。


第 3 步:先装 Docker 和 Docker Compose

下面 3 组安装方式只选 1 组,不要 3 组都执行。 每次只复制当前这一条,等终端重新回到提示符,再继续下一条。

方案 A:官方网络正常时

先装 Docker:

curl -fsSL https://get.docker.com | sudo bash

再装 nano:

sudo apt install -y nano

方案 B:国内 VPS 拉取慢时

先装 Docker:

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

再装 nano:

sudo apt install -y nano

方案 C:想先换源再装 Docker 时

先跑脚本:

bash <(curl -sSL https://cdn.jsdelivr.net/gh/Master08s/ocss@latest/main.sh)

再装 nano:

sudo apt install -y nano

装好后按顺序确认:

docker --version
docker compose version

验证版本

能正常看到版本号,再继续下一步。


第 4 步:创建部署目录

后面统一在这个目录里操作,按顺序执行:

mkdir -p ~/danmu-api
cd ~/danmu-api
pwd

创建目录

后面所有 Docker 命令都默认在 ~/danmu-api 里执行。


第 5 步:创建 docker-compose.yml

先回到部署目录:

cd ~/danmu-api

再打开文件:

nano docker-compose.yml

把下面这段内容原样粘贴进去:

services:
  danmu-api:
    image: logvar/danmu-api:latest
    container_name: danmu-api
    ports:
      - "9321:9321"
    volumes:
      - ./config:/app/config
      - ./.cache:/app/.cache
    restart: unless-stopped

粘贴完以后保存:Ctrl + O → 回车 → Ctrl + X

docker-compose.yml

这份 Compose 只负责主服务。先把服务跑起来;自动更新和域名反代都放到后面单独做。


第 6 步:第一次启动

先启动服务:

docker compose up -d

再看容器状态:

docker compose ps

只要状态是 Up,就继续下一步。

首次启动

第一次启动时,先看 docker compose ps。只要容器已经起来,就继续去改 config/.env


第 7 步:打开 config/.env,只改这两项

第一次启动完成后,宿主机的 ~/danmu-api/config/.env 一般会自动生成。

现在直接打开它:

cd ~/danmu-api
nano config/.env

先确认这两项:

TOKEN=87654321
# ADMIN_TOKEN=改成你自己的后台口令

建议这样处理:

  • TOKEN 先保持 87654321
  • ADMIN_TOKEN 改成自己的值
  • 如果 ADMIN_TOKEN 这一行前面带 #,先把 # 删除再保存

保存顺序:Ctrl + O → 回车 → Ctrl + X

配置热加载

正常保存后,一般不用重启。如果保存后页面还是旧值,再手动执行一次:

docker compose restart danmu-api
docker compose ps

config/.env

重点只看这两项:TOKENADMIN_TOKEN。这一步不用自己手搓一份新的 .env


第 8 步:打开自检界面测试

不需要手动拼很长的 API 搜索地址。容器启动后,优先打开 danmu_api 自带页面做自检。

用普通 TOKEN 打开:

http://你的服务器IP:9321/你的TOKEN

如果 TOKEN 还是默认值,就打开:

http://你的服务器IP:9321/87654321

能看到 LogVar弹幕API 页面、配置预览和接口调试入口,就说明服务已经能正常访问。需要测试接口时,在这个页面点击 接口调试,选择接口后发送测试。

如果你已经配置了 ADMIN_TOKEN,管理员地址是:

http://你的服务器IP:9321/你的ADMIN_TOKEN

后续改环境变量不用再进服务器改 .env,直接用这个管理员地址进入 系统配置,在网页里修改并保存即可。Docker/Node 部署支持热更新,通常不用重启容器。


第 9 步(可选):需要自动更新的话,再单独加 Watchtower

先创建 Watchtower 目录:

mkdir -p ~/danmu-api-watchtower
cd ~/danmu-api-watchtower

再打开配置文件:

nano docker-compose.yml

把下面这段内容原样粘贴进去:

services:
  watchtower:
    image: nickfedor/watchtower
    container_name: watchtower-gx
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - TZ=Asia/Shanghai
    command:
      - --cleanup
      - --interval
      - "12600"
      - danmu-api

保存后再按顺序启动:

cd ~/danmu-api-watchtower
docker compose up -d
docker compose ps
docker compose logs --tail=30 watchtower

这里虽然 Watchtower 放在另一个目录里,但它监控的还是前面主服务目录里启动出来的 danmu-api 容器。只要下面两项没改错,就能正常监控:

  1. container_name 还是 danmu-api
  2. /var/run/docker.sock:/var/run/docker.sock 还保留着

Watchtower 启动

看到 docker compose ps 里容器已经起来,再看日志里有没有下一次检查时间;有的话就说明 Watchtower 已经正常工作。


手动更新

# 回到主服务目录
cd ~/danmu-api

# 拉取最新镜像
docker compose pull

# 重新启动
docker compose up -d

常见问题

浏览器打不开

先检查这两个地方有没有放行 9321

  • 服务器自己的防火墙
  • 云厂商安全组

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

sudo ufw allow 9321/tcp

docker compose 提示找不到命令

说明 Docker Compose 插件没有装好,回到第 3 步重新执行你选的那组安装命令即可。

Watchtower 没启动

如果是单独目录部署的,就按这个顺序检查:

  1. ~/danmu-api-watchtower/docker-compose.yml 里是不是写的 image: nickfedor/watchtower
  2. /var/run/docker.sock:/var/run/docker.sock 有没有保留
  3. 日志里有没有正常看到下一次检查时间

一键安装脚本

社区提供的一键安装脚本:

bash <(curl -fsSL https://raw.githubusercontent.com/dukiii1928/danmu-install/refs/heads/main/install.sh)

下一步