家中折腾NAS服务器:

  1. 硬件:E5双路40核,内存64G DDR4, 存储128G固态硬盘装系统,阵列卡+6TB * 4企业级SAS硬盘组RAID10作为NAS数据存储
    在这里插入图片描述
  2. 系统:Ubuntu 22.04 Server
  3. 软件:nextcloud(可道云客户端不支持多文件夹同步),使用docker配置,volume设置到RAID10阵列盘,即使所有的软件系统崩溃,依旧可以轻松恢复。

只做NAS不用这么高配置,我是打算同时用来做应用服务器

阵列卡设置

插了阵列卡后,开机会先进阵列卡的BIOS,按提示按CTRL+H进入web配置界面,按提示配置好RAID10,插上系统安装U盘,重启电脑

系统安装配置

这一步简单,直接镜像写入U盘,从U盘启动,配置好系统盘,按提示一步步安装即可。

网络配置

需要固定IP地址:
修改/etc/netplan/***.yml,假如你的内网是10.10.10.*

network:
  ethernets:
    enp5s0:
      dhcp4: false
      addresses: [10.10.10.10/24]
      gateway4: 10.10.10.1
      nameservers:
        addresses: [10.10.10.1,114.114.114.114,8.8.8.8]
      optional: true
  version: 2

执行netplan apply命令,会有一个gateway4弃用警告,可以不管。
执行apt update && apt upgrade -y更新系统

配置无显卡启动

直接拔了显卡,Ubuntu会启动失败,甚至可能出现重新插上同一张显卡后依旧无法正常启动的现象。
修改/etc/default/grub来实现无显卡启动

GRUB_CMDLINE_LINUX_DEFAULT="nomodeset"
GRUB_CMDLINE_LINUX=""

接下来的操作可以从家中另外一台电脑通过SSH远程连接服务器配置,只需要允许root用户远程登录:
修改etc/ssh/sshd_config

PermitRootLogin yes

重启ssh服务:service sshd restart

当远程连接失败,需要显示的时候,重新插上显卡,启动系统

挂载RAID10盘

先建立分区,因为容量是惊人的10T,哈哈,所有不能用fdisk,需要使用parted创建GPT分区。
详见:Making GPT Partition Table and Creating Partitions Using parted in Linux

完成后格式化:`mkfs.ext4 /dev/disk_name

修改/etc/fstab挂载RAID10盘到任意位置,我这里挂载到/docker

/dev/disk/by-uuid/disk_uuid /docker ext4 defaults,nofail 0 1

安装docker

  1. 安装docker:apt install -y docker.io
  2. 安装docker-compose:apt install -y docker compose

配置docker数据路径

默认是在/var/lib/docker,里面包含docker的数据,最重要是volume是存在下面的,显然不满足作为NAS的需求,谁没事把大量数据往系统盘存:)

直接创建或修改/etc/docker/daemon.json

{
    "data-root": "/path/to/raid10/mount/point"
}

重启docker:service docker restart

配置nextcloud

因为nextcloud是用MySQL来存元数据的,所有会依赖MySQL服务,这里用了mariadb
可以参考: nextcloud offical image
创建编辑docker-compose.yml

version: '2'

volumes:
  app:
  db:

services:
  db:
    image: mariadb:10.5
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=mysql_password
      - MYSQL_PASSWORD=mysql_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud
    restart: always
    ports:
      - 8070:80
    links:
      - db
    volumes:
      - app:/var/www/html
    environment:
      - MYSQL_PASSWORD=mysql_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

保存后,执行docker-compose up -d

配置host Nginx反向代理

为了使用域名而不是IP访问NAS,这里使用Nginx来做反向代理

server_name nas.your.base_domain;
location / {
  proxy_pass http://10.10.10.10:8070/;
}

自定义路由器hosts

电脑可以通过修改hosts文件来映射域名和IP,但手机却不容易办到,开始是想着自己搭个DNS服务器,但发现小米路由器可以自定义hosts,这样连接这台路由器的设备就都能解析自定义的域名了。这么折腾主要是后续计划配置外网访问,域名已经在阿里云申请,搞个外网IPv6一解析,不在家也能访问自己的NAS,但回家后,就希望依旧用域名,但又不是走外网。

成果

这还要什么网盘,哈哈。
在这里插入图片描述
在这里插入图片描述

后续

这里使用了硬件RAID,阵列卡要是坏了,又买不到相同型号的,就有丢失数据的风险,所以后续打算更改为软件RAID,更灵活,出错了更容易恢复。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐