当前位置: 首页 > 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.zskr.cn/news/175533.html

相关文章:

  • 华美食品性价比好不好?专业度/规模年度排名,5大烘焙品牌深度测评推荐 - mypinpai
  • PyTorch官方发布v2.7更新亮点及对CUDA的支持改进
  • Java工程师转型大模型开发指南:结合现有技术优势,实现AI落地的关键步骤!
  • 高杆路灯哪些品牌口碑好、哪家产品耐用性强? - 工业设备
  • 2025年北方地区新中式家具品牌口碑排名:库岸新中式家具好不好 - 工业品网
  • 优质论文搜索网站推荐与使用指南:高效查找学术资源的实用工具
  • 简单理解:为什么错误计数器一般要选 uint32_t 类型?
  • 2025年高杆路灯源头厂家年度排名:高杆路灯生产厂哪家更值得选? - mypinpai
  • CNN分类准确率提升策略:数据增强+PyTorch实现
  • 2025本科必看8个降AI率工具测评榜单
  • 全球激光产业加速扩张,十大企业技术实力全面解析
  • PyTorch-CUDA-v2.7镜像支持哪些NVIDIA驱动版本?
  • 选择专业照明厂家的关键考量维度
  • 2025年资质齐全的齐鲁云采入驻专业公司排行榜,靠谱企业推荐 - 工业推荐榜
  • 41-智能算法-量子遗传算法 量子遗传算法将量子的态矢量引入遗传算法,利用量子比特的概率幅应用...
  • 如何在云服务器部署PyTorch-CUDA-v2.7用于大模型推理
  • [G32R] 使用 cmake+vscode 环境移植 ThreadX 到 G32R501
  • 年末如何挑选手机?性能与影像成关键考量
  • 拆解桥博士的“波浪带鱼理论”:如何像过滤器一样提纯交易信号?
  • 2025年维氏硬度计定制厂家权威推荐榜单:布氏硬度计/邵氏硬度计/里氏硬度计/洛氏硬度计/维氏硬度计厂家精选 - 品牌推荐官
  • 2025 MBA必备!10个AI论文平台深度测评与推荐
  • 2025上海燃气加臭剂公司推荐榜:环保型燃气加臭剂/无硫加臭剂/天然气加臭剂/氢能加臭剂/丙烯酸酯无硫加臭剂/不含硫的加臭剂源头服务商精选 - 品牌推荐官
  • 基于51单片机的热水器控制系统
  • 【AI Agent爆发元年】2025年市场规模将达655亿,小白程序员的逆袭之路,错过再等十年!
  • Jupyter Notebook保存检查点功能在PyTorch训练中的应用
  • 2025~2026年进口激光切割自动化厂家哪家品质质量做的好?性价比高品牌推荐 - 品牌推荐大师
  • 开源大模型训练新趋势:结合PyTorch镜像与云端GPU资源
  • AI工程化实战《九》(终章):构建企业级 AI 中台——统一模型、数据、工具与治理
  • 2025年12月北京记账报税公司排名:电商企业合规财税服务首选将心财务 - 品牌智鉴榜
  • Python数据分析利器-Pandas 简介