一个计算机技术爱好者与学习者

0%

个人电脑作为Ubuntu服务器

1. 前言

最近买了个85寸电视,就想搞个NAS。
看了看价格,绿联NAS DX4600 2000左右,蜗牛星际NAS 1000左右,硬盘还需要另外购买。贫穷,让我想到了废弃已久的华为荣耀笔记本电脑。
要不然,用它作为NAS?还可以作为软路由?还可以部署Nginx、Jupyter、ChatGPT代理等常用服务,还可以参考 Awesome-Selfhosted 部署更多有趣的项目,想想还挺不错。搞起来!

2. NAS与软路由简介

NAS,全称为网络附属存储(Network Attached Storage),是一种专门的网络存储设备。NAS 设备通过网络直接连接到其他设备,用户可以随时随地通过网络存取NAS中的数据。
NAS设备的主要功能是提供数据存储和备份,同时还可能有流媒体服务、打印服务等其他功能。NAS设备可用于家庭和企业,帮助实现数据共享和存储管理,特别在企业场景下,NAS可以优化数据备份、共享和远程访问等业务流程。NAS设备可能通过NFS、FTP、SMB、WebDAV、DLNA等协议对外提供服务。

软路由是指使用普通计算机和路由软件实现的具有路由功能的设备。与一般的硬件路由器不同,软路由器可以运行在商用操作系统上,并由用户自定义和配置,以满足特定网络环境和应用的需求。软路由可以提供诸如路由转发、防火墙、VPN、流量管理等多种功能。

NAS和软路由一体化设备,就是同时实现网络路由和数据存储功能的设备。它既能提供网络路由和防火墙等网络服务,又能提供文件共享和数据备份等存储服务。以下是几种常见的一体化方案:

  • 在通用Linux系统中安装NAS软件和路由软件。通用Linux系统中(如Ubuntu、CentOS),安装NAS软件来实现存储功能,安装路由软件来实现路由功能。
  • 在NAS系统中安装路由软件。NAS系统中(如FreeNAS、OpenMediaVault),安装路由软件来实现路由功能。
  • 在软路由系统中安装NAS软件。软路由系统中(如OpenWrt、pfSense、OPNsense),安装NAS软件来实现存储功能。
  • 虚拟化技术。在主机上创建两个虚拟机,分别安装软路由系统和NAS系统;或者使用Docker,运行软路由系统和NAS系统。
  • 商业一体化设备。一些厂商推出了一体化的软路由NAS设备,如华硕的RT-AC86U、群晖的DS216j等。这些设备可以同时实现软路由和NAS的功能,方便用户快速搭建家庭网络。

参考文档:

3. 安装Ubuntu系统

参考文档:Create a bootable USB stick on macOS

1、服务器系统选择 ubuntu-18.04.6-desktop-amd64.iso
之所以选择desktop版,是因为desktop版是图形化界面,初始化配置很方便。后期不想要desktop的话,可以卸载掉。

2、使用balenaEtcher制作一个U盘启动盘

3、笔记本插入U盘,开机选择从U盘启动

4、根据提示安装Ubuntu系统

系统分区时注意事项:

  • 建议手动进行分区,New Partition Table,如果分错了就Revert重新搞。
  • 32MB给 bios,格式reserved bios boot area
  • 500MB给 efi,格式efi
  • 2GB 给 /boot,格式ext4
  • 其余空间给 /,格式ext4

在现代电脑系统(使用UEFI模式)中,电脑首先引导到EFI分区,EFI分区中的UEFI启动加载器,接着加载/boot分区中的操作系统内核,然后操作系统开始运行。

参考文档:

4. 初始化Ubuntu系统

4.1. 配置固定IP

图形界面配置。

或者参考《Ubuntu18配置静态IP》,使用命令行配置。

4.2. 关闭自动更新

1
2
3
systemctl status unattended-upgrades
systemctl stop unattended-upgrades
systemctl disable unattended-upgrades

4.3. 配置合上屏幕不休眠

1、编辑logind配置

1
vim /etc/systemd/logind.conf

修改其中的配置为:

1
HandleLidSwitch=ignore

HandleLidSwitch是指笔记本屏幕合起来,设置为ignore,也就是笔记本屏幕合起来时不进行任何改变。

2、重启 systemd-logind

1
systemctl restart systemd-logind

4.4. 断网自动重连

1、修改网络管理器配置

1
vim /etc/NetworkManager/NetworkManager.conf

其中的 ifupdown 部分修改为:

1
2
[ifupdown]
managed=true

2、重启网络管理器

1
service network-manager restart

参考文档:解决Ubuntu18.04网络不自动连接问题

4.5. 安装向日葵

1、参考向日葵官方文档,安装向日葵

2、安装 lightdm ,并重启主机

1
2
apt install -y lightdm
reboot

参考文档:

5. 安装配置Samba

5.1. 安装Samba

1、安装Samba

1
apt install samba

2、查看Samba服务状态

1
systemctl status nmbd

5.2. 配置Samba

1、创建共享目录,并给sambashare用户组设置所有目录的读写权限

1
2
3
mkdir -p /data/samba/video
find /data/samba -type d -exec chgrp sambashare {} \;
find /data/samba -type d -exec chmod 770 {} \;

其中,sambashare用户组是在安装Samba过程中自动创建的。

3、创建samba用户并授权

1
2
useradd -m -s /usr/sbin/nologin -G sambashare samba
smbpasswd -a samba

Samba权限控制使用Linux用户和组的权限系统,但具有自己的身份验证机制,与标准Linux身份验证分开。

4、配置共享目录和用户
编辑samba配置文件

1
vim /etc/samba/smb.conf

在文件最后添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[video]
path = /data/samba/video
browseable = yes
read only = no
force create mode = 0660
force directory mode = 2770
valid users = @sambashare @sadmin

#[doc]
# path = /data/samba/doc
# browseable = no
# read only = yes
# force create mode = 0660
# force directory mode = 2770
# valid users = samba @sambashare

配置说明:

  • [video][doc] 表示登录时使用的共享名称。
  • path 表示共享的目录。
  • browseable 表示可浏览,是否可在共享列表中列出此共享。如果设置为no,其他用户将看不到共享目录。
  • read only 表示valid users列表中指定的用户是否设置仅允许读,如果值yes,则仅允许读。
  • force create mode 表示此共享创建文件时设置的文件权限模式。
  • force directory mode 表示此共享创建目录时设置目录权限的模式。
  • valid users 表示允许访问共享的用户和组的列表。群组以@符号为前缀。

更多配置选项,请参考文档 smb.conf — The configuration file for the Samba suite

5、重启samba

1
2
systemctl restart nmbd
systemctl status nmbd

5.3. 测试使用Samba

1、安装 samba client

1
apt install smbclient

2、创建测试文件

1
touch test.txt

3、连接samba server

1
smbclient //192.168.5.233/users -U samba

4、上传下载文件

1
2
3
4
smb: \> ls
smb: \> put test.txt test.txt
smb: \> get test.txt test2.txt
smb: \> exit

下载文件时,还可以使用smbget工具

1
smbget -U samba smb://192.168.5.233/video/test.txt -o test3.txt

5.4. 配置防火墙

1
ufw allow 'Samba'

6. 本地挂载阿里云盘

6.1. 安装Docker

参考文档:《Docker入门篇》

6.2. 获取阿里云盘refresh token

参考文档dockerhub - messense/aliyundrive-webdav通过在线工具获取 refresh token

以前通过浏览器自行获取refresh token的方法已失效,详情参考 Error: Invalid refresh token value found in –refresh-token argument

6.3. 启动阿里云盘webdav容器

1、拉取webdav镜像

1
docker pull messense/aliyundrive-webdav:2.3.3

2、启动webdav容器(本地文件服务器)

1
2
3
4
5
6
7
docker run -d --name=aliyundrive-webdav \
--restart=unless-stopped \
-p 8080:8080 \
-e REFRESH_TOKEN='your token' \
-e WEBDAV_AUTH_USER=admin \
-e WEBDAV_AUTH_PASSWORD=admin\
messense/aliyundrive-webdav:2.3.3

3、查看webdav容器状态

1
2
docker ps
docker logs aliyundrive-webdav

6.4. 挂载阿里云盘

1、安装webdav驱动

1
apt install -y davfs2

2、创建挂载目录

1
mkdir -p /data/aliyundrive

3、挂载阿里云盘

1
mount -t davfs http://192.168.5.233:8080/ /data/aliyundrive

4、查看挂载

1
2
cd /data/aliyundrive
ls -l

6.5. 通过samba共享

本地目录挂载阿里云盘后,和其他普通目录一样,也可以通过samba共享给其他主机。
samba配置如下:

1
2
3
4
5
[aliyundrive]
path = /data/aliyundrive
browseable = yes
read only = yes
valid users = @sambashare @sadmin

6.6. 拷贝阿里云盘中的文件到本地

如果担心访问阿里云盘时候的网络不稳定,可以把一部分文件下载到本地磁盘。

1
screen rsync -P -azv '爱情公寓' /data/samba/video

下载速度很快,家庭千兆宽带大概平均 10MB/s,峰值 30MB/s。

7. 安装配置WebDAV

7.1. WebDAV简介

WebDAV(Web-based Distributed Authoring and Versioning)是一种基于HTTP协议的通信协议,用于使用户可以方便地对服务器上的文档进行远程编辑和管理。WebDAV扩展了HTTP/1.1协议,增加了一系列的方法,以支持文件的创建、移动、复制和删除等操作。

使用WebDAV需要两个基本组件:WebDAV客户端和服务器。WebDAV客户端可以是任何支持该协议标准的软件,如一些文件管理器、专门的WebDAV应用程序或甚至是某些操作系统内置的文件浏览功能。服务器端则需要运行支持WebDAV的服务器软件,如Apache的mod_dav模块。

设置WebDAV环境时,通常需要在服务器上进行配置,以确保正确的文件权限、认证和安全设置。出于安全考虑,WebDAV通信应该通过SSL/TLS加密来保护数据传输过程中的安全性(使用HTTPS协议而不是HTTP)。

相较于Samba,WebDAV的权限检查更严格,比如目录中存在权限为问号的文件,那么整个目录都无法访问。

7.2. 安装WebDAV服务端

1、安装Apache HTTP服务器

1
2
apt update
apt install apache2

2、启用Apache的WebDAV模块

1
a2enmod dav dav_fs

3、重启Apache

1
systemctl restart apache2

7.3. 配置WebDAV服务端

1、创建WebDAV共享目录,并授权

1
2
mkdir -p /data/samba
find /data/samba -type d -exec chmod 777 {} \;

这里复用Samba共享目录,同时修改权限为777,否则 www-data 用户无权读写。

2、配置WebDAV服务

1
vim /etc/apache2/sites-available/000-default.conf

VirtualHost标签中,添加如下内容:

1
2
3
4
5
6
7
8
Alias /webdav /data/samba
<Location /webdav>
DAV On
AuthType Basic
AuthName "WebDAV"
AuthUserFile /etc/apache2/webdav.password
Require valid-user
</Location>

3、创建用户名和密码

1
htpasswd -bc /etc/apache2/webdav.password user1 password1

增加用户名和密码:

1
htpasswd -b /etc/apache2/webdav.password user2 password2

4、重启Apache

1
systemctl restart apache2

7.4. 测试使用WebDAV

7.4.1. 浏览器访问

假设主机IP为 192.168.5.233
浏览器访问 http://192.168.5.233/webdav
访问时,会提示输入用户名和密码,证明我们的webdav配置正常。

登录后,会提示 Forbidden You don’t have permission to access this resource.
这是正常的,因为缺少 index.html 这种文件。

假设有一个文件路径为:/data/samba/test.png
那么通过浏览器可以直接访问:http://192.168.5.233/webdav/test.png

7.4.2. cadver客户端访问

1
2
3
apt install cadaver

cadaver http://192.168.5.233/webdav

连接时,会提示输入用户名和密码。

连接成功后,会看到 cadaver 命令行提示符,此时可以使用以下命令:

  • ls: 列出当前目录中的文件和目录。
  • cd directory: 更改到名为 directory 的目录。
  • pwd: 显示当前目录的完整路径。
  • get filename: 下载文件 filename 到本地当前目录。
  • put filename: 上传本地文件 filename 到当前的WebDAV目录。
  • mget *.ext: 下载当前目录中所有扩展名为 .ext 的文件。
  • mput *.ext: 上传当前本地目录中所有扩展名为 .ext 的文件。
  • delete filename: 删除文件 filename
  • mkcol directory: 创建一个名为 directory 的新目录。
  • move source destination: 移动或重命名文件 sourcedestination
  • copy source destination: 复制文件 sourcedestination