Ubuntu 24.04 安装 Galene 1.2 指南
在 Ubuntu 24.04 从零安装 Galene 1.2.1:Go 1.27.3 源码编译(含国内 GOPROXY 排障)与交叉编译离线部署两方案,systemd 托管、galenectl 初始化、首个会议室实测验证。
Ubuntu 24.04 安装 Galene 1.2 指南
目标:在 Ubuntu 24.04 LTS 服务器上从零安装 Galene 1.2.1 并完成 systemd 托管、TLS、管理工具 galenectl 初始化与第一个会议室验证。全文两种安装方案(本机源码编译 / 交叉编译离线部署)均已在 Ubuntu 24.04.5 LTS 上实测通过。
一、环境信息
- 操作系统:Ubuntu 24.04.5 LTS(Noble Numbat),x86_64
- 组件版本:Galene 1.2.1(2026-09-08 发布,当前 1.2 系列最新修订版)
- 构建工具链:Go 1.27.3 linux/amd64(Galene go.mod 最低要求 Go 1.24.0;Go 安装占用约 283MB 磁盘)
- 安装路径:
/opt/galene/(二进制、static/、data/、groups/、recordings/) - 运行账户:
galene(系统用户,nologin shell) - 服务名:
galene.service(systemd) - 端口:8443/TCP(HTTPS + WebSocket)、1194/TCP+UDP(内置 TURN,可选)
- 管理工具:
galenectl(安装到/usr/local/bin/)
二、前置条件
- 一台 Ubuntu 24.04 服务器(方案 A 需可访问互联网;方案 B 目标机可完全离线)。
- root 或具有 sudo 权限的账户;本文命令均以 root 身份执行。
- 磁盘:Go 工具链约 283MB + Galene 源码与产物约 50MB,建议预留 1GB。
- 防火墙(如启用)需放行:8443/TCP(Web 与信令);1194/TCP+UDP(TURN 中继,服务器有公网 IP 时强烈建议放行)。媒体走 UDP 高端口段,可用
-udp-range收敛(见《Galene 1.2 配置参数详解》)。 - 本文约定演示用管理员账号
admin,密码q1w2e3r4(仅测试环境使用,生产环境务必更换)。
⚠️ 注意:Ubuntu 24.04 官方仓库没有 Galene 软件包,实测
apt-cache policy galene无任何候选版本输出,因此不存在 apt 在线安装方案;同时 Galene 官方只发布源码 tar.gz,不提供预编译二进制,源码编译是唯一安装途径。
三、版本选型说明
| 版本 | 发布日期 | 说明 |
|---|---|---|
| 1.2.1(本文采用) | 2026-09-08 | 1.2 系列最新修订版,修复登录页摄像头/麦克风测试未停止等问题 |
| 1.2 | 2026-09-05 | 递归/全局令牌、管理 API 令牌认证、galenectl update-token、安全加固 |
| 1.1 | 2026-06-21 | 新增 galenectl initial-setup、全局令牌 |
| 1.0 | 2025-08-09 | 升级 Pion v4、WHIP 推流、UDP 多路复用 |
选择建议:直接安装最新修订版 1.2.1。下载地址为 GitHub 源码归档 https://github.com/jech/galene/archive/refs/tags/galene-1.2.1.tar.gz(约 880KB)。
四、本机源码编译安装方案(A:官方推荐)
服务器能联网时首选本方案:在目标机上装 Go → 下载源码 → 编译 → 部署 → systemd 托管。
4.1 方案说明
Galene 是纯 Go 项目(CGO_ENABLED=0 静态编译),编译产物是一个约 13MB、无任何动态库依赖的单二进制,配合源码自带的 static/ 网页目录即可运行。编译一次产出两个程序:galene(服务器主程序)与 galenectl(管理 CLI)。
4.2 安装 Go 1.27.3
从 go.dev 下载官方二进制包并做 sha256 校验(2026-10-25 实测,完整校验值见下方命令):
cd /tmp
wget https://go.dev/dl/go1.27.3.linux-amd64.tar.gz
echo "65efbc80fdc1fa2cd2631cad5b481777a68e8725f34e89f50fc6ac714e379b40 go1.27.3.linux-amd64.tar.gz" | sha256sum -c -
go1.27.3.linux-amd64.tar.gz: OK
解压到 /usr/local 并配置 PATH:
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.27.3.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' > /etc/profile.d/go.sh
source /etc/profile.d/go
go version
go version go1.27.3 linux/amd64
⚠️ 注意:国内网络访问 go.dev 不稳定时,可改用镜像站
https://golang.google.cn/dl/go1.27.3.linux-amd64.tar.gz,文件名与校验值一致。
4.3 下载 Galene 1.2.1 源码
cd /tmp
wget https://github.com/jech/galene/archive/refs/tags/galene-1.2.1.tar.gz
tar xzf galene-1.2.1.tar.gz
ls -d galene-galene-1.2.1
galene-galene-1.2.1
4.4 编译 galene 与 galenectl
# 国内网络必须先配置 Go 模块代理,否则拉取依赖会超时(实测 proxy.golang.org 不可达)
go env -w GOPROXY=https://goproxy.cn,direct
cd /tmp/galene-galene-1.2.1
CGO_ENABLED=0 go build -ldflags='-s -w' # 编译主程序(成功无输出)
cd galenectl && CGO_ENABLED=0 go build -ldflags='-s -w' # 编译管理工具
ls -la galenectl
构建成功后 galenectl 目录下出现 galenectl 二进制,源码根目录下出现 galene 二进制(约 13MB)。验证 Go 代理配置已生效:
go env GOPROXY
https://goproxy.cn,direct
4.5 部署到 /opt/galene
创建专用系统用户,拷贝二进制与网页目录,建立数据目录:
useradd -r -d /opt/galene -s /usr/sbin/nologin galene || true
mkdir -p /opt/galene
cd /tmp/galene-galene-1.2.1
cp galene /opt/galene/
cp -r static /opt/galene/
mkdir -p /opt/galene/data /opt/galene/groups /opt/galene/recordings
cp galenectl/galenectl /usr/local/bin/
chown -R galene:galene /opt/galene
ls -la /opt/galene/
total 13104
drwxr-xr-x 6 galene galene 4096 Oct 25 07:28 .
drwxr-xr-x 1 root root 4096 Oct 25 07:28 .
drwxr-xr-x 3 galene galene 4096 Oct 25 07:29 data
-rwxr-xr-x 1 galene galene 13389984 Oct 25 07:28 galene
drwxr-xr-x 2 galene galene 4096 Oct 25 07:30 groups
drwxr-xr-x 2 galene galene 4096 Oct 25 07:28 recordings
drwxr-xr-x 4 galene galene 4096 Oct 25 07:28 static
各目录用途:data/ 存全局配置与令牌,groups/ 存会议室定义(JSON),recordings/ 存会议录制文件,static/ 是内置 Web 客户端。
4.6 TLS 证书
Galene 默认以 HTTPS 运行。未提供证书时,启动后自动生成自签名证书(仅测试可用,浏览器会提示不受信任)。已有正式证书时(如 Let's Encrypt),放置到以下路径即可,无需改配置:
cp /etc/letsencrypt/live/galene.example.org/fullchain.pem /opt/galene/data/cert.pem
cp /etc/letsencrypt/live/galene.example.org/privkey.pem /opt/galene/data/key.pem
chown galene:galene /opt/galene/data/*.pem && chmod go-rw /opt/galene/data/key.pem
本文实测环境使用自动生成的自签名证书,因此管理命令需加 -insecure(见 4.8)。
4.7 systemd 托管
创建 /etc/systemd/system/galene.service(以下为实测在用配置):
[Unit]
Description=Galene videoconferencing server
After=network.target
[Service]
Type=simple
User=galene
Group=galene
WorkingDirectory=/opt/galene
ExecStart=/opt/galene/galene
LimitNOFILE=65536
Restart=on-failure
[Install]
WantedBy=multi-user.target
LimitNOFILE=65536 是官方建议:每场会议的媒体连接会消耗较多文件描述符。加载并启动:
systemctl daemon-reload
systemctl enable galene
systemctl start galene
systemctl is-active galene
active
查看完整状态(实测回显):
systemctl status galene --no-pager
● galene.service - Galene videoconferencing server
Loaded: loaded (/etc/systemd/system/galene.service; enabled; preset: enabled)
Active: active (running) since Sun 2026-10-25 07:28:28 UTC; 13min ago
Main PID: 3410 (galene)
Tasks: 11 (limit: 3612)
Memory: 6.7M (peak: 8.6M)
CPU: 4.728s
注意内存一项:空载常驻内存仅约 6.7MB。确认监听端口:
ss -ltnp | grep 8443
LISTEN 0 4096 *:8443 *:* users:(("galene",pid=3410,fd=6))
⚠️ 注意:若服务器位于 NAT 之后(无公网 IP),日志会出现
TURN: no public addresses与Relay test failed: i/o timeout,表示内置 TURN 无法工作——Web 页面仍可访问,但跨网段媒体可能不通。解决办法见「八、常见问题」Q3。
4.8 初始化 galenectl 并创建管理员
galenectl 通过管理 API 操作服务器,首次使用先执行 initial-setup:在本地生成 ~/.config/galene/galenectl.json(连接参数),并把服务器端管理员写入 /opt/galene/data/config.json:
cd /opt/galene/data
galenectl -insecure -server https://localhost:8443 -admin-username admin -admin-password q1w2e3r4 initial-setup
该命令无输出即成功。生成的两个文件实测内容如下——
/root/.config/galene/galenectl.json(galenectl 客户端配置):
{
"server": "https://localhost:8443",
"admin-username": "admin",
"admin-password": "q1w2e3r4"
}
/opt/galene/data/config.json(服务器全局配置,密码已 bcrypt 哈希):
{
"writableGroups": true,
"users": {
"admin": {
"password": {
"type": "bcrypt",
"key": "$2a$12$BaXbi3neOCI89tHJdmZVCOxxmePW12.ApiWaIp342cd36fYDuSPX2"
},
"permissions": "admin"
}
}
}
⚠️ 注意:
writableGroups: true表示允许通过 API/galenectl 修改会议室定义;若只读管理请改为false。自签名证书环境下后续每条 galenectl 命令都要带-insecure(否则报x509: certificate is not valid for any names,见 FAQ Q2)。
4.9 创建第一个会议室并验证
创建会议室 city-watch、主持人 admin、普通用户 fred,并设置密码:
galenectl -insecure create-group -group city-watch
galenectl -insecure create-user -group city-watch -user admin -permissions op
galenectl -insecure set-password -group city-watch -user admin -password q1w2e3r4
galenectl -insecure create-user -group city-watch -user fred
galenectl -insecure set-password -group city-watch -user fred -password q1w2e3r4
galenectl -insecure list-groups
city-watch
galenectl -insecure list-users -l -group city-watch
admin op
fred present
最终验证 Web 访问(首页与会议室页均返回 200):
curl -sk -o /dev/null -w '%{http_code}\n' https://localhost:8443/
curl -sk -o /dev/null -w '%{http_code}\n' https://localhost:8443/group/city-watch/
200
200
浏览器访问 https://<服务器地址>:8443/group/city-watch/,用 admin / q1w2e3r4 登录即可开始会议。galenectl 全部子命令与参数详见《Galene 1.2 常用 CLI 命令与工具详解》。
五、交叉编译离线部署方案(B:目标机离线/无 Go)
5.1 方案说明
目标服务器无法联网或不便安装 Go 时,在任意一台能联网的构建机(可为其他发行版)上交叉编译,再把产物拷贝到目标机部署。Galene 静态编译、无 CGO,交叉编译产物与原生编译完全等价。
5.2 构建机上交叉编译
构建机装好 Go 并配置代理后(同 4.2、4.4),指定目标平台编译。以「构建机为 x86_64、目标机同为 x86_64」为例(其实无需交叉参数,显式写出以便替换);目标机为 ARM64(如树莓派、ARM 服务器)时改用 GOARCH=arm64:
cd /tmp/galene-galene-1.2.1
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags='-s -w'
cd galenectl && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags='-s -w'
5.3 拷贝产物到目标机
cd /tmp/galene-galene-1.2.1
rsync -a galene static galenectl/galenectl galene@<目标机地址>:/tmp/galene-pkg/
在目标机上完成部署(与方案 A 的目录布局一致):
useradd -r -d /opt/galene -s /usr/sbin/nologin galene || true
mkdir -p /opt/galene/data /opt/galene/groups /opt/galene/recordings
cp /tmp/galene-pkg/galene /opt/galene/
cp -r /tmp/galene-pkg/static /opt/galene/
cp /tmp/galene-pkg/galenectl /usr/local/bin/
chown -R galene:galene /opt/galene
随后的 systemd 托管(4.7)、galenectl 初始化(4.8)、建组验证(4.9)与方案 A 完全相同,按原样执行即可。
六、方案对比与选择建议
| 维度 | 方案 A:本机编译 | 方案 B:交叉编译离线部署 |
|---|---|---|
| 目标机联网 | 需要 | 不需要 |
| 目标机安装 Go | 需要(约 283MB) | 不需要 |
| 目标机安装命令复杂度 | 全在目标机完成 | 目标机仅拷贝文件 |
| systemd 服务名 | galene.service | galene.service(相同) |
| 监听端口 | 8443、1194(相同) | 8443、1194(相同) |
| 适用场景 | 服务器可联网的常规安装 | 内网隔离、批量下发、精简系统 |
选择建议:可联网的生产服务器直接选方案 A;内网/气隙环境或需统一分发的场景选方案 B,在构建机产出 galene + galenectl + static/ 三件套后打包分发。
七、配置说明
安装完成后日常涉及的配置项(完整参数逐项详解见《Galene 1.2 配置参数详解》):
- 全局配置
/opt/galene/data/config.json:管理员账号(users)、是否允许 API 写会议室(writableGroups)、跨域来源(allowOrigin/allowAdminOrigin)、反向代理地址(proxyURL)、规范主机名(canonicalHost)。修改后无需重启,实时生效。 - 会议室配置
/opt/galene/groups/<组名>.json:显示名、是否公开(public)、人数上限(max-clients)、用户与权限等。可用 galenectl 管理,也可直接编辑,实时生效。 - TLS 证书:
/opt/galene/data/cert.pem与key.pem,缺失时自动生成自签名证书。 - 外部 TURN:服务器在 NAT 之后时,在
/opt/galene/data/ice-servers.json中配置外部 TURN/STUN。 - 常用启动参数:
-http :8443(Web 地址)、-turn :1194(内置 TURN,默认auto)、-udp-range(收敛媒体 UDP 端口范围)、-insecure(以纯 HTTP 运行,仅用于反向代理之后)。写入 systemd 单元ExecStart即可。 - 防火墙放行(如启用 ufw):
ufw allow 8443/tcp、ufw allow 1194/tcp、ufw allow 1194/udp。
八、常见问题(FAQ)
Q1:go build 卡在拉取依赖或超时失败?
国内网络访问默认代理 proxy.golang.org 不通(实测复现)。执行 go env -w GOPROXY=https://goproxy.cn,direct 后重新 go build 即可,本文全部实验均在该配置下完成。
Q2:galenectl list-groups 报 x509: certificate is not valid for any names?
实测报错原文:
2026/10/25 07:42:32 Get groups: Get "https://localhost:8443/galene-api/v0/.groups/": tls: failed to verify certificate: x509: certificate is not valid for any names, but wanted to match localhost
原因是服务器使用自签名证书。临时方案:每条 galenectl 命令加 -insecure;正式方案:按 4.6 部署受信任证书,并让 -server 地址与证书 CN/SAN 一致。
Q3:日志出现 TURN: no public addresses、Relay test failed: i/o timeout?
实测日志:
2026/10/25 07:28:28 TURN: no public addresses
2026/10/25 07:28:48 Relay test failed: i/o timeout
2026/10/25 07:28:48 Perhaps you didn't configure a TURN server?
表示内置 TURN 未获得公网地址(服务器在 NAT 后)或 1194 端口未放行。服务器有公网 IP 时放行 1194/TCP+UDP 即可;NAT 环境需在公网另设 TURN(如 coturn),并在 /opt/galene/data/ice-servers.json 配置后重启服务。仅影响跨网媒体连通性,不影响 Web 页面访问。
Q4:浏览器提示证书不受信任?
自签名证书的预期行为,点击继续即可。生产环境部署受信任证书后消失(见 4.6)。
Q5:如何升级 Galene?
重新下载新版本源码编译得到新二进制,然后 systemctl stop galene → 覆盖 /opt/galene/galene 与 static/ → systemctl start galene。data/ 与 groups/ 保留即完成数据延续;降级同理回滚二进制。多版本并存可用 /opt/galene-<版本>/ 分目录加 systemd WorkingDirectory/ExecStart 指向切换。
九、卸载与清理
systemctl stop galene
systemctl disable galene
rm /etc/systemd/system/galene.service && systemctl daemon-reload
rm -rf /opt/galene /usr/local/bin/galenectl
userdel galene
# 如不再需要 Go(方案 A):rm -rf /usr/local/go /etc/profile.d/go.sh
十、参考链接
- Galene 官网安装说明:https://galene.org(源码内
galene-install.md) - 源码仓库与发布:https://github.com/jech/galene/releases
- Go 官方下载页:https://go.dev/dl/;国内镜像:https://golang.google.cn/dl/
- 站内文档:《Galene 1.2 介绍与选型指南》https://www.quzuo.net/document/OS394POo9wtA