Docker部署Janus WebRTC Server:极简流程
【免费下载链接】janus-gateway Janus WebRTC Server 项目地址: https://gitcode.com/GitHub_Trending/ja/janus-gateway
1. 引言:WebRTC服务器部署的痛点与解决方案
你是否还在为Janus WebRTC Server的复杂依赖和编译流程而烦恼?面对GLib、libnice、libsrtp等十几项依赖,以及繁琐的配置过程,即使是资深开发者也常常望而却步。本文将带你通过Docker容器化技术,以极简方式完成Janus服务器的部署,全程仅需5个步骤,让你专注于业务逻辑而非环境配置。
读完本文你将获得:
- 一份可直接使用的Dockerfile配置
- 完整的容器化部署脚本
- 优化的Janus配置模板
- 多场景启动参数说明
- 常见问题排查指南
2. 环境准备:Docker与Docker Compose安装
2.1 Docker安装(Linux环境)
# 安装Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 启动Docker服务
systemctl start docker && systemctl enable docker
# 验证安装
docker --version # 应输出Docker version 20.10+
2.2 Docker Compose安装
# 下载最新版Docker Compose
curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version # 应输出docker-compose version v2.12.2+
3. 构建Janus Docker镜像
3.1 创建Dockerfile
在项目根目录创建Dockerfile:
# 基础镜像选择Ubuntu 20.04 LTS
FROM ubuntu:20.04 AS builder
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libmicrohttpd-dev \
jansson-dev \
libssl-dev \
libsrtp2-dev \
libsofia-sip-ua-dev \
libglib2.0-dev \
libopus-dev \
libogg-dev \
libcurl4-openssl-dev \
liblua5.3-dev \
libconfig-dev \
pkg-config \
libtool \
automake \
git \
cmake \
wget \
&& rm -rf /var/lib/apt/lists/*
# 编译安装libnice(最新稳定版)
RUN git clone https://gitlab.freedesktop.org/libnice/libnice.git \
&& cd libnice \
&& meson --prefix=/usr build && ninja -C build && ninja -C build install
# 编译安装libwebsockets(支持WebSocket传输)
RUN git clone https://github.com/warmcat/libwebsockets.git \
&& cd libwebsockets \
&& git checkout v4.3-stable \
&& mkdir build && cd build \
&& cmake -DLWS_MAX_SMP=1 -DLWS_WITHOUT_EXTENSIONS=0 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" .. \
&& make && make install
# 克隆Janus源码
WORKDIR /usr/src
RUN git clone https://gitcode.com/GitHub_Trending/ja/janus-gateway.git \
&& cd janus-gateway \
&& sh autogen.sh
# 配置编译选项
WORKDIR /usr/src/janus-gateway
RUN ./configure --prefix=/opt/janus \
--enable-websockets \
--enable-rest \
--enable-data-channels \
--enable-post-processing \
--enable-docs=no \
--disable-rabbitmq \
--disable-mqtt
# 编译安装
RUN make -j$(nproc) && make install && make configs
# 精简镜像
FROM ubuntu:20.04
# 安装运行时依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
libmicrohttpd12 \
libjansson4 \
libssl1.1 \
libsrtp2-1 \
libsofia-sip-ua0 \
libglib2.0-0 \
libopus0 \
libogg0 \
libcurl4 \
libconfig9 \
libwebsockets15 \
&& rm -rf /var/lib/apt/lists/*
# 复制编译产物
COPY --from=builder /opt/janus /opt/janus
COPY --from=builder /usr/lib/x86_64-linux-gnu/libnice.so* /usr/lib/x86_64-linux-gnu/
# 创建配置目录并设置权限
RUN mkdir -p /opt/janus/logs /opt/janus/recordings /opt/janus/conf \
&& chmod -R 777 /opt/janus/logs /opt/janus/recordings
# 暴露端口
EXPOSE 8088 8188 8089 10000-10200/udp
# 启动脚本
COPY ./docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
3.2 创建启动脚本docker-entrypoint.sh
#!/bin/bash
set -e
# 配置文件处理
if [ ! -f "/opt/janus/conf/janus.jcfg" ]; then
cp /opt/janus/etc/janus/*.jcfg.sample /opt/janus/conf/
# 修改默认配置以适应容器环境
sed -i 's/^general: {/general: {\n nat_1_1 = "'"${NAT_1_1}"'"/' /opt/janus/conf/janus.jcfg
sed -i 's/^stun_server = "stun.l.google.com"/stun_server = "stun.aliyun.com"/' /opt/janus/conf/janus.jcfg
sed -i 's/^stun_port = 19302/stun_port = 3478/' /opt/janus/conf/janus.jcfg
fi
# 启动Janus
exec /opt/janus/bin/janus \
--configs-folder=/opt/janus/conf \
--log-file=/opt/janus/logs/janus.log \
--debug-level=${DEBUG_LEVEL:-4} \
"$@"
3.3 构建镜像
docker build -t janus-gateway:latest .
4. 配置与启动:多场景部署方案
4.1 创建docker-compose.yml
version: '3.8'
services:
janus:
image: janus-gateway:latest
container_name: janus
restart: always
ports:
- "8088:8088" # HTTP API
- "8188:8188" # WebSocket API
- "8089:8089" # HTTPS API (如需启用需添加证书)
- "10000-10200:10000-10200/udp" # Media ports
environment:
- NAT_1_1=192.168.1.100 # 替换为你的公网IP
- DEBUG_LEVEL=4
volumes:
- ./janus-conf:/opt/janus/conf
- ./janus-logs:/opt/janus/logs
- ./janus-recordings:/opt/janus/recordings
network_mode: "host" # 推荐使用host网络以避免NAT问题
4.2 基础启动命令
# 简单启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
4.3 自定义配置启动
# 创建自定义配置目录
mkdir -p ./janus-conf ./janus-logs ./janus-recordings
# 复制默认配置
docker run --rm janus-gateway:latest cat /opt/janus/etc/janus/janus.jcfg.sample > ./janus-conf/janus.jcfg
# 编辑配置文件(按需修改)
vi ./janus-conf/janus.jcfg
# 使用自定义配置启动
docker-compose up -d
4.4 生产环境启动参数
# 高安全性启动(启用API密钥)
docker run -d --name janus \
--network=host \
-v ./janus-conf:/opt/janus/conf \
-v ./janus-logs:/opt/janus/logs \
-e NAT_1_1=203.0.113.10 \
janus-gateway:latest \
--apisecret=your_secure_api_key \
--token-auth \
--disable-stdout \
--log-file=/opt/janus/logs/janus.log
5. 验证部署:功能测试与状态检查
5.1 服务状态检查
# 检查Janus进程状态
docker exec -it janus ps aux | grep janus
# 检查端口监听
netstat -tulpn | grep janus
5.2 自带演示页面验证
- 复制演示文件到Web服务器:
docker cp janus:/opt/janus/share/janus/demos /var/www/html/
-
访问演示页面:
http://服务器IP/demos/index.html -
选择"Echo Test"演示,点击"Start"测试音视频流
5.3 API接口验证
# 检查API状态
curl http://localhost:8088/janus/info
预期输出:
{
"janus": "server_info",
"version": "1.1.4",
"plugins": [
"janus.plugin.echotest",
"janus.plugin.videoroom",
"janus.plugin.audiobridge",
...
],
"transports": ["janus.transport.http", "janus.transport.websockets"],
...
}
6. 性能优化:容器化环境调优
6.1 资源限制配置
在docker-compose.yml中添加:
services:
janus:
...
deploy:
resources:
limits:
cpus: '4'
memory: 4G
reservations:
cpus: '2'
memory: 2G
6.2 网络优化
services:
janus:
...
sysctls:
- net.core.rmem_max=26214400
- net.core.wmem_max=26214400
- net.ipv4.udp_mem=8388608 8388608 8388608
6.3 日志轮转配置
创建/etc/logrotate.d/janus:
/路径/to/janus-logs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 root root
}
7. 常见问题排查
7.1 媒体流无法建立
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| ICE连接超时 | STUN服务器不可用 | 更换为国内STUN服务器(如stun.aliyun.com:3478) |
| 仅音频无视频 | 视频端口被防火墙阻止 | 确保UDP 10000-10200端口开放 |
| 连接中断频繁 | NAT穿透失败 | 配置nat_1_1参数为服务器公网IP |
| 音视频不同步 | 系统时间不同步 | 容器内安装ntpd服务同步时间 |
7.2 API访问问题
# 检查CORS配置
grep -r "cors" /opt/janus/conf/janus.transport.http.jcfg
# 应输出类似配置:
# cors_origins = ["*"] # 生产环境应限制具体域名
7.3 资源占用过高
# 查看容器资源占用
docker stats janus
# 调整日志级别降低IO
docker-compose down
vi docker-compose.yml # 设置DEBUG_LEVEL=2
docker-compose up -d
8. 总结与展望
通过Docker容器化技术,我们成功简化了Janus WebRTC Server的部署流程,解决了传统部署方式中的依赖冲突、环境配置复杂等痛点。本文提供的Dockerfile和配置模板支持从开发测试到生产环境的全流程应用,同时通过优化参数和安全配置,确保了服务的稳定性和安全性。
未来展望:
- 集成Prometheus监控指标
- 实现自动扩展的Kubernetes部署
- 构建WebRTC媒体服务器集群方案
- 开发配置管理Web界面
希望本文能帮助你快速部署Janus服务器,如果你有任何问题或优化建议,欢迎在评论区留言讨论。
点赞+收藏+关注,获取更多WebRTC实战教程!下期预告:《Janus视频会议室插件深度定制指南》
【免费下载链接】janus-gateway Janus WebRTC Server 项目地址: https://gitcode.com/GitHub_Trending/ja/janus-gateway
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



