在CentOS 7 x64中搭建Mumble语音服务器

本文最后更新于:8 个月前

上篇介绍过在CentOS 7 x64上搭建TeamSpeak 3 服务器的全部流程,详情可以查看以下两篇专栏。

今天我们来看另一款语音通讯服务Mumble。

跟TeamSpeak 3 类似,Mumble是一款支持自行架设的语音通信软件,支持绝大多数操作系统(包括Android和iOS)。它的亮点是在保持高质量通信和加密的情况下,内置优秀的In-game Overlay,实测可以吊打TeamSpeak 3自带的Overwolf。另外的优秀之处在于它是一款开源软件,对同时在线人数并无限制。与之形成对比的是TeamSpeak 3 服务器免费使用的前提是只有一个实例且同时在线人数不超过32人。如果你需要搭建一个语音服务器同时需要多于32人同时在线,那Mumble是一个不错的选择。

准备工作

  • 一个域名指向Mumble所在服务器的IP地址并确保成功解析
  • vim或nano或者其它你喜欢的编辑器

开始安装

以root用户运行,先是下载最新的release(点这里查看最新release),linux服务器版本murmur:

wget https://github.com/mumble-voip/mumble/releases/download/1.3.0/murmur-static_x86-1.3.0.tar.bz2
tar -vxjf ./murmur-static_x86-1.3.0.tar.bz2
sudo mkdir /usr/local/murmur
sudo cp -r ./murmur-static_x86-1.3.0/* /usr/local/murmur/
sudo cp ./murmur-static_x86-1.3.0/murmur.ini /etc/murmur.ini

创建murmur用户和组等内容:

sudo groupadd -r murmur
sudo useradd -r -g murmur -m -d /var/lib/murmur -s /sbin/nologin murmur
sudo mkdir /var/log/murmur
sudo chown murmur:murmur /var/log/murmur
sudo chmod 0770 /var/log/murmur

系统设置

修改murmur.ini中的内容

vim /etc/murmur.ini

murmur.ini中,确保如下内容,其中host对应之前准备好的域名,serverpassword设为空时没有密码:

database=/var/lib/murmur/murmur.sqlite
logfile=/var/log/murmur/murmur.log
pidfile=/var/run/murmur/murmur.pid
...
port=64738
...
uname=murmur
host=mumble.demo.com
serverpassword=demo

创建murmur服务

sudo vim /etc/systemd/system/murmur.service

murmur.service中填入以下内容,保存后退出:

[Unit]
Description=Mumble Server (Murmur)
Requires=network-online.target
After=network-online.target mariadb.service time-sync.target

[Service]
User=murmur
Type=forking
ExecStart=/usr/local/murmur/murmur.x86 -ini /etc/murmur.ini
PIDFile=/var/run/murmur/murmur.pid
ExecReload=/bin/kill -s HUP $MAINPID
RestartSec=15
Restart=always

[Install]
WantedBy=multi-user.target

在很多系统中/var/run 会在重启后被清空。为了在重启后重新生成pid目录,以root权限创建配置文件:

sudo vim /etc/tmpfiles.d/murmur.conf

在这个配置文件中写入:

d /var/run/murmur 775 murmur murmur

保存后退出。

日志轮替

为避免日志文件过多造成的困扰,创建配置文件:

sudo vim/etc/logrotate.d/murmur

写入以下内容,保存后退出:

/var/log/murmur/*log {
    su murmur murmur
    dateext
    rotate 4
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload murmur.service > /dev/null 2>/dev/null || true
    endscript
}

防火墙

此处防火墙设置的端口需要和系统配置文件/etc/murmur.ini里面的端口保持一致。如果你在配置文件中修改了端口,请在以下文件中对端口也进行修改以保持一致。

sudo vim /etc/firewalld/services/murmur.xml

默认端口为64738,写入以下内容,保存后退出:

<?xml version="1.0" encoding="utf-8"?>
<service>
        <short>Murmur</short>
        <description>Mumble Server (Murmur)</description>
        <port protocol="tcp" port="64738" /><!-- Reminder: Update /etc/murmur.ini so that it uses the same ports -->
        <port protocol="udp" port="64738" />
</service>

添加以下规则到防火墙并重载使其生效:

sudo firewall-cmd --permanent --add-service=murmur
sudo firewall-cmd --reload

收尾工作

更新系统使我们刚才的设置生效:

sudo systemd-tmpfiles --create /etc/tmpfiles.d/murmur.conf
sudo systemctl daemon-reload

开机自启动

sudo systemctl enable murmur.service

开始murmur服务:

sudo systemctl start murmur.service

停止murmur服务:

sudo systemctl start murmur.service

停止开机自启动:

sudo systemctl disable murmur.service

服务器管理员

至少成功运行murmur服务一次,然后去log中找到密码,密码是第一次运行时自动生成的:

vim /var/log/murmur/murmur.log

其中<W>2020-03-06 23:53:13.049 1 => Password for 'SuperUser' set to 'PASSWORD'这一条写明了用户名SuperUser的密码是PASSWORD

修改SuperUser密码

/usr/local/murmur/murmur.x86 -ini /etc/murmur.ini -supw Your_Password [srv]

替换其中的Your_Password为你自己的密码即可。

成为管理员

在成功运行了murmur服务,拿到了SuperUser密码后,打开Mumble客户端,完成证书的创建或者导入工作。在Mumble主界面选择服务器–> 连接–> 添加,在弹出的选项卡里填入以下内容:

  • 地址:mumble.demo.com
  • 端口:64738
  • 用户名:你的用户名(这是你在服务器中显示的名字)
  • 别名:你的用户名@mumble.demo.com

填好后点连接

当你连入了服务器后右键单击自己的用户名,选择”注册”并同意。

断开当前连接,然后在服务器选项卡新添加一个服务器,填入以下内容:

在弹出密码框时输入SuperUser的密码。

在服务器列表中右键点击Root频道,选择编辑–>分组

在分组的下拉菜单中选中admin,在左下角的成员下拉菜单中,输入前面在服务器注册的用户名并按回车。

断开当前连接,连接收藏夹里别名为:你的用户名@mumble.demo.com的服务器。

恭喜!你的账号你的用户名现在获得了服务器的管理员权限。