在信息爆炸的时代,每个人每天都在使用各种联网应用,也在不停的产生各种属于自己隐私的数据(文本、照片、音视频等)。这些数据如果放置在互联网的网盘上,似乎不够安全,不够保险。同时,免费的网盘往往伴随着限速、限空间,无缘无故“和谐”掉一些内容,使用起来非常不顺手。于是,搭建自己的家庭服务器就变得非常有必要。网盘功能:用于家庭成员各自备份自己的电脑、手机数据;密码保管:太多的密码记不住,第三方的我们不敢完全相信,自己搭建一个相对安全;音视频平台:收藏家庭喜欢的电影、音乐,可以随时播放;知识库:用于存储自己的工作、生活经验。在使用时可以提升效率;软路由:通过虚拟机可搭建软路由,可作为路由器的备份,在某些情况下可以实现特殊的科学上网来获取更多的知识;远程管理:能够实现web页远程管理;

  3.1、硬件环境

必备:一文教会搭建私家服务器,享受自主可控的VIP网盘和影音系统

  参数项

  参数内容

  选择理由

  CPU

  Intel(R) Celeron(R) J4125

  X86架构,64位4核CPU,性能足够、功耗低、可无风扇稳定运行

  内存

  16G DDR4

  16G足够使用

  硬盘

  128G SSD + 2T SSD/SATA

  SSD安装系统和存放应用,2T SSD/SATA存放网盘数据(省钱一点,数据盘可以利旧或者买2.5寸机械盘)

  接口

  2 X 千兆网口+WIFI(2.4G+5G) + 若干usb口

  1个网口作为WAN口,另外1个网口和WIFI桥接作为LAN口。USB口还可以外挂闲置的移动硬盘。3.2、软件环境

  参数项

  参数内容

  实现功能

  备注

  OS

  ubuntu Server 22.04 LTS+cockpit

  操作系统+web管理

  最小化安装,22.04是当前最新版本

  docker

  docker-ce、docker-compose

  容器平台

  容器需要使用的软件

  影音系统

  jellyfin

  影音播放

  容器安装

  知识库

  dokuwiki

  wiki形式记录知识

  容器安装

  网盘

  cloudreve+aria2

  通过web、webdav使用硬盘空间,aria2实现离线下载

  容器安装

  密码库

  vaultwarden

  记录web密码,并实现自动填充

  容器安装4.1、ubuntu安装访问https://cn.ubuntu.com/download网页,选择服务器LTS版本进行下载。我下载的是ubuntu-22.04.2-live-server-amd64.iso;下载完成后,用ultraISO软件将镜像写入U盘;用U盘启动主机,选择最小化安装。网络配置页记得给联网的网卡配置上固定IP,在软件选择上记得勾选上OpenSSH,配置一个用户账户和密码。安装完成后重启系统;重启系统后,正常可以用SSH远程访问了;4.2、初始化系统4.2.1、 更新系统:

  4.2.2、安装必要软件:

  包括编辑器vim、网络工具net-tools、ping命令支持iputils-ping、nslookup支持dnsutils、定时任务cron、解压缩unzip、硬盘检测工具smartmontools、防火墙firewalld。

  4.2.3、 设置时区:默认为美国时间,需修改为中国时间。

  4.2.4、网络配置

  配置网络,增加网桥br0,目的是给后面软路由op虚拟机桥接使用。

  样本配置文件如下:

  应用配置

  4.3、web远程管理实现

  这里使用cockpit管理面板来实现远程管理,改软件有不少使用组件可以根据自己需要安装,这里安装了虚拟机管理组件 cockpit-machine。

  安装必要的证书并允许 apt 包管理器使用以下命令通过 HTTPS 使用存储库:

  添加 Docker 的官方 GPG 密钥:

  添加 Docker 官方库:

  更新 Ubuntu 源列表:

  安装docker-ce、docker-compose

  5.1、创建docker 网络

  docker默认的桥接网络没有开放ipv6,这里自己创建一个支持ipv6的容器网络

  5.2、docker-compose安装开源应用

  在自己喜欢的目录下(比如:/me)创建compose文件来实现各种功能

  进入compose.yml所在目录,并执行以下命令拉取镜像以及创建容器。

  备注:

  1:喜欢用podman的人,这里可以用podman代替docker。cockpit还有专门的podman支持的插件cockpit-podman,可以实现web图形化管理podman容器。

  2:以上开源软件基本都能开启HTTPS加密访问,但需要自行配置证书;5.3、配置nginx反向代理

  修改nginx配置文件:nginx目录/conf.d/default.conf:

  5.4、DDNS+IPv6可实现外网访问

  由于ipv4地址资源非常紧张,目前一般的宽带网络都没有ipv4公网地址了。但好在ipv6非常充裕,大部分人都可以获得可公网访问的ipv6地址。于是我们就可以使用ddns+ipv6来实现远程访问。ddns选择:选用国外免费的ClouDNS,可以申请免费的二级域名;(国内的花生壳/贝锐的免费ddns限制众多很不好用)注册域名:cloudns是国外的网站,在默认情况下中国用户无法申请到免费域名,必须通过科学上网才能申请得到。申请过程比较简单自行申请即可。配置动态域名:申请好域名后,在cloudns管理后台增加一条AAAA记录,将自己主机的ipv6地址填写上去。然后点击AAAA记录旁边的动态⬆⬇按钮(动态域名),系统会弹出脚本下载窗口。因为我是linux,我选择下载perl脚本(其他脚本也是可以的)。定时运行脚本:将下载的脚本放置在一个目录下,然后运行以下命令来设置定时任务。

  注意点:由于该perl脚本依赖http::tiny模块,所以需要通过下面命令安装libhttp-tiny-perl。

  apt install libhttp-tiny-perl5.5、客户端使用知识库(wiki):直接web访问,客户端只要有浏览器即可顺畅访问;影音系统:可直接web访问,也可以安装jellyfin官方提供的app,或者和kodi集成;密码库:在浏览器安装bitwarden插件,即可实现一键自动记录密码,自动填充密码;网盘:电脑端可以用web访问,也可以通过raidriver软件使用webdav协议映射成本地盘用。手机端可以用solidexplorer文件管理器使用webdav来连接使用。后台管理:可通过cockpit提供web管理,也可以通过ssh进行命令行配置。6.1、配置intel-vt以及iommu直通

  由于我的机器是intel CPU,顾需要开启intel-vt和intel_iommu特性。intel-vt特性:在宿主机的bios中开启,如果是AMD CPU则需要开启AMD-v虚拟化特性intel-iommu特性:在ubuntu系统中执行命令vi /etc/default/grub 修改行样本: GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"。 修改完成后执行命令更新grub update-grub6.2、下载openwrt镜像

  在openwrt官方网站的镜像选择器中选择下载。

  这里根据我cpu架构选择了x86/64,软件选择最新的发行版本,下载得到

  openwrt-22.03.5-x86-64-generic-ext4-combined.img.gz。

  通过scp直接上传,命令如下:

  解压后得到

  openwrt-22.03.5-x86-64-generic-ext4-combined.img文件。访问cockpit的管理页面,并用root用户登录;打开虚拟机选项卡,点击导入VM;在导入vm的界面,名称方便记忆即可,磁盘镜像选择前面解压出来的img文件,操作系统选择debian(因为openwrt基于debian):

  在cockpit页面点击openwrt虚拟机进入配置页面,在主机设备选项卡中添加无线网卡直通(这里是AR93xx Wireless Network Adapter);启动虚拟机,openwrt启动成功后只识别到一张虚拟网卡,自动被当作LAN接口;在虚拟机里命令行界面修改LAN网络配置:

  这里的IP可以临时改成咋们局域网的一个可用IP地址,并增加以下配置以实现单臂路由上网。配置完成后,输入以下命令重启reboot重启完成后,即可通过前面设置的IP登录openwrt的web图形界面进行操作了(默认用户root,无密码)。主要需要操作如下:系统自动提示设置密码,在菜单“system::software”下更新列表,并安装luci-i18n-base-zh-cn软件提供中文支持;在菜单“系统::管理权”下设置SSH访问的root密码;在菜单“系统::软件包”下安装“kmod-ath9k”提供无线网卡的驱动支持(不同网卡需安装不同的程序)在菜单“系统::软件包”下安装“hostapd”提供无线AP的软件支持。重启系统后,菜单会增加“无线”选项卡;在菜单“网络::无线”里配置自己想要的无线网络(SSID和密码),并将无线绑定到LAN;在cockpit的虚拟机界面中进入虚拟机配置,增加一张网卡作为WAN,网卡设置为bridge to lan。在虚拟机全局配置的网络配置中,增加一个网络名为“private”模式设置为隔离网络(目的是为了LAN和WAN连接到不同的网络,免得DHCP及上网数据流混乱);将原来那张LAN口的网卡模式设置连接到“private”网络;在cockpit虚拟机配置页,关闭openwrt虚拟机,然后再次启动虚拟机以使网卡更改生效;进入到虚拟机后,将LAN口的IP改成自己想要的IP网段,并将网关和dns配置删除;笔记本连接到openwrt的无线网络,通过web界面登录openwrt;在菜单“网络::接口”中新增接口“wan”绑定“eth1”;在wan接口中配置上网的ip(静态ip/掩码/网关/dns);web登录openwrt,在菜单“系统::软件包”中搜索“zerotier”,并在搜索结果中安装“zerotier”ssh登录openwrt,用以下命令配置zerotier

  回到web界面,在菜单“网络::接口”中增加一个接口“名字为zerotier,绑定接口为zerotier的虚拟接口,防火墙选择自定义(名字“dmz”);配置dmz区域规则:在防火墙界面增加区域设置,名称为dmz,目标区域不指定,入站、出站、转发都为ACCEPT,不勾选ip 伪装;修改lan区域规则:将lan规则中的允许转发的网络中增加dmz区域;

  受篇幅影响,以上记录尽量简化(简化自本人自家搭建笔录而来),但保留了所有主要步骤,完全可以实现私家服务器、vip网盘、vip影音系统功能。当然结合容器安装更多的实用开源软件,可以实现更多的功能,只需要你的小主机依然有资源。