Skip to content

单容器部署 ​

一个 docker run 就把应用跑起来,不搞 compose 那套。

什么时候这样用 ​

  • 只想快速看看长什么样
  • 服务器上已经有 LiveKit 了,只差应用
  • 内网机器,用不着复杂编排

先拉镜像 ​

官方镜像在 GitHub 容器镜像仓库:

bash
docker pull ghcr.io/noelorin/gospeak:1

标签有几种写法:

标签意思
1主版本 1 的最新版(会跟着更新)
1.21.2.x 的最新版
1.2.3精确版本,不会变

生产环境建议用精确版本,免得某次更新把服务搞挂。

镜像有 linux/amd64 和 linux/arm64 两个架构,Docker 会自动选对的。

跑 ​

bash
docker run -d \
  --name gospeak \
  --restart unless-stopped \
  -p 8998:8998 \
  --env-file deploy/.env \
  -v gospeak-db:/app/db \
  -v gospeak-uploads:/app/uploads \
  ghcr.io/noelorin/gospeak:1

打开 http://服务器IP:8998 就是界面。

这几个参数在干什么 ​

参数作用
--restart unless-stopped崩了自动重启,手动停的不重启
--env-file读配置。先 cd deploy && ./init.sh 生成
-v gospeak-db:/app/db数据库落盘,容器删了数据还在
-v gospeak-uploads:/app/uploads上传的文件落盘

两个卷不能省。 不挂卷的话容器一重建数据全没。

不想用 env 文件 ​

直接传环境变量:

bash
docker run -d \
  --name gospeak \
  --restart unless-stopped \
  -p 8998:8998 \
  -e JWT_KEY="$(openssl rand -hex 32)" \
  -e SFU_PROVIDER=livekit \
  -e LIVEKIT_HOST=ws://你的LiveKit地址:7880 \
  -e LIVEKIT_KEY=你的key \
  -e LIVEKIT_SECRET=你的secret \
  -v gospeak-db:/app/db \
  -v gospeak-uploads:/app/uploads \
  ghcr.io/noelorin/gospeak:1

语音怎么办 ​

这个镜像里没有 LiveKit。

LIVEKIT_HOST 必须指向一个容器外面能访问到的 LiveKit:

  • 已经在别的机器上跑着 → 填那台的地址
  • 想在同一台机器上跑 → 另起一个容器:
bash
docker run -d \
  --name livekit \
  --restart unless-stopped \
  -p 7880:7880 \
  -p 7881:7881 \
  -p 7882:7882/udp \
  -p 3478:3478/udp \
  -v $(pwd)/deploy/livekit/livekit.yaml:/etc/livekit.yaml \
  livekit/livekit-server:latest \
  --config /etc/livekit.yaml

然后应用的 LIVEKIT_HOST 填 ws://宿主机IP:7880(不是 localhost——容器里的 localhost 是容器自己)。

嫌麻烦就用 Docker Compose,它把这些都串好了。

自己构建镜像 ​

想改代码或者不用官方镜像:

bash
# 仓库根目录
docker build -t gospeak .

这个 Dockerfile 会在容器里构建前端并打进 Go 二进制,最终镜像只有一个可执行文件。

跑的时候把镜像名换掉:

bash
docker run -d ... gospeak

日常操作 ​

bash
# 看日志
docker logs -f gospeak

# 停 / 起
docker stop gospeak
docker start gospeak

# 进容器看看
docker exec -it gospeak sh

# 升级(数据卷保留)
docker pull ghcr.io/noelorin/gospeak:1
docker rm -f gospeak
# 重新跑一遍上面的 docker run

网络慢拉不下来 ​

国内网络拉 ghcr.io 可能很慢。两个办法:

配镜像加速器

编辑 /etc/docker/daemon.json:

json
{
  "registry-mirrors": ["https://你的加速地址"]
}
bash
sudo systemctl daemon-reload
sudo systemctl restart docker

自己构建

bash
docker build -t gospeak .

只要基础镜像能拉到,这个就能成。

常见问题 ​

容器起来马上退出docker logs gospeak 看原因。常见的是配置缺失(JWT_KEY 为空)或数据库路径没权限。

重启容器后数据没了 没挂卷。加上 -v。

连不上 LiveKit 容器里的 localhost 指容器自己。要用宿主机 IP,或者用 --network host,或者干脆用 compose。

端口 8998 被占 换一个:-p 9000:8998。

怎么改时区

bash
-e TZ=Asia/Shanghai

下一步 ​

基于 Apache 2.0 许可开源