百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2025-02-10 13:52 44 浏览 0 评论

在信息爆炸的时代,每个人每天都在使用各种联网应用,也在不停的产生各种属于自己隐私的数据(文本、照片、音视频等)。这些数据如果放置在互联网的网盘上,似乎不够安全,不够保险。同时,免费的网盘往往伴随着限速、限空间,无缘无故“和谐”掉一些内容,使用起来非常不顺手。于是,搭建自己的家庭服务器就变得非常有必要。

一、需求规划

  1. 网盘功能:用于家庭成员各自备份自己的电脑、手机数据;
  2. 密码保管:太多的密码记不住,第三方的我们不敢完全相信,自己搭建一个相对安全;
  3. 音视频平台:收藏家庭喜欢的电影、音乐,可以随时播放;
  4. 知识库:用于存储自己的工作、生活经验。在使用时可以提升效率;
  5. 软路由:通过虚拟机可搭建软路由,可作为路由器的备份,在某些情况下可以实现特殊的科学上网来获取更多的知识;
  6. 远程管理:能够实现web页远程管理;

二、系统架构图

三、环境准备

  • 3.1、硬件环境

参数项

参数内容

选择理由

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

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

apt update
apt upgrade
apt install vim net-tools iputils-ping dnsutils cron unzip smartmontools firewalld
  • 4.2.3、 设置时区:默认为美国时间,需修改为中国时间。
timedatectl set-timezone Asia/Shanghai 
  • 4.2.4、网络配置

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

vi /etc/netplan/00-installer-config.yaml

样本配置文件如下:

 ethernets:
    enp1s0:                          
      dhcp4: false
      optional: true
    enp2s0:                          
      optional: true                 
  bridges:                           
    br0:                             
      interfaces:
        - enp1s0
      addresses:
        - 192.168.2.18/24       #根据个人喜欢选择自己的IP和网段    
      nameservers:                   
        addresses:
          - 8.8.8.8        
        search: []                 
      routes:                        
        - to: default                
          via: 192.168.2.1  
      parameters:
        stp: true                    
        # 打开STP协议,防止环路;
  version: 2
  renderer: networkd    

应用配置

netplan apply
  • 4.3、web远程管理实现

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

apt install cockpit cockpit-machine

五、docker平台安装

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

apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

添加 Docker 的官方 GPG 密钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加 Docker 官方库:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

更新 Ubuntu 源列表:

apt update

安装docker-ce、docker-compose

apt install docker-ce docker-compose
  • 5.1、创建docker 网络

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

docker network create --ipv6 dnet6
  • 5.2、docker-compose安装开源应用

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

version: "3"
#--------------------全局设置----------------------#
# using "docker network create --ipv6 dnet6" command to create this network first.
networks:
  default:
    external:
      name: dnet6

volumes:
  temp_data:
    driver: local
    driver_opts:
      type: none
      device: /data/cloudreve/data
      o: bind

#--------------------服务开始--------------------#
services:
  #---------nginx反向代理(本人仅用来代理密码库)--------#
  nginx:
    image: docker.io/library/nginx:latest
    container_name: nginx
    ports:
      - 8000:80
      - "4430:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf #需要先在主机目录下创建nginx.conf配置文件
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/html:/usr/share/nginx/html
      - ./nginx/log:/var/log/nginx
    environment:
      - TZ=Asia/Shanghai
    restart: always
  #--------------------知识库--------------------#
  dokuwiki:
    image: docker.io/linuxserver/dokuwiki:latest 
    container_name: dokuwiki
    ports:
      - 8001:80
      - "8043:443"
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
    volumes:
      - ./dokuwiki:/config
    restart: always
  #-------------------密码库-------------------#
  vaultwarden:
    image: docker.io/vaultwarden/server:latest 
    container_name: vaultwarden
    ports:
      - "8002:80"
    environment:
      - WEBSOCKET_ENABLED=true
      - LOG_FILE=/log/bitwarden.log
      - ADMIN_TOKEN=your-passwrod #填写你自己的密码
      #- ROCKET_TLS={certs="/ssl/server.crt.pem",key="/ssl/server.key.pem"} #有反向代理无需启用
      - TZ=Asia/Shanghai
    volumes:
      - ./vaultwarden/ssl:/ssl
      - ./vaultwarden/data:/data
      - ./vaultwarden/log:/log
    restart: always
  #--------------------私家网盘--------------------#
  cloudreve:
    container_name: cloudreve
    image: docker.io/cloudreve/cloudreve:latest 
    restart: always
    ports:
      - "5212:443"
    volumes:
      - temp_data:/data
      - ./cloudreve/uploads:/cloudreve/uploads
      - ./cloudreve/conf.ini:/cloudreve/conf.ini
      - ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
      - ./cloudreve/avatar:/cloudreve/avatar
      - ./cloudreve/ssl:/cloudreve/ssl #存放自己生成的SSL证书
    depends_on:
      - aria2
  #------------------离线下载----------------------#
  aria2:
    container_name: aria2
    image: docker.io/p3terx/aria2-pro
    restart: always
    ports:
      - "6800:6800"
    environment:
      - RPC_SECRET=your-password #设置自己的通讯密码
      - RPC_PORT=6800
      - TZ=Asia/Shanghai
    volumes:
      - ./cloudreve/aria2/config:/config
      - temp_data:/data
    logging:
      driver: k8s-file 
      options:
        max-size: 1m
  
  #------------私家影音平台-------------#
  jellyfin:
    image: lscr.io/linuxserver/jellyfin:latest
    container_name: jellyfin
    #runtime: runc
    ports:
      - "8096:8096"
      - "8920:8920" #optional https port 需要配置SSL证书
      #- 7359:7359/udp #optional auto lan discover
      #- 1900:1900/udp #optional dlna port
    volumes:
      - ./jellyfin/config:/config
      - ./jellyfin/scripts:/custom-cont-init.d
      - ./media/path1:/data/media:ro #设置自己影音文件存放位置
      - ./media/path2:/data/media2:ro #设置自己影音文件存放位置
    devices:
      - /dev/dri:/dev/dri #VAAPI/NVDEC/NVENC render nodes
    restart: always
    environment:
      - PUID=0 #1000 means docker user;0 means root user;
      - PGID=0 #1000 means docker user;0 means root user;
      - TZ=Asia/Shanghai
      #- DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel #optional - auto download and install chinese font for create docker first time
      #- JELLYFIN_PublishedServerUrl=http://192.168.8.18/ #optional - may be necessary for docker healthcheck to pass if running in host network mode
        #extra_hosts:
         # - "host.docker.internal:host-gateway"
 #---------------服务结束--------------------#

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

docker-compose up -d

备注:

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

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

  • 5.3、配置nginx反向代理

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


server {
    listen 443 ssl;
    listen [::]:443 ssl;
    #http2 on;
    server_name domain-name; #配置自己用到的域名
    # 根据需要指定 SSL 配置
    ssl_certificate /etc/nginx/conf.d/server.crt.pem;
    ssl_certificate_key /etc/nginx/conf.d/server.key.pem;
    ssl_trusted_certificate /etc/nginx/conf.d/ca.crt.pem;
    client_max_body_size 525M;
  
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location / {
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_pass http://serverip:port; #填写真实服务器的ip和端口
    }
  • 5.4、DDNS+IPv6可实现外网访问

由于ipv4地址资源非常紧张,目前一般的宽带网络都没有ipv4公网地址了。但好在ipv6非常充裕,大部分人都可以获得可公网访问的ipv6地址。于是我们就可以使用ddns+ipv6来实现远程访问。

  1. ddns选择:选用国外免费的ClouDNS,可以申请免费的二级域名;(国内的花生壳/贝锐的免费ddns限制众多很不好用)
  2. 注册域名:cloudns是国外的网站,在默认情况下中国用户无法申请到免费域名,必须通过科学上网才能申请得到。申请过程比较简单自行申请即可。
  3. 配置动态域名:申请好域名后,在cloudns管理后台增加一条AAAA记录,将自己主机的ipv6地址填写上去。然后点击AAAA记录旁边的动态??按钮(动态域名),系统会弹出脚本下载窗口。因为我是linux,我选择下载perl脚本(其他脚本也是可以的)。
  4. 定时运行脚本:将下载的脚本放置在一个目录下,然后运行以下命令来设置定时任务。
crontab -e 
按i并在文末加上下文: 
*/5 * * * * /me/ddns/dynamic-url-perl.pl 
输入:wq保存退出。这样就实现了每5分钟更新ip的动态域名了

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

apt install libhttp-tiny-perl

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

六、虚拟机搭建op软路由+zerotier内网穿透

  • 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-grub
  • 6.2、下载openwrt镜像

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



这里根据我cpu架构选择了x86/64,软件选择最新的发行版本,下载得到
openwrt-22.03.5-x86-64-generic-ext4-combined.img.gz。

6.3、上传openwrt镜像

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

scp d:\download\openwrt-22.03.5-x86-64-generic-ext4-combined.img.gz user@serverip:/data/

6.4、解压镜像

gzip -d openwrt-22.03.5-x86-64-generic-ext4-combined.img.gz

解压后得到
openwrt-22.03.5-x86-64-generic-ext4-combined.img文件。

6.5、 创建虚拟机

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

6.6、 添加无线网卡直通

  • 在cockpit页面点击openwrt虚拟机进入配置页面,在主机设备选项卡中添加无线网卡直通(这里是AR93xx Wireless Network Adapter);
  • 启动虚拟机,openwrt启动成功后只识别到一张虚拟网卡,自动被当作LAN接口;
  • 在虚拟机里命令行界面修改LAN网络配置:
vi /etc/config/network
config interface 'lan'
        option device 'br-lan'
        option protocol 'static'
        option netmask '255.255.255.0'
        option ipaddr '192.168.1.1' #按需替换ip
        option ip6assign '60'
        option gateway '192.168.1.254' #按需替换网关
        list dns '8.8.8.8'

这里的IP可以临时改成咋们局域网的一个可用IP地址,并增加以下配置以实现单臂路由上网。

  • 配置完成后,输入以下命令重启reboot
  • 重启完成后,即可通过前面设置的IP登录openwrt的web图形界面进行操作了(默认用户root,无密码)。主要需要操作如下:
  • 系统自动提示设置密码,
  • 在菜单“system::software”下更新列表,并安装luci-i18n-base-zh-cn软件提供中文支持;
  • 在菜单“系统::管理权”下设置SSH访问的root密码;
  • 在菜单“系统::软件包”下安装“kmod-ath9k”提供无线网卡的驱动支持(不同网卡需安装不同的程序)
  • 在菜单“系统::软件包”下安装“hostapd”提供无线AP的软件支持。重启系统后,菜单会增加“无线”选项卡;
  • 在菜单“网络::无线”里配置自己想要的无线网络(SSID和密码),并将无线绑定到LAN;

6.7、 增加wan形成主路由模式

  • 在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);

6.8、 配置zerotier实现内网穿透

  • web登录openwrt,在菜单“系统::软件包”中搜索“zerotier”,并在搜索结果中安装“zerotier”
  • ssh登录openwrt,用以下命令配置zerotier
uci set zerotier.openwrt_network=zerotier
uci add_list zerotier.openwrt_network.join='你的网络ID'
uci set zerotier.openwrt_network.enabled='1'
uci commit zerotier
  • 回到web界面,在菜单“网络::接口”中增加一个接口“名字为zerotier,绑定接口为zerotier的虚拟接口,防火墙选择自定义(名字“dmz”);

6.9、 配置防火墙

  • 配置dmz区域规则:在防火墙界面增加区域设置,名称为dmz,目标区域不指定,入站、出站、转发都为ACCEPT,不勾选ip 伪装;
  • 修改lan区域规则:将lan规则中的允许转发的网络中增加dmz区域;

结语

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

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: