news 2026/2/23 19:14:39

Docker 部署 OpenVidu

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 部署 OpenVidu

官方地址:https://docs.openvidu.io/en/2.32.0/

Docker 部署 OpenVidu

Docker 方式

dockerrun -p4443:4443 --rm -eOPENVIDU_SECRET=MY_SECRET openvidu/openvidu-server-kms:2.32.1

一、快速部署(最简单的方式)

  1. 使用官方部署脚本
# 下载部署脚本wgethttps://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_latest.sh

运行部署

sudo bash install_openvidu_latest.sh
  1. Docker Compose 方式
    docker-compose.yml:
version:'3.1'services:openvidu-server:image:openvidu/openvidu-server:2.28.0container_name:openvidu-serverrestart:unless-stoppednetwork_mode:hostvolumes:-/var/run/docker.sock:/var/run/docker.sock-./certificates:/opt/openvidu/certificates-./recordings:/opt/openvidu/recordingsenvironment:-OPENVIDU_SECRET=${OPENVIDU_SECRET}-DOMAIN_OR_PUBLIC_IP=${DOMAIN_OR_PUBLIC_IP}-CERTIFICATE_TYPE=${CERTIFICATE_TYPE}-LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}-HTTP_PORT=5443-KMS_URIS=[\"ws://${DOMAIN_OR_PUBLIC_IP}:8888/kurento\"]logging:driver:"json-file"options:max-size:"10m"max-file:"3"kurento:image:kurento/kurento-media-server:latestcontainer_name:kurentorestart:unless-stoppednetwork_mode:hostulimits:core:-1environment:-KMS_MIN_PORT=40000-KMS_MAX_PORT=57000-GST_DEBUG=Kurento*:4volumes:-/opt/openvidu/kurento:/opt/kurento

二、详细部署步骤
步骤 1:创建部署目录

# 创建工作目录mkdiropenvidu-dockercdopenvidu-docker

下载官方配置文件

curl -o docker-compose.yml https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-server/docker/openvidu-docker-compose.yml curl -o .env https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-server/docker/.env

步骤 2:配置环境变量

# 编辑 .env 文件vi.env .env 配置示例:
# OpenVidu 配置 OPENVIDU_SECRET=MY_SECRET # 改为强密码 DOMAIN_OR_PUBLIC_IP=your-domain.com # 或服务器公网IP
# SSL 证书配置 CERTIFICATE_TYPE=letsencrypt # 或 selfsigned LETSENCRYPT_EMAIL=admin@your-domain.com
# 端口配置 HTTP_PORT=5443 HTTPS_PORT=5443 KMS_URIS=["ws://your-domain.com:8888/kurento"]
# 录制配置 OPENVIDU_RECORDING=true OPENVIDU_RECORDING_PATH=/opt/openvidu/recordings OPENVIDU_RECORDING_PUBLIC_ACCESS=false
# CDR 配置 OPENVIDU_CDR=true OPENVIDU_CDR_PATH=/opt/openvidu/cdr

步骤 3:启动 OpenVidu

# 启动服务docker-composeup -d# 查看日志docker-composelogs -f

查看运行状态

docker-compose ps
三、生产环境部署

  1. 使用 Docker Swarm
# 初始化 Swarmdockerswarm init

部署 Stack

docker stack deploy -c docker-compose.yml openvidu
  1. 多节点部署配置
# docker-compose.cluster.ymlversion:'3.8'services:openvidu-server:image:openvidu/openvidu-server:2.28.0deploy:replicas:3placement:constraints:-node.role == managernetworks:-openvidu_netenvironment:-OPENVIDU_SECRET=${OPENVIDU_SECRET}-DOMAIN_OR_PUBLIC_IP=${DOMAIN_OR_PUBLIC_IP}-KMS_URIS=["ws://kurento:8888/kurento"]kurento:image:kurento/kurento-media-server:latestdeploy:replicas:2networks:-openvidu_netenvironment:-KMS_MIN_PORT=40000-KMS_MAX_PORT=57000networks:openvidu_net:driver:overlay

四、Nginx 反向代理配置

# /etc/nginx/conf.d/openvidu.conf upstream openvidu { server 127.0.0.1:5443; } server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your-domain.com; # SSL 配置 ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; # WebSocket 支持 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; location / { proxy_pass https://openvidu; proxy_read_timeout 90; proxy_buffering off; } location /openvidu/live { proxy_pass https://openvidu; proxy_read_timeout 90; proxy_buffering off; } }

五、与 SpringBoot 集成

  1. 添加依赖
<dependency><groupId>io.openvidu</groupId><artifactId>openvidu-java-client</artifactId><version>2.31.1</version></dependency>
  1. SpringBoot 配置
@ConfigurationpublicclassOpenViduConfig{@Value("${openvidu.url}")privateStringOPENVIDU_URL;@Value("${openvidu.secret}")privateStringOPENVIDU_SECRET;@BeanpublicOpenViduopenVidu(){returnnewOpenVidu(OPENVIDU_URL,OPENVIDU_SECRET);}}
  1. 创建会话服务
@Service public class VideoCallService { @Autowired private OpenVidu openVidu; public String createSession() throws OpenViduJavaClientException, OpenViduHttpException { SessionProperties properties = new SessionProperties.Builder() .mediaMode(MediaMode.ROUTED) .recordingMode(RecordingMode.ALWAYS) .defaultRecordingProperties(new RecordingProperties.Builder() .outputMode(OutputMode.COMPOSED) .hasVideo(true) .build()) .build(); Session session = openVidu.createSession(properties); return session.getSessionId(); } public String generateToken(String sessionId) throws Exception { Session session = openVidu.getActiveSession(sessionId); if (session == null) { session = openVidu.createSession(); } ConnectionProperties properties = new ConnectionProperties.Builder() .type(ConnectionType.WEBRTC) .role(OpenViduRole.PUBLISHER) .data("user_data") .build(); Connection connection = session.createConnection(properties); return connection.getToken(); } }
  1. 控制器
@RestController @RequestMapping("/api/video") public class VideoCallController { @Autowired private VideoCallService videoCallService; @PostMapping("/sessions") public ResponseEntity<?> createSession() { try { String sessionId = videoCallService.createSession(); return ResponseEntity.ok(Map.of("sessionId", sessionId)); } catch (Exception e) { return ResponseEntity.status(500).body(e.getMessage()); } } @PostMapping("/sessions/{sessionId}/connections") public ResponseEntity<?> createConnection(@PathVariable String sessionId) { try { String token = videoCallService.generateToken(sessionId); return ResponseEntity.ok(Map.of("token", token)); } catch (Exception e) { return ResponseEntity.status(500).body(e.getMessage()); } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 3:53:04

手把手教你构建多代理AI系统:MCP+A2A+LangGraph实战!

引言 在 AI Agent 开发领域&#xff0c;MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;用于标准化工具和资源的访问&#xff0c;让 LLM 能无缝调用外部数据源&#xff1b;A2A&#xff08;Agent2Agent&#xff0c;代理间协议&#xff09;则实现代…

作者头像 李华
网站建设 2026/2/21 2:13:51

Markdown格式撰写技术博客:结合PyTorch实验结果展示

PyTorch-CUDA-v2.7 镜像&#xff1a;重塑深度学习开发效率的实践之路 在当今 AI 研发节奏以“周”甚至“天”为单位迭代的背景下&#xff0c;一个常见的尴尬场景是&#xff1a;团队花了三天时间终于跑通了论文复现代码&#xff0c;结果发现模型训练不起来——不是因为算法有问题…

作者头像 李华
网站建设 2026/2/21 3:11:52

按Token计费的大模型API如何与PyTorch本地训练衔接

按Token计费的大模型API如何与PyTorch本地训练衔接 在AI工程落地的现实中&#xff0c;我们常常面临一个两难&#xff1a;一边是功能强大但按Token计费、长期使用成本高昂的云端大模型API&#xff0c;另一边是需要大量标注数据、训练周期长但推理廉价可控的本地模型。理想的情况…

作者头像 李华
网站建设 2026/2/22 8:17:07

搞定138译码器(12),74hc138、74ls138译码器区别探讨

74hc138译码器和74ls138译码器都是常用的138译码器&#xff0c;对于这两款译码器&#xff0c;不知道大家是否亲自使用过。如果你使用过74hc138译码器和74ls138译码器&#xff0c;那你了解二者之间的区别吗?此外&#xff0c;74hc138译码器和74ls138译码器在现实使用中&#xff…

作者头像 李华