家里服务器安装纪实

家里的gen8运行了很久的黑裙,在没出问题的时候运行都是非常好的。直到出现问题。我买了10tb的硬盘回来更换,结果一步错步步错,最好整的moments和drive都不见了。这时候才确认,群晖的系统只是暂时使用的,不能用来保存长久的资料。只能更换系统,做了很多比较后,最后定下来用proxmox的系统,可以用到虚拟机;文件系统用mergerFS+snapraid,做到本地备份;同时,前篇文章设置了rclone+restic的远程备份系统。这样下来,做到了备份的3+2+1原则,理论上所有数据都能恢复,只是时间问题。

  1. 安装proxmox,直接用官方的iso,放gen8 iLo启动安装。因为是装到sata5的ssd硬盘,这里需要把sata5设为启动盘,根据这个设置。
  2. 安装完成后,设置硬盘的文件系统。主要参考文章1文章2.
  3. 安装mergerFS。The default is existing path, most free space (EPMFS) which you can read more about in the mergerfs documentation.
    #安装mergerFS
    apt install mergerfs fuse
    
    #Mount point creation
    mkdir /mnt/disk{1,2,3,4,5}
    mkdir /mnt/parity{1,2} # adjust this command based on your parity setup
    mkdir /mnt/storage
    
    #Create fstab entries
    ls /dev/disk/by-id
    ...
    ata-Hitachi_HDS5C3030ALA630_MJ1311YNG5SD3A           
    ata-TOSHIBA_DT01ACA300_X3544DGKS-part1         
    ata-Hitachi_HDS5C3030ALA630_MJ1311YNG5SD3A-part1     
    ata-WDC_WD30EFRX-68AX9N0_WD-WCC1T0632015
    ...
    
    #我现在使用的fstab
    #data
    /dev/disk/by-id/ata-TOSHIBA_HDWG11A_49G0A006FATG /mnt/disk1 ext4 defaults 0 0
    /dev/disk/by-id/ata-WDC_WD100EFAX-68LHPN0_2YK8XPPD-part2 /mnt/disk2 ext4 defaults 0 0
    /dev/disk/by-id/ata-ST3000VX000-1CU166_W1F4FJCX /mnt/disk3 ext4 defaults 0 0
    # parity
    /dev/disk/by-id/ata-TOSHIBA_HDWG11A_49C0A008FATG /mnt/parity ext4 defaults 0 0
    /mnt/disk* /mnt/storage fuse.mergerfs direct_io,defaults,allow_other,minfreespace=50G,fsname=mergerfs 0 0
    df -h
    
  4. 安装snapraid.具体操作的manual,可以看这里
    apt install git
    git clone https://github.com/IronicBadger/docker-snapraid.git
    cd docker-snapraid/
    chmod +x build.sh
    ./build.sh
    cd build/
    dpkg -i snapraid*.deb
    
    snapraid -V
    snapraid sync
    
  1. snapraid相关的脚本。主要参考了这里,我就不多写了。另外也存放在了appdata文件夹中以备用,记得用cronjob打开。

  2. 配置samba和NFS

    apt install samba nfs-kernel-server -y
    systemctl restart smbd
    
    #我的/etc/samba/smb.conf内容
    [global]
    workgroup = home
    server string = epsilon
    security = user
    guest ok = yes
    map to guest = Bad Password
    
    log file = /var/log/samba/%m.log
    max log size = 50
    printcap name = /dev/null
    load printers = no
    # Samba Shares
    [homes]
    comment = lin home folder
    path = /mnt/disk1/homes
    browseable = yes
    read only = no
    guest ok = no
    
    [storage]
    comment = Storage on epsilon
    path = /mnt/storage
    browseable = yes
    read only = no
    guest ok = yes
    [downloads]
    comment = Storage on epsilon
    path = /mnt/disk3/downloads
    browseable = yes
    read only = no
    
    [user1]
    path = /home/share/user1
    read only = no
    browseable = yes
    force create mode = 0660
    force directory mode = 2770
    valid users = @user1
    
    [data]
    path = /mnt/storage/data
    browseable = yes
    read only = no
    
    #我的/etc/exports内容
    /mnt/storage 10.0.0.1/24(rw,fsid=2,sync,no_root_squash,insecure,no_subtree_check)
    
    exportfs -ra
    systemctl restart nfs-kernel-server
    
  3. docker-compose的安装。必须严格看教程来。docker安装下来是为了使用traefik反向代理,并产生ssl证书。将以下三个文件(traefik.toml, docker-compose.yml, acme.json)都放在文件目录/mnt/storage/docker/traefik下,并设立相应的volume目录,就可以直接达成目的了。

    touch acme.json
    chmod 0600 acme.json
    
    #端口映射,路由器确认;
    #网址等搞定 cloudflare先转成A记录;之后再测试cname等,cname指向是可以的;
    #用同一个网络 docker
    #backend 和 frontend 都是一对一的。如果混合一起,一定是在docker compose里面写不对
    #plex token claim
    #https://aria2.colors4.us:443 rpc 连接
    #NAS中如Drive需要用到6690的端口,直接映射就好,不要用traefik。因其只是http proxy。只能做file的proxy,nas的情况。SSH也是类似情况。
    
    #docker命令有如下
    docker-compose up -d
    docker-compose stop
        
    
  1. 其他一些小东西的设置
  • mutt+gmail邮件设置
  • docker-compose.yml中,必须用绝对路径/mnt/disk1/docker/...,不要用mergerFS的路径/mnt/storage,系统可能无法辨认。
  • docker中的PUID,PGID的设置。用于部分docker无法用root启动之用。
    useradd -ms /bin/bash lin
    groupadd docker
    usermod -aG docker lin
    newgrp docker //restart vm
    docker run hello-world
    chown lin:lin docker/bookstack
    
  1. docker测试中一些常见的错误和修复办法
  • traefik中抄录的port号码错误
  • 进入portainer中看container中的log