lala.im:MusicCloud:一个简约的音乐服务器

運維技術·軟件/源碼·lala.im · 2022-12-31 · 110 人浏览

原文地址:https://lala.im/8540.html,請支持原作者!該處僅作轉載。

musiccloud的作者其实在dockerhub提供了一个镜像可以快速部署,但是我发现用这个镜像的话没办法更改设置,镜像没有把appsettings.docker.json配置文件暴露出来,可能有可用的环境变量我不知道?
我猜测用docker要能修改设置的话,大概步骤是先修改好appsettings.docker.json里面的配置,然后用作者项目存储库里面的dockerfile自己构建镜像,但是我没试,因为我后来干脆直接手动安装了。。所以这篇文章记录一下安装过程,以下步骤在debian11上完成。
先安装.netsdk6,这是musiccloud后端的依赖:

apt -y update
apt -y install wget curl
wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
apt -y update
apt -y install dotnet-sdk-6.0

musiccloud后端还需要一个fdkaac来转码文件,这个fdkaac的软件包在debian11的contrib分类中,它的依赖又在non-free分类中,所以需要编辑一下软件源的配置:

apt edit-sources

加上contrib、non-free这两个分类:

deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free

deb http://security.debian.org/debian-security bullseye-security main contrib non-free
deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free

deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye-updates main contrib non-free

然后才能安装到fdkaac:

apt -y update
apt -y install fdkaac

安装ffmpeg,这也是musiccloud后端转码所需要用到的软件:

apt -y install ffmpeg

接下来安装nodejs:

curl -fsSL https://deb.nodesource.com/setup_19.x | bash - &&\
apt -y install nodejs

再用npm全局安装pnpm,这是构建musiccloud前端所需要用到的工具:

npm i -g pnpm

新建一个用户:

useradd -r -s /sbin/nologin -m -d /opt/musiccloud -U musiccloud

登录到这个用户:

su musiccloud -s /bin/bash -l

接下来我们编译musiccloud的前端,克隆项目存储库,进入到项目的根目录内:

git clone https://github.com/lideming/MusicCloud.git
cd MusicCloud

把存储库的版本指定为1068040这个commits,因为我发现用最新的commits无法正常使用,看了下作者的后端也是用的这个commits所以就这样了:

git checkout 10680405be42f6138d26bae7f02747aa5501e100

安装依赖并编译:

pnpm install
pnpm build

完成后在项目的根目录会有一个dist的文件夹,里面就是我们需要用到的前端了。待会我们需要把dist文件夹里面的内容复制到后端配置文件里面指定的路径,这里先不配置。
现在来编译后端,先克隆后端的存储库:

cd ..
git clone https://github.com/lideming/MusicCloudServer.git
cd MusicCloudServer

编译:

dotnet publish -c Release -o out --no-self-contained -r linux-x64

完成之后在项目的根目录内会出现一个out文件夹,里面就是我们编译好的后端了。
现在我们处理一下后端和前端的文件:

mv out/ ../musiccloudbackend
mv ../MusicCloud/dist/ ../musiccloudbackend/webapp

编辑后端的配置文件:

cd ../musiccloudbackend/
nano appsettings.json

指定前端文件的路径:

"staticdir": "webapp",

下面这些配置根据个人需要自行修改:

"AllowRegistration": false,
"NotesEnabled": false,
"DiscussionEnabled": false,

做完这些配置后,现在我们可以尝试运行一下,如果一切正常可以按ctrl+c退出来:

dotnet MCloudServer.dll

新建systemd服务:

systemctl edit --full --force musiccloud.service

写入如下配置:

[Unit]
Description=MusicCloudServer

[Service]
User=musiccloud
Group=musiccloud
Environment=ASPNETCORE_ENVIRONMENT=Production
WorkingDirectory=/opt/musiccloud/musiccloudbackend
ExecStart=/usr/bin/dotnet /opt/musiccloud/musiccloudbackend/MCloudServer.dll
Restart=always
RestartSec=10
KillSignal=SIGINT

[Install]
WantedBy=multi-user.target

启动并设置开机自启:

systemctl enable --now musiccloud.service

配置nginx反向代理:

apt -y install nginx python3-certbot-nginx
nano /etc/nginx/sites-available/musiccloud

写入如下配置:

server {
    listen       80;
    server_name  music.example.com;
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:5000;
        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-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

启用新的nginx配置:

ln -s /etc/nginx/sites-available/musiccloud /etc/nginx/sites-enabled/musiccloud

签发ssl证书:

certbot --nginx

访问你的域名,正常的话就能看到登录界面了,默认的管理员账号密码都是admin:

範例
界面很清爽很简洁,没有什么花里胡哨的东西,就一个上传功能,然后搜索功能,再加一个播放列表,就是整个页面的布局。个人觉得很好用:

範例
也可以看看:
https://github.com/lideming/MusicCloudServer\nhttps://github.com/lideming/MusicCloudServer/blob/dev/Dockerfile\nhttps://github.com/lideming/MusicCloud

運維技術 軟件/源碼 lala.im
Theme Jasmine by Kent Liao