Docker 部署 OpenVidu

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

Docker 部署 OpenVidu

Docker 方式

bash 复制代码
docker run -p 4443:4443 --rm -e OPENVIDU_SECRET=MY_SECRET openvidu/openvidu-server-kms:2.32.1

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

  1. 使用官方部署脚本
bash 复制代码
# 下载部署脚本
wget https://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:
yaml 复制代码
version: '3.1'

services:
  openvidu-server:
    image: openvidu/openvidu-server:2.28.0
    container_name: openvidu-server
    restart: unless-stopped
    network_mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./certificates:/opt/openvidu/certificates
      - ./recordings:/opt/openvidu/recordings
    environment:
      - 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:latest
    container_name: kurento
    restart: unless-stopped
    network_mode: host
    ulimits:
      core: -1
    environment:
      - KMS_MIN_PORT=40000
      - KMS_MAX_PORT=57000
      - GST_DEBUG=Kurento*:4
    volumes:
      - /opt/openvidu/kurento:/opt/kurento

二、详细部署步骤

步骤 1:创建部署目录

bash 复制代码
# 创建工作目录
mkdir openvidu-docker
cd openvidu-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:配置环境变量

bash 复制代码
# 编辑 .env 文件
vi .env
.env 配置示例:
properties 复制代码
# 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

bash 复制代码
# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

查看运行状态

docker-compose ps

三、生产环境部署

  1. 使用 Docker Swarm
bash 复制代码
# 初始化 Swarm
docker swarm init

部署 Stack

复制代码
docker stack deploy -c docker-compose.yml openvidu
  1. 多节点部署配置
yaml 复制代码
# docker-compose.cluster.yml
version: '3.8'

services:
  openvidu-server:
    image: openvidu/openvidu-server:2.28.0
    deploy:
      replicas: 3
      placement:
        constraints:
          - node.role == manager
    networks:
      - openvidu_net
    environment:
      - OPENVIDU_SECRET=${OPENVIDU_SECRET}
      - DOMAIN_OR_PUBLIC_IP=${DOMAIN_OR_PUBLIC_IP}
      - KMS_URIS=["ws://kurento:8888/kurento"]
  
  kurento:
    image: kurento/kurento-media-server:latest
    deploy:
      replicas: 2
    networks:
      - openvidu_net
    environment:
      - KMS_MIN_PORT=40000
      - KMS_MAX_PORT=57000

networks:
  openvidu_net:
    driver: overlay

四、Nginx 反向代理配置

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. 添加依赖
xml 复制代码
<dependency>
    <groupId>io.openvidu</groupId>
    <artifactId>openvidu-java-client</artifactId>
    <version>2.31.1</version>
</dependency>
  1. SpringBoot 配置
java 复制代码
@Configuration
public class OpenViduConfig {
    
    @Value("${openvidu.url}")
    private String OPENVIDU_URL;
    
    @Value("${openvidu.secret}")
    private String OPENVIDU_SECRET;
    
    @Bean
    public OpenVidu openVidu() {
        return new OpenVidu(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();
     }

    }

  2. 控制器

    @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());
         }
     }

    }

相关推荐
XIAOHEZIcode7 小时前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220701 天前
如何搭建本地yum源(上)
运维
武子康1 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn864 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_4 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化