前提:配置 hosts:127.0.0.1 x.com
1、coturn配置文件:
dh-file=/etc/turnserver/dhparam.pem
#relay-device=br-ec1e0521cea7
#“默认3478”
listening-port=3479
#"默认5349"
tls-listening-port=5350
#"监听地址", 在阿里云虚拟机上,listening和 relay-ip 需要注释调
#listening-ip=0.0.0.0
#"转发地址,可以和external地址一样"
#relay-ip=xxx
#“公网IP”
external-ip=xxx
#“连接使用最小端口”
min-port=65436
#"连接是使用最大端口"
max-port=65535
#“使用证书认证(证书认证和静态身份认证不能同时使用)”
lt-cred-mech
#“用户名1:密码1 ,/etc/turnuserdb.conf中的值”
user=root:{password}
#“指定加密算法”
#sha256
#“database文件名,自动上面生成的文件”
#userdb=/etc/turnuserdb.conf
userdb=/var/lib/turn/turndb
sqlite-userdb=/var/lib/turn/turndb
#"禁止CLI,默认运行"
#no-cli
cli-password=自定义密码
#“域,需要与turnadmin创建认证信息时指定的一样”
realm=x.com
#默认情况下,一个会话的唯一临界值,但它一般拥有无限的生命周期。这个选项,临界值 仅限于600秒,之后,客户端将得到438错误,将不得不重新认证
#stale-nonce
#"指定认证文件"
cert=/etc/turn_server_cert.pem
#"指定认证文件"
pkey=/etc/turn_server_pkey.pem
#"安全设置,禁止环回网卡"
#no-loopback-peers
#"安全设置,禁止知名广播地址"
#no-multicast-peers
#"支持mobility"
# 允许所有 IP(仅用于测试,生产环境需要更严格的设置)
allowed-peer-ip=0.0.0.0-255.255.255.255
#允许回环测试
#allow-loopback-peers
verbose
debugging
log-file=/var/log/turn.log
#syslog
2、dockerfile:
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
# 设置时区
ENV TZ=Asia/Shanghai
RUN apt-get update && apt-get install -y \
vim \
wget \
openssl \
libssl-dev \
build-essential \
sqlite3 \
libsqlite3-dev \
libevent-2.1-7 \
libevent-dev \
--no-install-recommends \
coturn \
curl
ENV OPENSSL_CONF=/dev/null
ENV RANDFILE=/dev/null
RUN openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes \
-subj "/C=CN/ST=State/L=City/O=Organization/OU=Unit/CN=example.com" \
>/dev/null 2>&1 # 屏蔽命令执行过程中的提示信息重定向所有输出到 /dev/null
RUN turnadmin -k -u root -r x.com -p pwd 2>/dev/null | head -n 1 > /etc/turnuserdb.conf
RUN mkdir /etc/turnserver
RUN mkdir /etc/coturn
RUN mkdir -p /var/lib/turn && \
chown -R 777 /var/lib/turn
RUN openssl dhparam -out /etc/turnserver/dhparam.pem 2048
RUN chmod 777 /etc/turnserver/dhparam.pem
# 创建并初始化 SQLite 数据库
RUN sqlite3 /var/lib/turn/turndb "CREATE TABLE if not exists turnusers_lt (realm varchar(127), name varchar(512), hmackey char(128));" && \
sqlite3 /var/lib/turn/turndb "CREATE TABLE if not exists turn_secret (value varchar(127));" && \
sqlite3 /var/lib/turn/turndb "CREATE TABLE if not exists allowed_peer_ip (ip_range varchar(256));"
RUN rm -rf /etc/coturn/turnserver.conf
# 复制配置文件
COPY turnserver.conf /etc/coturn/turnserver.conf
# 替换动态密码
# 生成密码并替换配置文件
RUN genPassWord=$(cat /etc/turnuserdb.conf | awk '{print $1}') && \
sed -i "s/{password}/${genPassWord}/g" /etc/coturn/turnserver.conf && \
grep "${genPassWord}" /etc/coturn/turnserver.conf
RUN chmod 777 /etc/turn_server_cert.pem
RUN chmod 777 /etc/turn_server_pkey.pem
RUN chmod 777 /var/log/turn*.log
# 暴露必要端口
EXPOSE 3479/tcp 3479/udp 5350/tcp 5350/udp
EXPOSE 49152-65535/udp
CMD ["turnserver", "-c", "/etc/coturn/turnserver.conf"]
3、启动,停止脚本:
#!/bin/bash
# 如果服务还在 ,需要先停止:
docker stop x_coturn
docker rm x_coturn
docker rmi x_coturn
#切换到 nginx的dockerfile目录
docker build -f dockerfile-coturn -t x_coturn .
# 同时指定多个端口和卷
docker run -d \
--restart unless-stopped \
--name x_coturn \
-v /usr/share/nginx/html:/usr/share/nginx/html \
--network=host x_coturn