06 配置Zerotier/Samba/Resilio/Navidrome全家桶
- Linux learning
- 2023-11-01
- 38热度
- 0评论
继续实战。为了方便文件的交换以及各种潜在的网络需求,部署Zerotier是首先考虑的。为了实现Zerotier内网穿透后的共享文件夹功能,samba服务也得装上。
然后是Resilio sync、Navidrome,这样可以让音乐服务更方便地实现。
一、安装Zerotier
根据官网(https://docs.zerotier.com/snap)的提示,使用snap容器化安装是最便利的方法。
sudo snap install zerotier
sudo zerotier status
sudo zerotier join <nwid>
还可以继续用zerotier的orbit命令直接加入moon:
sudo zerotier orbit <moonid> <moonid>
然后用listpeer命令来查看节点信息:
sudo zerotier listpeers
用snap方式安装的服务,不会出现在系统的service --status-all列表中。可以用snap services命令来查看,用snam start/stop/restart <service-name>来操作它们。
需要注意的是,zerotier的安装并不会主动操作防火墙端口,因此需要手动打开9993端口。如果要用到虚拟内网上的共享文件夹,还需要打开445端口。
sudo ufw allow from any to any port 9993
sudo ufw allow from any to any port 445
二、安装并配置samba实现文件夹共享
首先安装samba:
sudo apt install samba
Linux中的共享设置也是完全通过配置文件来实现的,文件地址:/etc/samba/smb.conf
我们在其中添加共享块,例如:
[Share]
comment = Shared Folder with username and password
path = /home/share
public = yes
writable = yes
valid users = testshare
create mask = 0700
directory mask = 0700
force user = nobody
force group = nogroup
available = yes
browseable = yes
这是一个权限设置比较严格的例子,它强制用户以nobody和nogroup的权限来访问共享文件夹,同时设置了用户创建的文件、目录均只有所有者本人才可以编辑。可以根据需要对这些设置进行调整。
该设置中指定了一个用户是“testshare”。samba工作的原理是,它必须使用系统中已有的一个用户来操作共享文件夹,但却可以为该用户分配一个专门用于访问共享文件夹的密码,这个密码与系统用户的密码不同。本例中,我们就需要首先在系统创建用户testshare(同时设置系统用户密码),然后用smbpasswd命令来设置它用来访问共享的密码。
sudo adduser testshare
smbpasswd -a testshare
-a表示往samba的用户数据库中添加一个用户密码信息。
现在重启samba服务:
sudo service smbd restart
现在已经可以用Zerotier虚拟内网中的另一台Windows访问这台VPS(对应Zerotier内网的IP)的共享文件夹了。
三、安装Resilio sync
根据官网(https://help.resilio.com/hc/en-us/articles/206178924#manage-sync)提示,我们可以采用手动安装方式,首先下载DEB包的x64版本,复制到VPS上。
使用dkpg方式解包并安装:
sudo dpkg -i <resilio-sync.deb>
此时它以名称“resilio-sync”安装了服务。用systemctl命令将它设置为开机启动:
sudo systemctl enable resilio-sync
由于该服务总是以用户rslsync来运行,且我们需要使用resilio来进行文件夹操作,所以,需要为rslsync用户配置适当的权限:
sudo usermod -aG <user_group> rslsync
sudo usermod -aG rslsync <user_name>
sudo chmod g+rw <synced_folder>
这里的synced_folder可以提前建好。之后可以用service命令直接对resilio-sync服务进行操作:
sudo service resilio-sync start
或者stop、restart均可。
下面就是最puzzle的时刻,由于没有UI界面,对resilio进行同步文件夹操作或添加密钥是比较麻烦的。resilio本身提供了网页访问的方式,但只能在本地以localhost:8888/gui或127.0.0.1:8888/gui的方式来访问。但如果Linux没有事先配置好桌面环境的话,这又麻烦了。
其实我们仍然可以通过修改配置文件来允许本机之外的IP访问它的web UI,配置文件位于/etc/resilio-sync/config.json,web UI的访问设置这一段:
"webui" :
{
"force_https": true,
"listen" : "127.0.0.1:8888"
}
}
只需将127.0.0.1改为0.0.0.0,然后重启resilio-sync服务:
sudo service resilio-sync restart
即可通过VPS本身的公网IP访问了。初次访问会设置一个本机的resilio名称,并设置一个访问web UI的密码,妥善保存,今后每次通过网页访问resilio sync的面板都会用到。
这时候,已经可以像通常那样使用resilio sync了。
四、安装Navidrome
按照官网(https://www.navidrome.org/docs/installation/linux/)提示,首先安装ffmpeg:
sudo apt install ffmpeg
官网不知道为什么同时要装vim,ubuntu一般已经自带,而且我也不建议使用vim来编辑,直接用winscp编辑器就好。
建好两个文件夹,一个用来放二进制文件,一个用来放配置文件:
sudo install -d -o <user> -g <group> /opt/navidrome
sudo install -d -o <user> -g <group> /var/lib/navidrome
到Github上手动下载Linux的x86_64.tar.gz包,复制到VPS。
用tar命令来解压缩包到前面创建好的存放二进制文件的路径:
sudo tar -xvzf navidrome.tar.gz -C /opt/navidrome/
在用这条命令的时候,发现ubuntu对于文件名大小写是敏感的……言归正传,下面在/var/lib/navidrome目录中创建配置文件navidrome.toml。
这里特别要提醒的是,winscp默认似乎是不支持UTF-8编码的,我们需要在连接服务器之前,在“高级”设置中,手动将UTF-8模式设置为“允许”。然后用winscp创建新文件,任意输入一个字符存储,之后重新打开它,就可以切换到UTF-8模式继续编辑。下面是几个常用的选项:
MusicFolder = "/var/share/musiclib"
ScanSchedule = "@every 24h"
EnableSharing = true
DefaultLanguage = "zh-Hans"
UIWelcomeMessage = "你的首页欢迎词"
需特别注意的是,这个配置文件格式与windows下有些许不同,主要是双引号和单引号的区别,切勿直接从windows中复制。
下面根据官网页面提示,在/etc/systemd/system/创建新文件navidrome.service,内容如下,注意修改其中的<user>和<group>:
[Unit]
Description=Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
After=remote-fs.target network.target
AssertPathExists=/var/lib/navidrome
[Install]
WantedBy=multi-user.target
[Service]
User=<user>
Group=<group>
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
WorkingDirectory=/var/lib/navidrome
TimeoutStopSec=20
KillMode=process
Restart=on-failure
# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
ReadWritePaths=/var/lib/navidrome
# You can uncomment the following line if you're not using the jukebox This
# will prevent navidrome from accessing any real (physical) devices
#PrivateDevices=yes
# You can change the following line to `strict` instead of `full` if you don't
# want navidrome to be able to write anything on your filesystem outside of
# /var/lib/navidrome.
ProtectSystem=full
# You can uncomment the following line if you don't have any media in /home/*.
# This will prevent navidrome from ever reading/writing anything there.
#ProtectHome=true
# You can customize some Navidrome config options by setting environment variables here. Ex:
#Environment=ND_BASEURL="/navidrome"
这就是手动创建了一个服务。我们需要让systemctl重新加载一下服务列表,运行它,并查看其运行状态:
sudo systemctl daemon-reload
sudo systemctl start navidrome.service
sudo systemctl status navidrome.service
注意,如果出现运行失败,请检查navidrome.toml文件是否保存为UTF-8编码格式。
如果运行顺利,我们还需要将它加入系统自启动列表:
sudo systemctl enable navidrome.service
最后,别忘了在防火墙中添加4533例外:
sudo ufw allow from any to any port 4533
至此大功告成。
要做成真正的网站服务,还需要配置nginx并设置反向代理,此处不再赘述。