我的需求
首先,想做一个东西,首先明确自己需要什么,我的需求非常明确:
- 娱乐使用,我希望此服务器能自动追剧或者追动漫。
- 开发使用,我希望此服务器能适配我的开发工作,如编译,跑集群。
- 下载使用,我经常从各总网站下载资源或下或巨大的文件(ISO)等(笔记本下载占资源,丢给服务器后台下载)。
- 部署相关服务,如部署博客等,能从外网访问;如跑周期任务,签到等。
硬件/系统选择和安装
硬件的话,我直接淘宝组的ITX小主机(x86 CPU为二手,成本2K左右):
系统基于我的需求,折腾操作比较多,直接安装NAS系统肯定是不合适的(如TrueNAS),最后我选择了Ubuntu Server 20.04,可以方便的基于Docker做各种功能扩展。
这里有个缺陷就是,不好做手机照片,视频等存储同步,也没有NAS系统那种容灾操作(但目前没这个需求)。
配套软件选择&安装
下载使用
现有媒体比较完美的解决方案是nastool,但是有个缺陷是,它只能用来追剧,我还需要从各大资源网站下载相关资源,所以,这里我自己开发了一个全局资源下载系统 Kubespider(点我查看项目),有如下功能点(后续适配更多场景,如自动下载豆瓣评分大于8的电影):
- 自动追剧,可以从 美剧天堂 下载追更美剧。
- 自动追动漫,可以从 蜜柑计划 下载追更动漫。
- 接受触发,从 BT之家 下载资源(电影,电视剧)。
- 可以接受各种资源触发下载,如mp4、mp3、torrent,bt等。
- 对接alist,自动下载各种网盘资源。
- 对接YouTube,Bilibili等资源网站,下载视频。
- 可以使用aria2,迅雷作为下载软件。
- 自动对下载文件进行分类。
- 提供标准接口,你也可以实现自己的任何下载场景。
可以看如下架构图,Kubespider是作为一个在下载软件和资源网站的中间层,在不同场景特定条件下,从资源网站获取链接,调用不同的下载软件下载资源:
最后的使用效果非常不错,示例如下,右键鼠标,Kubespider在服务器上接收触发,即可下载已有剧集并追更,也可以根据bt连接下载资源,下载通用文件(iso镜像等),你也可以自定义丰富资源下载场景。
娱乐使用
通过Kubespider,能够自动下载相关媒体资源,那么,如何方便的访问呢?通常的解决办法有:
- 使用plex/jellyfin等方案,观看媒体资源。
- 使用Samba,直接通过笔记本访问。
为了方便,我直接选择的samba,在ubuntu中运行如下命令即可:
sudo apt install samba -y
后续将如下内容写入`etc/samba/smb.conf:
[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
log file = /var/log/samba/log.%m
max log size = 1000
logging = file
panic action = /usr/share/samba/panic-action %d
server role = standalone server
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
usershare allow guests = yes
[homes]
comment = Home Directories
browseable = no
read only = no
create mask = 0700
directory mask = 0700
valid users = %S
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
设置samba密码并重启服务:
smbpasswd -a root
systemctl restart smbd.service
最后通过打开文件游览器,输入<server_ip>\,输入root/<设置的密码即可访问>。
开发使用
这个就基于你自己的技术栈,配置软件即可,这里就不说了。
部署相关服务使用
通常,部署博客后,需要公网IP才能访问。而我的机器是部署在局域网里面的,如何处理呢?
这是可以使用 frp 服务,借助一台公网的服务器,暴露局域网的服务到公网:
服务端配置如下:
1.下载最新版本
wget https://github.com/fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz
tar -zxvf frp_0.47.0_linux_amd64.tar.gz
cd frp_0.47.0_linux_amd64
mv frps /usr/local/bin/
mkdir /root/.frp/
2.设置配置/root/.frp/frps.ini
[common]
bind_port = 4443
3.设置系统服务/etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/bin/frps -c /root/.frp/frps.ini
[Install]
WantedBy = multi-user.target
4.启动服务
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
# 设置开启启动
systemctl enable frps
客户端配置如下:
1.下载最新版本
wget https://github.com/fatedier/frp/releases/download/v0.47.0/frp_0.47.0_linux_amd64.tar.gz
tar -zxvf frp_0.47.0_linux_amd64.tar.gz
cd frp_0.47.0_linux_amd64
mv frpc /usr/local/bin/
mkdir /root/.frp/
2.设置配置/root/.frp/frpc.ini(如下除了common,都可以自定义配置暴露端口)
[common]
server_addr = 23.105.x.x #服务器IP
server_port = 4443 #服务端设置的端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[server-custom]
type = tcp
local_ip = 127.0.0.1
local_port = 1235
remote_port = 6001
3.设置系统服务/etc/systemd/system/frpc.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/bin/frpc -c /root/.frp/frpc.ini
[Install]
WantedBy = multi-user.target
4.启动服务
# 启动frp
systemctl start frpc
# 停止frp
systemctl stop frpc
# 重启frp
systemctl restart frpc
# 查看frp状态
systemctl status frpc
# 设置开启启动
systemctl enable frpc
所有安装好后,即可通过外网机器ip+端口访问局域网内不同服务。
最后
如果此文章对你有帮助,请给我的项目一个star: GitHub - jwcesign/kubespider: A global resource download orchestration system, build your home download center.