部署企业级的私域视频会议系统-Jitsi

今天我们来搭建一套开源的视频会议系统 Jitsi,让您拥有自己的私域视频会议系统。

⚠️ 转载请注明出处!

一、Jitsi 介绍

Jitsi 是一款开源的视频会议服务,允许用户通过网络进行实时音视频通话、文本聊天以及屏幕共享等功能。Jitsi Meet 是 Jitsi 项目的一个子项目,专注于提供简单易用的在线会议解决方案,其主要优点包括:

  • 开源免费:Jitsi Meet 完全开源,用户可以免费使用,甚至可以根据自身需求对其进行定制和二次开发。
  • 隐私保护:Jitsi Meet 支持端到端加密,确保用户通话过程的隐私安全。
  • 无需安装客户端:用户只需使用现代浏览器访问 Jitsi Meet 的网址即可加入或创建视频会议,无需下载安装任何客户端软件。
  • 跨平台兼容:Jitsi Meet 支持多种操作系统和设备,包括 Windows、macOS、Linux、Android 和 iOS 等。
  • 高质量音视频:采用先进的音视频编解码技术,保证通话质量清晰稳定。
  • 功能丰富:除了基本的音视频通话功能外,Jitsi Meet 还提供屏幕共享、录制会议、实时字幕、举手等实用功能。
  • 基于 WebRTC:Jitsi Meet 基于 WebRTC,需要加密通信链接(HTTPS)才能保障多媒体功能的正常使用。

源码地址:https://github.com/jitsi/jitsi-meet

二、安装

本教程搭建日期为 2025年10月15日,如果您在实践中遇到任何问题,请邮件联系作者:tangjianbao@gmail.com 或评论区留言。

推荐使用 Jitsi 的 Docker 版本进行安装。

注意:以下命令默认以 root 用户执行,如果使用非 root 用户,请在命令前添加 sudo

2.1、安装 Docker

由于是基于 Docker 安装,因此必须首先安装 Docker。下面以 Ubuntu 24.04 版本为例:

2.1.1、更新 APT 列表及添加 Docker GPG 密钥

1
2
3
4
sudo apt-get update
sudo apt update
# 如果下面的语句第一次执行不成功,请再次或多次执行。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

返回结果:

1
2
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK
1
2
# 如果下面的语句第一次执行不成功,请再次或多次执行。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

2.1.2、安装 Docker 社区版

1
sudo apt-get install docker-ce docker-ce-cli containerd.io -y

2.1.3、设置 Docker 开机自启

启动 Docker 服务并设置为开机自启:

1
2
sudo systemctl enable docker
sudo systemctl start docker

2.1.4、更新 Docker 配置镜像源

在国内使用 Docker 拉取镜像时,可能会遇到网络问题。为了解决这一问题,建议配置国内镜像源以确保快速稳定地下载镜像。

经验之谈:国内网络环境复杂,拉取 Docker 镜像时常会失败。笔者也是在多次尝试后才成功。请直接复制下面的 JSON 内容。如果依然失败,可能是因为部分镜像源已失效,请您自行搜索最新的可用镜像源。

使用 nano /etc/docker/daemon.json 创建并编辑该文件,输入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"default-shm-size": "1G",
"debug": true,
"experimental": false,
"registry-mirrors": [
"https://x9r52uz5.mirror.aliyuncs.com",
"https://dockerhub.icu",
"https://docker.chenby.cn",
"https://docker.1panel.live",
"https://docker.awsl9527.cn",
"https://docker.anyhub.us.kg",
"https://docker.m.daocloud.io",
"https://dhub.kubesre.xyz",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.baidubce.com",
"https://dockerproxy.com",
"https://1i6z9fqv.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com"
]
}

Ctrl+X,然后按 Y,再敲回车保存文件。之后重启 Docker 服务使新的镜像源生效:

1
2
3
4
5
6
7
8
9
# 重新加载配置文件
sudo systemctl daemon-reload

# 重启 Docker
sudo systemctl restart docker

# 检查 Docker 状态
sudo systemctl status docker
# 按 Ctrl + C 退出

2.2、下载 Jitsi Docker 版本

参考官方手册:https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker/

2.2.1、下载最新版本

1
2
3
4
sudo wget $(wget -q -O - https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep zip | cut -d" -f4)

# ls 查看下载的文件,例如 stable-10532-1
ls

2.2.2、解压并重命名

如果系统未安装 unzip,请先执行 apt install unzip -y 进行安装。

1
2
3
4
5
6
7
8
9
10
11
# unzip <下载下来的文件名>
sudo unzip stable-10532-1

# ls 查看解压后的文件夹,例如 jitsi-docker-jitsi-meet-995b0e4
ls

# 将其重命名为 docker-jitsi-meet
sudo mv jitsi-docker-jitsi-meet-995b0e4 docker-jitsi-meet

# 进入目录
cd docker-jitsi-meet/

2.2.3、创建配置文件

在解压后的文件夹 docker-jitsi-meet 中,复制示例配置文件,并命名为 .env。系统将默认读取此文件中的配置参数。

1
cp env.example .env

2.2.4、生成默认密码

修改完配置参数后,运行 gen-passwords.sh 脚本以生成默认密码。

1
./gen-passwords.sh

2.2.5、创建 Jitsi 配置目录

创建用于存储 Jitsi 各组件配置的目录(该目录将作为 Docker 的数据卷)。

1
mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}

2.2.6、启动服务

Jitsi 包含多个服务,需要通过 docker-compose 来统一启动。-d 参数表示以后台模式运行。

1
docker compose up -d

2.2.7、停止服务

1
docker compose down

三、生产环境配置

以上步骤仅完成了基本安装和启动,适用于简单测试。在生产环境中使用,还需考虑安全性、域名、SSL 证书及端口等配置。下面将详细讲解 .env 文件的关键配置,这是系统能否在实际中稳定运行的核心。

Jitsi 支持 SIP 服务接入和 LDAP 服务认证,您可以根据实际需求自行配置。以下配置是作者认为较为重要的部分。

经验之谈:一些云服务商(如阿里云)在您购买域名后会赠送免费证书,但有效期通常只有3个月,到期后需要手动重新申请并替换。本教程采用的是 Let’s Encrypt 的免费证书。在申请证书时,服务器的 80443 端口必须对外开放。申请成功后,可以将端口改回 80008443

使用 nano .env 编辑配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# Directory where all configuration will be stored
# 默认配置文件路径,不建议修改
CONFIG=~/.jitsi-meet-cfg

# Exposed HTTP port (will redirect to HTTPS port)
# 请改为80,默认为8000
HTTP_PORT=80

# Exposed HTTPS port
# 请改为443,默认为8443
HTTPS_PORT=443

# System time zone
# 中国时区请改为 Asia/Shanghai,默认UTC
TZ=Asia/Shanghai

# Public URL for the web service (required)
# 注意:如果使用非标准HTTPS端口,必须在URL中指明,例如 https://meet.tjbai.com:${HTTPS_PORT}
# 设置Web访问地址
PUBLIC_URL=https://meet.tjbai.com:${HTTPS_PORT}

# Media IP addresses and ports to advertise by the JVB
# 此设置已弃用 DOCKER_HOST_ADDRESS,并支持逗号分隔的IP列表
# 更多信息请参阅手册:https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker#running-behind-nat-or-on-a-lan-environment
# 请设置为当前服务器的公网IP地址。如果此项设置不正确,将无法进行音视频通话。
JVB_ADVERTISE_IPS=8.148.220.65

# --- Let's Encrypt 证书配置 ---
# 注意:申请证书时,HTTPS_PORT 必须为 443

# Enable Let's Encrypt certificate generation
# 设置为1表示启用证书申请。申请成功后,建议设置为0以关闭自动申请。
ENABLE_LETSENCRYPT=1

# Domain for which to generate the certificate
# 用于申请证书的域名。在国内,此域名必须已经完成ICP备案,否则云服务商可能会拦截 Let's Encrypt 的验证请求,导致证书申请失败。
LETSENCRYPT_DOMAIN=meet.ai.com

# E-Mail for receiving important account notifications (mandatory)
# 接收重要通知的邮箱,请填写您自己的有效邮箱
LETSENCRYPT_EMAIL=tjb_1216@ai.com

# Use the staging server (for avoiding rate limits while testing)
#LETSENCRYPT_USE_STAGING=1

# Set ACME server. Default is zerossl.
LETSENCRYPT_ACME_SERVER="letsencrypt"

# --- 身份验证配置 ---

# Enable authentication (will ask for login and password to join the meeting)
# 启用身份验证,开启后创建会议需要主持人登录。
ENABLE_AUTH=1

# Enable guest access (if authentication is enabled, this allows for users to be held in lobby until registered user lets them in)
# 允许访客访问。开启后,未登录用户可以进入大厅等待主持人允许后加入。
ENABLE_GUESTS=1

# Select authentication type: internal, jwt, ldap or matrix
# 选择认证方式,此处使用内置认证
AUTH_TYPE=internal

保存并退出文件。然后重启服务使配置生效:

1
2
3
4
5
6
7
8
docker compose down
docker compose up -d

# 或者,启动并同时查看日志
# docker compose up -d && docker compose logs -f

# 查看web服务的日志
docker compose logs web

创建会议主持人用户

ENABLE_AUTH=1 开启后,需要创建主持人用户。

首先,查看 prosody 容器的名称:

1
2
docker compose ps
# 例如,找到类似 docker-jitsi-meet-prosody-1 的容器名

然后,进入该容器:

1
2
# 将 docker-jitsi-meet-prosody-1 替换为你的实际容器名
docker exec -it docker-jitsi-meet-prosody-1 /bin/bash

在容器内执行以下命令添加用户。将 <username><users-assigned-password> 替换为您想设置的用户名和密码。

1
2
3
# prosodyctl --config /config/prosody.cfg.lua register <username> meet.jitsi <users-assigned-password>
# 示例:
prosodyctl --config /config/prosody.cfg.lua register tjbai meet.jitsi tjbaitop123456

四、自定义界面(二次开发)

主要是修改页面标题、Logo 和一些文本信息。

4.1、创建自定义配置文件

~/docker-jitsi-meet 目录下创建 custom-interface_config.js 文件:

1
vim custom-interface_config.js

填入以下 JavaScript 内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// 修改主标题
interfaceConfig.APP_NAME = '星趣会议系统';
interfaceConfig.PROVIDER_NAME = '星趣会议系统';
// 默认欢迎页的Logo
interfaceConfig.DEFAULT_WELCOME_PAGE_LOGO_URL = 'https://www.tjbai.com/static/Home/image/logo.png';
// 左下角水印链接
interfaceConfig.JITSI_WATERMARK_LINK = 'https://www.tjbai.com';
// 修改底部的手机APP下载链接
interfaceConfig.MOBILE_DOWNLOAD_LINK_ANDROID = 'https://www.tjbai.com/upload/JitsiMeet.apk';
interfaceConfig.MOBILE_DOWNLOAD_LINK_F_DROID = 'https://www.tjbai.com/upload/JitsiMeet.apk';

// DOM加载后执行自定义修改
document.addEventListener('DOMContentLoaded', () => {
// 使用函数封装,确保元素加载后执行
const modifyTextContent = () => {
const subtitle = document.querySelector('.header-text-subtitle');
const title = document.querySelector('.header-text-title');
const footerText = document.querySelector('.welcome-footer-row-1-text');
const watermark = document.querySelectorAll('.watermark.leftwatermark.no-margin');

if (subtitle) subtitle.textContent = '安全且高品质的会议';
if (title) title.textContent = '星趣会议系统';
if (footerText) footerText.textContent = '手机版APP – 下载我们的APP,随时随地开始会议';

if (watermark.length > 1) {
const img = watermark[1];
img.style.width = '140px';
img.style.height = '38px';
}
};

// 立即执行一次
modifyTextContent();

// 设置一个短暂的延时再次执行,以防某些元素是动态加载的
setTimeout(modifyTextContent, 1000);
setTimeout(modifyTextContent, 2000);
});

4.2、修改 docker-compose.yml 文件

编辑 docker-compose.yml 文件,在 web 服务下的 volumes 部分添加以下数据卷映射,将我们刚刚创建的自定义JS文件挂载到容器中。

1
2
3
4
5
6
# ... other web service config ...
volumes:
- ~/.jitsi-meet-cfg/web:/config
# 添加下面这一行,实现自定义界面配置
- ~/docker-jitsi-meet/custom-interface_config.js:/config/custom-interface_config.js:ro
# ... other web service config ...

`docker-compose.yml` 修改示例

4.3、重启服务

1
2
docker compose down
docker compose up -d

至此,一个高效、开源的私域视频会议系统就搭建成功了。

主页效果

会议界面:

会议界面效果

五、总结与经验之谈

  1. IP 地址配置JVB_ADVERTISE_IPS 必须配置为您服务器的公网IP地址。如果此 IP 不正确,用户将无法成功加入会议或进行音视频通话。
  2. Let’s Encrypt 证书:若要使用 Let’s Encrypt 提供的免费证书,必须确保服务器的 443 端口对外开放。如果您的服务器和域名都在国内,请确保域名已完成 ICP 备案,否则云服务商可能会拦截 Let’s Encrypt 的验证请求,导致证书申请失败。
  3. 云服务器端口:在阿里云、腾讯云等云服务器上,请务必在安全组中放行 80443 端口。如果需要集成 SIP 服务,还需开放 SIP 相关的端口。

如果觉得这篇文章对您有用,欢迎打赏支持,你的支持就是我最大的动力!

微信收款码

微信支付

支付宝收款码

支付宝

部署企业级的私域视频会议系统-Jitsi
https://join2017.github.io/2025/11/27/部署企业级的私域视频会议系统-jitsi/
作者
唐建宝
发布于
2025年11月27日
许可协议