news 2026/4/15 14:45:45

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/4/12 20:17:19

Ooder A2UI框架开源首发:构建企业级应用的全新选择

Ooder框架开源首发&#xff1a;构建企业级应用的全新选择 &#x1f389; 重磅消息&#xff01;Ooder框架正式开源发布&#xff0c;版本号0.5&#xff01; 作为一款专注于企业级应用开发的框架&#xff0c;Ooder以其独特的设计理念和强大的功能&#xff0c;为开发者提供了构建复…

作者头像 李华
网站建设 2026/4/12 21:35:56

通过SSH连接远程服务器运行长时间PyTorch任务

通过SSH连接远程服务器运行长时间PyTorch任务 在深度学习项目中&#xff0c;训练一个大型模型动辄需要数小时甚至数天。你是否经历过这样的场景&#xff1a;本地笔记本风扇狂转、温度飙升&#xff0c;结果刚跑完两个epoch&#xff0c;Wi-Fi断了&#xff0c;SSH终端一黑&#xf…

作者头像 李华
网站建设 2026/3/31 12:38:28

CNN手写数字识别项目在PyTorch镜像中的实现步骤

CNN手写数字识别项目在PyTorch镜像中的实现步骤 在深度学习项目中&#xff0c;最让人头疼的往往不是模型设计本身&#xff0c;而是环境配置——CUDA版本不匹配、cuDNN缺失、PyTorch安装失败……这些问题常常让开发者在真正开始训练前就耗尽耐心。尤其对于刚入门的手写数字识别任…

作者头像 李华