# Linux系统部署nas服务 最近因为频繁停电,用了半年的黑裙变成只读了,但是扫描之后,硬盘并没有问题。本人对群晖也不熟悉,网上搜了一圈也没处理好,一气之下备份好数据,格式化之后装了个truenas。可是好景不长,truenas又因为我配置太差,开机10分钟就OOM了,忍无可忍,要自由还是原生Linux,直接装了rockylinux9.4,所有服务全部手动配置,现在已经稳定工作3天。 ## 配置: CPU: AMD R5 5600G 主板:华硕TUFB550 WIFI 2 内存:光威16GB x2 硬盘:西数紫盘6TBx4 + 西数紫盘4TBx4 目前已安装并运行的服务:nfs, filebrowser,qBittorrent,openWRT(kvm),jellyfin ## 安装教程 ### 安装Rockylinux9((虚拟机截图。原服务器配置过程未截图) 镜像下载地址:https://mirrors.ustc.edu.cn/rocky/9/isos/x86_64/Rocky-9-latest-x86_64-minimal.iso 也可以下载完整的dvd,都一样,如果是本地安装写入U盘后需要把iso也考进U盘,不然用网络装。现在网络这么发达了,我基本上都是用网络装。 #### 先来一张hype-v虚拟机(第二代)截图,为什么停在这个界面呢,因为要展示一下,需要关闭Security Boot才好安装 ![](1.png) #### 进入grub boot界面。选择第一项进入安装界面,也可以第二项,会检查安装媒体,我这里就不检查了。 ![](2.png) 注意:如果不是虚拟机,使用U盘启动物理机的话,要按‘e'修改第一项。把“LABEL=ROCKY-9-4-x86_64-dvd 改掉。如下图。不同机器和不同U盘写入工具有所区别,也有可能是/dev/sda4, 根据当前已经安装硬盘数,也可能是 /dev/sdi1或/dev/sdi4 ![](3.png) #### 进入安装语言选择 ![](4.png) 不要问,选English。纯Linux选个中文我看着就难受。Continue 进入安装配置 ![](5.png) #### 配置安装源,从网络安装 这里使用中国科技大学的源 https://mirrors.ustc.edu.cn/rocky/9/BaseOS/x86_64/os/ 配好点Done ![](6.png) #### 选择安装内容,物理机建议装个界面,因为all in one,没事还能拿来写写代码,当然安装界面会耗电多一些。如果不需要界面,建议minimal 。选完点Done ![](7.png) #### 配置磁盘,这里我custom。物理机大磁盘强烈建议custom。点done进入自定义配置界面 ![](8.png) 我先偷懒点个自动分区 ![](9.png) 如果你不知道还有多少可用空间,在分区大小哪里写个超大值,点Update 就会用光所有剩余空间。改完点Done。如果没有swap或者点一次没效果,可能要连点两次Done ![](10.png) 点Accept Changes #### 关闭KDump ![](12.png) #### 创建用户 ![](13.png) #### 配置机器名和网络 ![](14.png) #### 等待安装完成 一切配置完成,就可以点Begin Installation了 ![](11.png) 等待安装完成,拔掉U盘(虚拟机弹出ISO)按Reboot ## 系统配置 输入账号密码,进入系统。打开terminal 使用 sudo visudo 命令修改sudo无需密码。:set nu可以显示行号,:107可以直接定位到这一行。i进入编辑模式。注释107行,取消注释110行。CTRL+C退出编辑模式。:wq 退出并保存。 ![](15.png) ### 使用国内源(这里用中科大的) ```bash sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.ustc.edu.cn/rocky|g' -i.bak /etc/yum.repos.d/rocky-extras.repo /etc/yum.repos.d/rocky.repo ``` 系统安装配置完成。接下来操作都是命令行操作,不再附截图。可以使用Windows terminal远程操作,也可以在本机的terminal上操作。 ### 更新系统 ```bash sudo dnf makecache && sudo dnf update ``` ### 关闭防火墙。防火墙配置比较复杂,这里不做介绍 ```bash sudo systemctl disable --now firewalld ``` ### 修改selinux ```bash sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config sudo setenforce 0 ``` ### 查看ip,方便后面ssh ```bash ip addr ``` ### 安装常用软件 ```bash sudo dnf install vim unzip tar ungzip bzip2 ``` ### 磁盘分区与格式化 分区使用命令行分区工具`parted` **parted需要管理权限。** ```bash sudo parted /dev/sda #选择第一个磁盘,直接输入sudo parted 默认选择/dev/sda ``` parted命令说明 ```bash print all #显示当前系统所有磁盘 select /dev/sdb #选择磁盘/dev/sdb 之后的所有操作均是针对于/dev/sdb直至下一个select mktable gpt # 创建gpt分区表。如果已经有分区的磁盘,会提示,输入yes即可覆盖 mkpart primary 0% 100% #创建一个主分区,并且使用全部容量 0%开始100%结束。如果要分多个区可以自行修改。 q #quit 退出 ``` mkfs 分区格式化 **mkfs需要管理员权限** ```bash sudo mkfs.ext4 /dev/sda1 #将/dev/sda第一个分区格式化为ext4格式 sudo mkfs.ext4 -T /dev/sda1 #将/dev/sda第一个分区格式化为ext4格式,大硬盘用这个命令快 sudo mkfs.xfs /dev/sda1 #将/dev/sda第一个分区格式化为xfs格式。 sudo mkfs.ntfs /dev/sda1 #将/dev/sda第一个分区格式化为ntfs格式。此格式需要安装epel软件库和ntfsprogs, ntfs-3g软件包 ``` ***我一般喜欢用xfs。*** ### 安装docker ```bash sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo sudo sed -i 's|download.docker.com|mirrors.ustc.edu.cn/docker-ce|g' /etc/yum.repo.d/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ``` 启动docker并配置docker开机自启动 ```bash sudo systemctl enable --now docker ``` ### lvm分区 进入root账号 ```bash sudo -i ``` 创建pv,删除使用pvremove ```bash pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 查看创建的pv ```bash pvs #pvdisplay ``` 创建vg 删除使用vgremove ```bash vgcreate vg_data /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 ``` 查看创建的vg ```bash vgs #vgdisplay ``` 创建 lv 删除使用 lvremove ```bash lvcreate -l 100%FREE -n lv_data vg_data ``` 创建RAID10 lv。这里是软RAID,有条件可以硬raid。 ```bash lvcreate --type raid10 --raidintegrity y -L 7.2T -n lv_data vg_raid ``` 查看创建的lv ```bash lvs #lvdisplay ``` 格式化lvm磁盘。raid10盘格式化时间比较长 ```bash mkfs.xfs /dev/mapper/vg_data-lv_data mkfs.xfs /dev/mapper/vg_raid-lv_data ``` 挂载lvm磁盘 ```bash mkdir /data /private echo '/dev/mapper/vg_data-lv_data /data xfs defaults 1 2' >> /etc/fstab echo '/dev/mapper/vg_raid-lv_data /private xfs defaults 1 2' >> /etc/fstab mount -a exit chown -R $(whoami) /data chown -R $(whoami) /private ``` **注意最后两行修改所有者,不改的话docker挂载进去可能没权限读写** 查看磁盘信息 ```bash df -lh ``` 安装配置nfs 安装 ```bash sudo dnf install nfs-utils rpcbind ``` 设置为开机自启动 ```bash sudo systemctl enable --now ntfs-server rpcbind ``` 配置共享目录 ```bash vim /etc/exports #下面是内容,这里视频使用ro权限 /data/video 10.0.0.0/24(ro,insecure,sync,no_root_squash,no_subtree_check) ``` 应用 ```bash sudo exportfs -a ``` 创建网桥 不需要虚拟机不需要此步骤 查看当前网络连接信息 ```bash nmcli con show ``` 创建网桥 ```bash nmcli con add type bridge ifname br0 ``` 绑定网桥到网卡 ```bash nmcli con add type bridge-slave ifname eno1 master br0 ``` 启动网桥 ```bash nmcli con up br0 ``` 配置 ip地址 ```bash sudo nmcli c edit br0 ``` 以下命令在nmcli命令行下 ```bash print ipv4 set ipv4.addresses 10.0.0.128/24 set ipv4.gateway 10.0.0.254 set ipv4.dns 10.0.0.254 223.5.5.5 save q ``` 重启网卡/重启电脑 ```bash sudo nmcli c reload sudo nmcli c down br0 && sudo nmcli c up br0 ``` 安装虚拟机 使用难用的virt-manager界面操作。 查看一下库里有哪些软件组 ```bash sudo dnf grouplist ``` 安装相关软件 ```bash sudo dnf groupinstall 'Virtualization Host' sudo dnf install virt-manager ``` 注意: 也可以只安装virt,全命令行操作。 转换openwrt的img文件为qcow2格式 ```bash qemu-img convert -o qcow2 openwrt.img openwrt.qcow2 ``` ## docker部署filebrowser/qbittorrent/jellyfin ### jellyfin ```bash sudo docker run -d -p 8096:8096 --name jellyfin --user 1000:1000 --volume /opt/jellyfin/config:/config --volume /opt/jellyfin/cache:/cache --mount type=bind,source=/data/video,target=/media --restart=unless-stopped jellyfin/jellyfin ``` ### filebrowser ```bash sudo docker run --name filebrowser -m 4g --restart unless-stopped -d -v /data:/srv/data -v /private:/srv/private -v /opt/filebrowser/filebrowser.db:/database/filebrowser.db -v /opt/filebrowser/settings.json:/config/settings.json -e PUID=$(id -u) -e PGID=$(id -g) -p 8080:80 filebrowser/filebrowser:s6 ``` ### qbittorrent ```bash sudo docker run -d --name=qbittorrent -e PUID=1000 -e PGID=1000 -e TZ=Asia/Shanghai -e WEBUI_PORT=8081 -e TORRENTING_PORT=6881 -p 8081:8081 -p 6881:6881 -p 6881:6881/udp -v /opt/qbittorrent/config:/config -v /data/downloads:/downloads --restart unless-stopped lscr.io/linuxserver/qbittorrent:latest ``` ### 配置nginx 安装nginx ```bash sudo dnf install nginx ``` 配置filebrowser,能用就行,不做优化。替换自己的域名 ```bash cat EOF< |sudo tee -a /etc/nginx/conf.d/filebrowser.conf server { server_name files.nas.com; location / { proxy_pass http://localhost:8080; } listen 80; } EOF ``` 配置qbittorrent,能用就行,不做优化。替换自己的域名 ```bash cat EOF< |sudo tee -a /etc/nginx/conf.d/qbittorrent.conf server { server_name bt.nas.com; location / { proxy_pass http://localhost:8081; } listen 80; } EOF ``` 配置jellyfin,能用就行,不做优化。替换自己的域名 ```bash cat EOF< |sudo tee -a /etc/nginx/conf.d/jellyfin.conf server { server_name video.nas.com; location / { proxy_pass http://localhost:8096; } listen 80; } EOF ``` 还有K8S,已经装好了,暂时就不写了。准备用coredns暂时也还没有配置。原生Linux,服务全部自定义,没有继承nas系统的各种限制,就一个字,爽!没事还能拿来玩个steam,岂不美哉!