thumbnail
家用服务器折腾指南

0x00写在前面

去年暑假组了一台新电脑,老电脑逐渐用不上用场了。恰好我有刷pt的需求,还想运行MC等游戏的服务器,于是我就动手改造这台老电脑了。

0x01硬件配置

这台老电脑是15年配的:CPU是i3-4160,两个核心四个线程;主板是技嘉的丐版H81M-D2,有两个内存插槽,最大只支持8G的DDR3内存;主板有三个PCIE接口,一个PCIEx16够宽,两个PCIEx1比较短;还有四个SATA接口;另外主板太老没有HDMI只有VGA接口,除此之外的千兆以太网口没啥好说的

PCIEx16上的亮机卡是GT640 2G,其实就是装系统时候用的;PCIEx1装了个物联网开机模块,因为我要将其放到家中,而我常年在外面上学,所以这个必不可少;还有个PCIEx1是英特尔Intel Corporation Wireless 7260网卡,这个是当时在学校里倒腾这玩意时应急选项,因为当初交换机太远,显示器太近。

内存的话,只插了一根8G的DDR3内存,没想插更多是因为没有那么多服务要跑。当然了,高版本的MC多少内存都不够,不够我的U似乎也有些捉襟见肘了。

SATA四个接口全被占用啦。一个是系统盘,威刚的远古120G固态盘;一个两百块淘来的4THGST企业盘,是真的吵,也是真的烫,为此我加了个风扇改变风道,用来刷刷PT还是比较够的;之前云盘服务是在日立盘上的,但这小文件读写实在是太吵了,也不安全,于是26块包邮搞了块500G西数蓝盘,配上闲置的500G西数绿盘,组了个RAID1阵列,图个心安吧,这个阵列就是专门做云盘备份了。

0x02系统与网络配置

系统没啥好说的,本人不喜欢折腾,也就没有搞ESXi,我系统盘实在是太小了,我为了配置方便就直接装Ubuntu 22.04.1 LTS了。

网络的话,我家里是楼上楼下;光猫先是进入一楼的房间,通过院子里的飞线飞到二楼客厅弱电箱的交换机里。一路上的路由器我全改为了mesh组网,这是为了保证每个设备都能拿到ipv6。另外,据修网的师傅所言,上海电信的SDN只有在有公网的情况下才能正常使用ipv6(我不理解),于是我也拿到了我的一个公网v4地址,管他静态还是动态(半个多月都没改变地址),能有就是赢麻了!v4的话不支持NAT回流,就是我内网的主机没法用公网IP访问我的设备;但是v6没有公网内网之分,没有问题;还有就是v4v6都被封了80,443,8080端口。

0x03游戏服务器

这个配置拿来刷pt和做NAS(不考虑转码)其实是有些暴殄天物了,刚好我的云服务器也到期了,于是就把我的游戏服务器全都迁移到家里。

1.MC运维面板MCSManager

Aimed to provide a healthy software support for server administrators of Minecraft, Terraria and other game servers.

官网地址:https://mcsmanager.com/

这个东西简直不要太好用!我之前在云服务器上搭建的我的世界服务器,经常要不停地按UP键找历史命令,有一次还输入错误导致存档没了,非常可惜;如果想做备份和其他计划任务,说不难也不难,shell和crontab看着文档就能写出想要的东西了。但这些繁琐危险的操作本可以避免,在MCSManager里,你可以很方便地在网页端执行命令、修改配置文件、上传整合包、设定计划任务,甚至可以说,他就是一个网页Linux周期命令执行器。另外本身自带一些api,在我的NekobotQQ机器人还活着时,无需打开游戏戳一戳她就显示服务器情况和人数。

安装很简单,官网提供了wget下载的安装脚本和docker安装方式,我是推荐用wget:

wget -qO- https://raw.githubusercontent.com/mcsmanager/Script/master/setup_en.sh | bash

2.SteamCMD

SteamCMD is the command line version of the Steam client. The tool is used to download dedicated server applications of popular Steam games quickly and easily for running your own Valheim server or Rust server, for example.

官方网址:https://developer.valvesoftware.com/wiki/SteamCMD

也挺好安装的,具体方法包括在我之前写的在linux平台上搭建求生之路服务器里。要注意的是,SteamCMD似乎是能被MCSManager原生识别的,但是其权限问题错综复杂无法访问到一些文件,本人水平不够没有细究(懒),所以就ssh后screen运维拉到。

服务器上跑了求生之路和饥荒的服务器,很可惜这两个游戏都原生不支持ipv6,但还好我本身就有公网v4😋。

0x04运维组件

SSH和Linux谁都会,但这些繁琐的操作都是可以避免的。

1.DDNS-GO

官方网址:https://github.com/jeessy2/ddns-go

这是一个用go写的ddns,且不说我的v4很有可能是动态的,ipv6可是每两天就变化一次的,所以有个ddns服务非常有必要。

我的安装方式:

docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go

2.性能监控&运维Cockpit

这个是Fedora Server自带的面板,作为debian系的Ubuntu肯定也能装:

sudo apt install cockpit -y

多的不说,光Storage能帮你格式化、分区、组软RAID就已经很好了。界面很素,但是很好用。

安全性有自签名证书,不放心可以搞个其他的。

3.Portainer

Deploy, configure, troubleshoot and secure containers in minutes on Kubernetes, Docker, Swarm and Nomad in any data center, cloud, network edge or IIOT device.

官方网址:https://www.portainer.io/

这个没啥好说,管理docker容器的。我有太多服务是依赖docker快速启动的了。

我的安装方式:

docker pull portainer/portainer:latest

docker run -d --net=host --restart=unless-stopped -v /var/run/docker.sock:/var/run/docker.sock -v /data/portainer_data:/data portainer/portainer:1.23.2

0x05其他服务

1.transmission-daemon

磁力下载工具,主要用来刷pt。

我的安装方式:

sudo apt-get install transmission-daemon

原版界面太素,信息不够详尽,推荐用这个改善:

https://github.com/ronggang/transmission-web-control

2.LibreSpeed

测速服务器。官方网址:https://github.com/librespeed/speedtest-go

我的安装方式:

docker pull badapple9/speedtest-x

docker run -d --restart=always --name speedtest -p 9001:80 -it badapple9/speedtest-x

3.Samba服务

单纯当Nas用的服务

我的安装方式:

sudo apt-get install samba samba-common

配置文件:

sudo nano /etc/samba/smb.conf

//更多配置字段请查阅Google

[share]
comment = share folder
browseable = yes
path = /home/frank/share
create mask = 0700
directory mask = 0700=
public = yes
available = yes
writable = yes

重启服务:

sudo service smbd restart

推荐给samba新创建一个用户,而不是root和本机用户。

4.Nextcloud网盘

The most popular self-hosted collaboration solution for tens of millions of users at thousands of organizations across the globe

官方网址:https://nextcloud.com/

我的安装方式是docker而不是官网推荐的docker-compose,因为docker-compose出现了权限读取问题,没解决成功。推荐自己去官网看docker-compose.yml。

挺好用的,每个平台都有客户端,主要用来同步手机照片和其他文件,当网盘用。

5.Navidrome私有音乐服务

受不了各大音乐平台的版权壁垒了,官方网址:https://www.navidrome.org/

  • 几乎可以播放任何音频格式
  • 多用户,每个用户都有自己的播放次数、播放列表、收藏夹等。
  • 资源使用率非常低。例如:300GB的资料库(约29000首歌曲),使用不到50MB的内存。
  • 界面简洁,支持中文。
  • 支持Subsonic API,也就是说Subsonic能用的客户端,Navidrome都能用。

唯一的问题就是歌词显示有问题,似乎放到目录里也显示无歌词。

我的docker-compose.yml:

version: "3"
services:
  navidrome:
    container_name: navidrome
    image: deluan/navidrome:latest
    user: 0:0 #0:0代表用root用户运行
    ports:
      - "4533:4533"
    restart: unless-stopped
    environment:
      # Optional: put your config options customization here. Examples:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
      ND_ENABLETRANSCODINGCONFIG: "true"
      ND_TRANSCODINGCACHESIZE: "4000M"
      ND_IMAGECACHESIZE: "1000M"
    volumes:
      - "/mnt/WDC/navidrome/data:/data" //数据文件
      - "/mnt/WDC/navidrome/media:/music:ro" //媒体文件

以下是支持的客户端:

iOS: play:Sub, substreamer, Amperfy, iSub
Android: DSub, Subtracks, subreamer, Ultrasonic, Audinaut
网页端: Subplayer, Airsonic Refix, Aurial, Jamstash, Subfire
桌面端: Sublime Music(Linux)和Sonixd(Windows/Linux/MacOS)
命令行: Jellycli(Windows/Linux)和STMP(Linux/MacOS)

6.CUPS网络打印机

安装:

sudo apt-get install cups

备份文件:

sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.bak

我的配置文档,仅供参考:

LogLevel warn
PageLogFormat
MaxLogSize 0
ErrorPolicy retry-job
//listen需要将localhost改为0.0.0.0,记得防火墙弄好
# Allow remote access
Port 631
Listen /run/cups/cups.sock
# Share local printers on the local network.
Browsing On
BrowseLocalProtocols dnssd
DefaultAuthType Basic
WebInterface Yes
IdleExitTimeout 60

//这块地方需要修改成这样,否则forbidden
<Location />
  # Allow shared printing...
  Order allow,deny
  Allow all
</Location>
<Location /admin>
  AuthType Default
  Require valid-user
</Location>


<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
</Location>
<Location /admin/log>
  AuthType Default
  Require user @SYSTEM
</Location>
<Policy default>
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    Order deny,allow
  </Limit>
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Cancel-Job CUPS-Authenticate-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit All>
    Order deny,allow
  </Limit>
</Policy>
<Policy authenticated>
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    AuthType Default
    Order deny,allow
  </Limit>
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
    AuthType Default
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Cancel-Job CUPS-Authenticate-Job>
    AuthType Default
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit All>
    Order deny,allow
  </Limit>
</Policy>
<Policy kerberos>
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default
  <Limit Create-Job Print-Job Print-URI Validate-Job>
    AuthType Negotiate
    Order deny,allow
  </Limit>
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
    AuthType Negotiate
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  <Limit Cancel-Job CUPS-Authenticate-Job>
    AuthType Negotiate
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit All>
    Order deny,allow
  </Limit>
</Policy>

重启:

sudo service cups restart

然后输入内网IP:631进入管理页面并登陆

选择usb的打印机即可,其他选项看自己,驱动需要选择对应的,别忘了开启share选项(包括截图页面的)

测试一下,打印成功

上一篇
下一篇