当前位置: 首页 > news >正文

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()); } } }
http://www.jsqmd.com/news/160191/

相关文章:

  • 2025年北京房屋买卖合同纠纷律师事务所TOP5推荐 - mypinpai
  • 2025年重庆三角洲升级陪玩服务商推荐榜:重庆哈基桃文化传媒,三角洲陪练俱乐部/三角洲陪玩/三角洲陪练升级/三角洲行动陪玩/三角洲陪玩俱乐部服务商精选 - 品牌推荐官
  • 谷歌新架构逆天!为了让AI拥有长期记忆,豆包们都想了哪些招数?
  • PyTorch官方发布v2.7更新亮点及对CUDA的支持改进
  • Java工程师转型大模型开发指南:结合现有技术优势,实现AI落地的关键步骤!
  • 宋式美学家具供应企业哪家专业、宋式美学家具厂家哪家好? - 工业品网
  • PyTorch 2.7新增功能preview:编译模式加速推理
  • 2025年阻火模块厂家哪家好排行榜,优质阻火模块制造厂推荐测评 - myqiye
  • Ooder A2UI框架开源首发:构建企业级应用的全新选择
  • 2025年个性化全屋定制生产企业推荐,全屋定制生产厂哪家专业全解析 - 工业品牌热点
  • 高杆路灯哪些品牌口碑好、哪家产品耐用性强? - 工业设备
  • 2025年北方地区新中式家具品牌口碑排名:库岸新中式家具好不好 - 工业品网
  • 2025太阳能路灯加工厂技术与价格TOP5权威推荐:甄选高性价比供应商破解选型难题 - 工业推荐榜
  • 优质论文搜索网站推荐与使用指南:高效查找学术资源的实用工具
  • 2026重庆儿童心理咨询哪家医院好?青少年心理疏导机构医院推荐+孩子心理问题就医挂号指南 - 品牌2026
  • 机器学习——实现、挑战、局限性及现实案例
  • 简单理解:为什么错误计数器一般要选 uint32_t 类型?
  • 【开题答辩全过程】以 基于微信小程序的个人健康管理系统为例,包含答辩的问题和答案
  • 將Python編譯成機器碼並在1秒內啟動:自訂編譯器與鏈接器的挑戰
  • 智谱大模型刷屏技术圈:GLM-4.7 是怎么一步步“能干活”的?
  • 2025年高杆路灯源头厂家年度排名:高杆路灯生产厂哪家更值得选? - mypinpai
  • 软件测试常见面试题合集(内附详细答案)
  • 【C语言实战经验5】Bug到底怎么产生的?编码小技巧
  • 惊了!ooder-org藏提示词彩蛋|AI驱动工程典范,1小时焕新DSM全靠A2UI
  • Git提交规范与PyTorch实验代码版本控制最佳实践
  • mstsc.exe文件丢失找不到损坏 打不开远程问题 下载方法
  • CNN分类准确率提升策略:数据增强+PyTorch实现
  • 【开题答辩全过程】以 小区物业管理APP为例,包含答辩的问题和答案
  • MSVBVM50.DLL文件丢失损坏找不到 打不开程序问题 下载方法
  • 编写清晰测试文档与报告:软件测试从业者的实战指南