手里有一台N100小主机,闲置很久了。之前用过飞牛 ,为什么不用了呢。因为挂载磁盘,必须格式化。还有掉盘后自动挂载,磁盘挂载目录就会变掉。导致内网磁盘共享经常会无法正常使用。痛定思痛,决定基于Ubuntu,搭建适合自己使用的 NAS 工具。
安装系统
没什么好讲的,使用 Rufus
制作引导盘。下载镜像
后,丢在U盘根目录即可。本次使用的是 Ubuntu 26.04.1 LTS。
插入U盘,开机按 F7 进入快速引导,选择U盘进行安装。
唯一需要注意的就是,别把U盘格式化了。
磁盘规划
当前小主机内有Nvme(256GB)、SSD(500GB),外接(30TBx2)硬盘盒。初步规划是:
- Nvme:作为系统盘
- SSD:作为
Docker数据盘,后续可能会存放其他对速度有追求的项目 - 外接硬盘盒:作为
NAS的主盘,挂载到Docker中。同时通过脚本,实现冷备份(盘1定时备份到盘2)
/mnt/
├── ssd/
│ └── docker
│ ├── cache # 挂载目录,主要用于存储不重要的数据
│ ├── compose # 各服务的部署配置
│ ├── config # 挂载目录,部分服务额外的config挂载
│ ├── data # 挂载目录,部分服务额外的data挂载
│ └── logs # 挂载目录,部分服务额外的日志挂载(不参与冷备份)
└── 其他挂载盘/ # 后续规划的共享文件目录
安装常用工具
sudo apt update
sudo apt install -y ca-certificates curl git
配置免sudo
sudo vim /etc/sudoers.d/ubuntu
输入如下内容
ubuntu ALL=(ALL:ALL) NOPASSWD: ALL
也可以直接用命令写入,ubuntu 替换为实际登录用户名:
echo 'ubuntu ALL=(ALL:ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/ubuntu > /dev/null
sudo chmod 0440 /etc/sudoers.d/ubuntu
这里使用 sudo tee 写入系统文件,因为 sudo echo ... > 文件 中的重定向仍由当前用户执行。
配置SSH连接
Ubuntu安装后,默认是启用SSH的,但是无法远程访问(不想在屏幕前蹲着)。所以做如下修改:
修改 /etc/ssh/sshd_config.d/50-cloud-init.conf,添加如下内容。允许使用密码远程连接
PasswordAuthentication yes
首次配置时,也可以直接用命令写入并重启 SSH:
echo 'PasswordAuthentication yes' | sudo tee /etc/ssh/sshd_config.d/50-cloud-init.conf > /dev/null
sudo systemctl restart ssh
在 PC、笔记本上,创建密钥,使用账号密码连接服务器
在服务器上配置刚才创建的公匙 ~/.ssh/authorized_keys
并再次修改 /etc/ssh/sshd_config.d/50-cloud-init.conf
这里禁用了密码登录,并开启了一些必要的安全设置
#PasswordAuthentication yes
## 只允许公钥认证
PubkeyAuthentication yes
AuthenticationMethods publickey
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
# 使用普通管理员账户登录,再通过 sudo 提权
PermitRootLogin no
# 禁止 Agent、TCP、Unix socket、X11 等转发
DisableForwarding yes
# 禁止创建网络隧道设备及用户自定义登录环境
PermitTunnel no
PermitUserEnvironment no
# 禁用基于主机信任的认证
HostbasedAuthentication no
IgnoreRhosts yes
# 限制未认证连接的尝试次数与等待时间
MaxAuthTries 3
LoginGraceTime 30
# 记录登录使用的公钥指纹,方便审计
LogLevel VERBOSE
测试配置
sudo sshd -t
重启SSH
sudo systemctl restart ssh
重要:新开一个窗口,使用创建的密钥进行连接验证。
中文乱码
如果在安装的时候,选择的语言为英语,那么中文显示大概率会乱码。使用如下方案进行修正
cat >> ~/.bashrc <<'EOF'
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
EOF
source ~/.bashrc