10 KiB
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才好安装
进入grub boot界面。选择第一项进入安装界面,也可以第二项,会检查安装媒体,我这里就不检查了。
注意:如果不是虚拟机,使用U盘启动物理机的话,要按‘e'修改第一项。把“LABEL=ROCKY-9-4-x86_64-dvd 改掉。如下图。不同机器和不同U盘写入工具有所区别,也有可能是/dev/sda4, 根据当前已经安装硬盘数,也可能是 /dev/sdi1或/dev/sdi4
进入安装语言选择
不要问,选English。纯Linux选个中文我看着就难受。Continue 进入安装配置
配置安装源,从网络安装 这里使用中国科技大学的源 https://mirrors.ustc.edu.cn/rocky/9/BaseOS/x86_64/os/ 配好点Done
选择安装内容,物理机建议装个界面,因为all in one,没事还能拿来写写代码,当然安装界面会耗电多一些。如果不需要界面,建议minimal 。选完点Done
配置磁盘,这里我custom。物理机大磁盘强烈建议custom。点done进入自定义配置界面
我先偷懒点个自动分区 如果你不知道还有多少可用空间,在分区大小哪里写个超大值,点Update 就会用光所有剩余空间。改完点Done。如果没有swap或者点一次没效果,可能要连点两次Done 点Accept Changes
关闭KDump
创建用户
配置机器名和网络
等待安装完成
一切配置完成,就可以点Begin Installation了 等待安装完成,拔掉U盘(虚拟机弹出ISO)按Reboot
系统配置
输入账号密码,进入系统。打开terminal
使用 sudo visudo 命令修改sudo无需密码。:set nu可以显示行号,:107可以直接定位到这一行。i进入编辑模式。注释107行,取消注释110行。CTRL+C退出编辑模式。:wq 退出并保存。
使用国内源(这里用中科大的)
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上操作。
更新系统
sudo dnf makecache && sudo dnf update
关闭防火墙。防火墙配置比较复杂,这里不做介绍
sudo systemctl disable --now firewalld
修改selinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
sudo setenforce 0
查看ip,方便后面ssh
ip addr
安装常用软件
sudo dnf install vim unzip tar ungzip bzip2
磁盘分区与格式化
分区使用命令行分区工具parted
parted需要管理权限。
sudo parted /dev/sda #选择第一个磁盘,直接输入sudo parted 默认选择/dev/sda
parted命令说明
print all #显示当前系统所有磁盘
select /dev/sdb #选择磁盘/dev/sdb 之后的所有操作均是针对于/dev/sdb直至下一个select
mktable gpt # 创建gpt分区表。如果已经有分区的磁盘,会提示,输入yes即可覆盖
mkpart primary 0% 100% #创建一个主分区,并且使用全部容量 0%开始100%结束。如果要分多个区可以自行修改。
q #quit 退出
mkfs 分区格式化
mkfs需要管理员权限
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
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开机自启动
sudo systemctl enable --now docker
lvm分区
进入root账号
sudo -i
创建pv,删除使用pvremove
pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
查看创建的pv
```bash
pvs #pvdisplay
创建vg 删除使用vgremove
vgcreate vg_data /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
查看创建的vg
vgs #vgdisplay
创建 lv 删除使用 lvremove
lvcreate -l 100%FREE -n lv_data vg_data
创建RAID10 lv。这里是软RAID,有条件可以硬raid。
lvcreate --type raid10 --raidintegrity y -L 7.2T -n lv_data vg_raid
查看创建的lv
lvs #lvdisplay
格式化lvm磁盘。raid10盘格式化时间比较长
mkfs.xfs /dev/mapper/vg_data-lv_data
mkfs.xfs /dev/mapper/vg_raid-lv_data
挂载lvm磁盘
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挂载进去可能没权限读写
查看磁盘信息
df -lh
安装配置nfs
安装
sudo dnf install nfs-utils rpcbind
设置为开机自启动
sudo systemctl enable --now ntfs-server rpcbind
配置共享目录
vim /etc/exports #下面是内容,这里视频使用ro权限
/data/video 10.0.0.0/24(ro,insecure,sync,no_root_squash,no_subtree_check)
应用
sudo exportfs -a
创建网桥
不需要虚拟机不需要此步骤
查看当前网络连接信息
nmcli con show
创建网桥
nmcli con add type bridge ifname br0
绑定网桥到网卡
nmcli con add type bridge-slave ifname eno1 master br0
启动网桥
nmcli con up br0
配置 ip地址
sudo nmcli c edit br0
以下命令在nmcli命令行下
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
重启网卡/重启电脑
sudo nmcli c reload
sudo nmcli c down br0 && sudo nmcli c up br0
安装虚拟机
使用难用的virt-manager界面操作。
查看一下库里有哪些软件组
sudo dnf grouplist
安装相关软件
sudo dnf groupinstall 'Virtualization Host'
sudo dnf install virt-manager
注意: 也可以只安装virt,全命令行操作。
转换openwrt的img文件为qcow2格式
qemu-img convert -o qcow2 openwrt.img openwrt.qcow2
docker部署filebrowser/qbittorrent/jellyfin
jellyfin
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
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
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
sudo dnf install nginx
配置filebrowser,能用就行,不做优化。替换自己的域名
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,能用就行,不做优化。替换自己的域名
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,能用就行,不做优化。替换自己的域名
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,岂不美哉!