首页
社区
课程
招聘
[原创]Ubuntu docker的NAS方案
发表于: 2023-7-14 10:33 12470

[原创]Ubuntu docker的NAS方案

2023-7-14 10:33
12470

物理机安装Ubuntu

844K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3@1H3i4K6g2X3y4U0l9I4z5e0l9$3z5o6u0Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0p5I4z5o6M7J5x3K6b7$3z5l9`.`. //安装Ubuntu
95fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1#2x3h3y4@1L8#2)9J5k6h3y4G2L8g2)9J5c8X3q4J5N6r3W2U0L8r3g2Q4x3V1j5%4x3U0p5K6z5e0y4Q4x3X3g2Z5N6r3#2D9 //Ubuntu设置静态IP
8a8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4q4I4i4K6g2X3x3K6j5K6z5e0x3&6y4K6S2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0p5J5y4o6R3$3z5o6t1K6x3R3`.`.

raid5配置

参考链接:
623K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3j5$3!0J5j5h3I4&6L8i4y4Q4x3V1k6H3i4K6u0r3y4U0j5@1y4U0f1^5x3#2)9J5k6h3S2@1L8h3H3`. //搭建raid5阵列
c8fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9K9h3&6#2P5q4)9J5k6h3y4F1i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5k6o6j5I4x3o6u0Q4x3X3b7I4i4K6u0W2K9s2c8E0L8l9`.`. //搭建raid5阵列
707K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4#2L8h3g2F1N6r3q4@1K9h3!0F1i4K6u0W2M7%4g2K6k6g2)9J5k6h3y4G2L8g2)9J5c8Y4A6Z5i4K6u0V1j5$3&6Q4x3V1k6K6L8r3g2K6i4K6u0r3x3e0u0Q4x3X3c8e0f1o6c8Q4x3V1k6Z5N6r3#2D9i4K6u0r3f1@1I4q4f1#2)9J5k6r3q4D9L8q4)9J5c8X3y4Z5j5g2)9J5k6s2u0S2K9h3c8Q4x3X3c8J5k6i4y4A6P5X3g2Q4x3X3g2Z5N6r3#2D9i4K6t1K6M7$3g2U0i4K6u0V1M7X3q4A6k6q4)9J5k6s2u0W2M7$3W2*7k6g2)9J5k6r3W2F1j5%4t1`. //增加raid5阵列大小
181K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3N6r3q4Y4M7#2)9J5c8V1&6@1P5X3q4g2k6K6y4K6e0W2c8C8N6@1#2*7h3i4c8k6L8i4S2$3h3Y4N6a6x3p5)9H3e0@1)9H3e0K6m8a6i4K6u0W2K9s2c8E0L8l9`.`. //增加raid5阵列大小
2bfK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9K9h3&6#2P5q4)9J5k6h3y4F1i4K6u0r3j5i4u0@1K9h3y4D9k6g2)9J5k6o6j5I4x3U0y4Q4x3X3b7I4i4K6u0W2K9s2c8E0L8l9`.`. //扩展raid5阵列

raid5阵列至少需要三个物理磁盘(可以使用虚拟机,先新曾三个SATA硬盘练手)
使用 fdisk -l | grep sd 查看挂载的硬盘设备名
fdisk /dev/sda 可以用来为添加的虚拟硬盘sda创建分区,其他分区同理
fdisk只能针对2T以下容量的硬盘进行分区,大于2T容量的sd设备需要使用gdisk,两个工具命令大同小异

1
2
3
4
5
6
7
8
9
10
按 n 创建新的分区。
然后按 P 选择主分区。选择主分区是因为还没有定义过分区。
接下来选择分区号为1。默认就是1
这里是选择柱面大小,我们没必要选择指定的大小,因为我们需要为 RAID 使用整个分区,所以只需按两次 Enter 键默认将整个容量分配给它。
然后,按 P 来打印创建好的分区。
改变分区类型,按 L可以列出所有可用的类型。
按 t 修改分区类型。
这里使用fd设置为 RAID 的类型。
然后再次使用p查看我们所做的更改。
使用w保存更改。

将创建好分区的硬盘用mdadm工具合并为一个块设备,并设置为raid5阵列

1
mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

--level=5:创建raid5
--raid-devices=4:四块盘,3+1
--spare-device=1:备用盘1个
需要注意的是raid5阵列会使用三分之一的容量作为硬盘校验,所以做好的raid5阵列天生就少了三分之一的容量的心理准备

1
mkfs.ext4 /dev/md0

给raid5指定为ext4文件系统

1
mdadm --detail --scan --verbose >> /etc/mdadm.conf

保存raid5配置,如果没有mdadm.conf,则手动创建
执行到此时需要重启系统,因为创建的md0设备在重启后设备编号会自动修改(原因未知),如果现在直接mount挂载,那么在重启以后系统会找不到设备

1
2
mkdir /mnt/raid5
mount /dev/md0 /mnt/raid5/

raid5这个目录可以改为你自定义的目录,md0这个设备需要改成重启后显示的md设备,我的自动修改为了 /dev/md127 ,mount后访问raid5目录,会发现多出来了一个lost+found文件夹

1
2
3
nano /etc/fstab
 
/dev/md0                /mnt/raid5              ext4    defaults        0 0

文件里的md0和raid5改为你自己的md设备和目录

1
mount -av

检查fstab条目是否有错
至此,之后无论重启多少遍,目录都会自动挂载

1
mdadm --manage /dev/md0 --add /dev/sdd1
1
mdadm --grow --raid-devices=3 /dev/md0

以上命令请自行修改md和sd设备号

Docker+Docker-compose安装

参考链接:
2b3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2J5N6h3&6G2L8$3u0Q4x3X3g2U0L8$3#2Q4x3V1k6V1L8$3y4C8k6i4u0Q4x3V1k6#2j5Y4g2F1N6s2g2Q4x3X3c8V1L8$3y4C8k6i4u0Q4x3X3c8A6L8Y4y4@1j5h3I4D9i4K6u0W2K9s2c8E0L8l9`.`.
907K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0M7W2)9J5k6h3y4G2L8Y4y4G2L8r3g2Q4x3X3g2S2L8r3W2&6N6h3&6Q4x3X3g2U0L8$3#2Q4x3V1k6U0L8W2)9J5k6r3S2S2L8X3N6*7K9r3!0#2i4K6u0r3K9h3&6K6N6r3q4F1j5$3g2K6i4K6u0r3L8h3W2J5M7X3!0J5M7H3`.`.

这部分其实没啥好说的,照做就好,只是需要记住因为国内访问Docker官方镜像很慢,所以需要使用国内的镜像,ustc(中科大)源就挺好

Docker-compose

bebK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2k6r3!0U0K9$3g2J5i4K6u0W2j5$3!0E0i4K6u0r3j5$3!0E0M7r3!0K6k6g2)9J5c8X3W2F1M7%4c8S2L8r3I4Q4x3V1k6D9K9h3&6#2P5q4)9J5c8W2)9J5x3$3W2F1M7%4c8S2L8r3I4Q4x3X3c8@1K9r3g2Q4x3X3c8H3L8s2g2Y4K9h3&6Q4x3X3c8E0j5h3&6#2j5h3I4D9P5b7`.`.
命令从docker-compose改为docker compose,中间少了个“-”

Docker代理设置

参考连接:
5a0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6C8k6h3u0A6L8X3N6*7j5h3!0Q4x3X3g2U0L8$3#2Q4x3V1j5J5x3o6p5&6i4K6u0r3x3o6u0Q4x3V1j5J5x3W2)9J5c8X3c8G2j5$3E0W2M7W2)9J5k6r3y4G2L8Y4c8S2K9h3&6W2M7W2)9J5k6s2m8J5L8%4S2&6i4K6u0r3
1a3K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6F1L8%4c8W2i4K6u0W2M7h3W2V1L8$3&6Y4i4K6u0W2L8X3q4E0k6g2)9J5c8U0t1H3x3U0m8Q4x3V1j5H3y4g2)9J5c8X3c8G2j5$3E0W2M7W2)9J5k6s2m8J5L8%4S2&6i4K6u0r3

docker proxy设置

b3aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3b7$3S2S2M7Y4W2Q4x3V1k6H3i4K6u0r3x3e0R3H3z5e0j5$3y4K6R3`.
docker pull的时候直接用ProxyChains工具是没用的,需要在系统设置里加上proxy的内容

nas应用搭建

在搭建之前需要注意国内源很多镜像都不是最新版本,所以在pull镜像的时候最好指定版本,不要用latest!!!
在Docker中localhost指向的是容器本身的地址,例如下面的nextcloud+PostgreSQL,nextcloud配置时如果用localhost:5432,则指向的是nextcloud自身,正确的配置是将localhost改为PostgreSQL的容器IP!!!

ddns-go

我用的是阿里云的域名,需要注意的是,阿里云的VPS在测试的时候,如果用ddns做解析,会查备案(这不代表买的域名用不了,测试的时候用国外厂商的VPS就好了)

1
docker run -d --name ddns-go --restart=always -v /home/ddns-go/:/root -p 9876:9876 jeessy/ddns-go

nextcloud+PostgreSQL

参考连接:
a54K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2B7K9h3q4F1M7$3S2#2i4K6u0W2j5$3!0E0i4K6u0r3M7q4)9J5c8X3p5&6y4X3f1I4k6U0R3J5x3o6u0S2y4H3`.`.
fbeK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2S2L8r3W2&6N6h3&6Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3x3e0p5H3y4U0l9I4x3R3`.`. //修改最大连接池数

1
docker run --restart=always --name postgresql -v /etc/localtime:/etc/localtime -v /data/postgresql:/var/lib/postgresql/data -c max_connections=8192 -e POSTGRES_PASSWORD=123456 -d -p 35432:5432 postgres:14.7

-v的目录改为你自己的目录
-p的端口改为你自己的端口
此处需要注意一定要改最大连接池,否则使用是会出现连接到postgres的应用打不开的情况

1
docker exec -it postgresql /bin/bash

切换到postgres用户后输入如下命令

1
createuser -P -s -e #用户名#

进入数据库,创建新的数据库并修改权限,如果新建的用户名有特殊字符,则需要加双引号

1
2
3
psql
CREATE DATABASE your_dbname;                #此处结尾的分号“;”是必须的,否则数据库会以为命令没有结束
GRANT ALL PRIVILEGES ON DATABASE dbname TO username;        #将新创建的数据库与新创建的用户联系起来

之后用psql验证是否能登录成功

1
psql -Uncadmin -dnextcloud -h localhost -p 5432

以上所有的命令,记得修改数据库名称和用户名称
修改postgresql.conf文件,将max_connections从默认100修改为更大的数,具体数需要根据你搭建了多少服务来改

1
docker run --restart=always  --name nextcloud -e UPLOAD_MAX_SIZE=50G -p 8080:80 -v /nextcloud:/var/www/html --link postgresql:postgresql -d nextcloud:25.0.3

-v改为自己的目录
-p改为自己的端口
--link 一定要加,并且名称不能出错,在使用之前需要保证PostgreSQL已经存在
因为在docker命令行中已经添加了--link参数,所以在nextcloud初始化的时候可以在数据库一栏直接填写postgresql

nextcloud插件安装

nextcloud插件官网:
d85K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6S2M7s2m8K6i4K6u0W2L8X3g2^5N6r3y4D9L8%4g2V1i4K6u0W2j5$3!0E0i4K6u0r3
插件下载时需要注意对应的nextcloud版本

onlyoffice

此插件需要注意,最好能有一个ddns好的域名,否则后台设置server的时候会显示找不到服务器

1
docker run --restart=always  --name onlyoffice  -i -t -d -p 9000:80 -v /home/ubuntu/onlyoffice/data/:/var/www/onlyoffice/Data -v /home/ubuntu/onlyoffice/log/:/var/log/onlyoffice onlyoffice/documentserver

因为墙的原因,插件需要从官网下载,然后放到nextcloud目录下的apps文件夹中,并且设置为www-data:root用户组

1
chown -R www-data:root ./onlyoffice

在nextcloud的设置中修改onlyoffice server

adminer

参考连接:
55fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4k6h3g2C8L8X3!0@1k6g2)9J5k6h3&6W2N6q4)9J5c8Y4A6Z5N6h3!0Q4x3V1k6H3L8%4y4@1M7#2)9J5c8U0f1^5y4H3`.`.

此容器可直接访问和修改数据库内容,所以不建议安装

1
docker run --restart=always -d --name adminer -v /path/to/adminer.css:/var/www/html/adminer.css -e ADMINER_DESIGN='hydra' --link postgresql:postgresql -p 30003:8080 adminer

Rustdesk

192K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6C8M7h3E0V1i4K6u0W2N6X3W2H3i4K6u0r3j5i4u0U0K9r3W2$3k6i4y4Q4x3V1k6J5N6i4y4@1k6r3g2K6K9#2)9J5y4f1f1^5i4K6t1#2z5o6N6Q4x3U0g2m8b7g2)9J5y4f1f1#2i4K6t1#2b7V1u0Q4x3U0g2n7b7g2)9J5y4f1f1$3i4K6t1#2z5f1y4Q4x3U0f1^5c8q4)9J5y4f1f1#2i4K6t1#2z5p5q4Q4x3U0g2m8x3g2)9J5y4f1f1#2i4K6t1#2z5e0W2Q4x3U0g2m8z5l9`.`.

1
2
3
docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v /path/to/rustdesk/:/root -it -d --restart=always rustdesk/rustdesk-server hbbs -r #你的域名或IP:端口默认21117#
 
docker run --name hbbr -p 21117:21117 -p 21119:21119 -v /path/to/rustdesk/:/root -it -d --restart=always rustdesk/rustdesk-server hbbr

客户端安装完成后记得使用管理员权限运行,否则某些系统配置页面可能会产生鼠标键盘无响应的假死状态

portainer

9d4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3L8%4y4@1i4K6u0W2M7$3#2*7k6r3#2Q4x3X3g2U0L8$3#2Q4x3V1k6H3i4K6u0r3j5e0k6V1z5e0u0H3y4r3g2Q4x3V1j5`.

国内用户需要指定版本号,否则自动下载的可能是老版本

1
docker run -d -p 9000:9000 -p 9443:9443 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/portainer/:/data portainer/portainer-ce:2.16.2-alpine

jellyfin

主要是需要注意HEVC格式的编码,不是所有的硬件都能解出来的
Intel CPU支持列表
Nvidia GPU支持列表

1
2
3
4
docker run -d --name jellyfin --restart=always --device /dev/dri:/dev/dri -p 30400:8096 -v /mnt/raid5/lost+found/jellyfin/config/:/config -v /mnt/raid5/lost+found/jellyfin/tvshow/:/data/tvshows -v /mnt/raid5/lost+found/jellyfin/movie/:/data/movies jellyfin/jellyfin:10.8.9
 
 
docker run -d --name jellyfin --restart=always --device /dev/dri:/dev/dri -p 30400:8096 -v /mnt/raid5/lost+found/jellyfin/config/:/config -v /mnt/raid5/lost+found/jellyfin/tvshow/:/data/tvshows -v /mnt/raid5/lost+found/jellyfin/movie/:/data/movies nyanmisaka/jellyfin:230129-amd64

建议使用nyanmisaka/jellyfin这个jellyfin,驱动全都是装好的
关于jellyfin在播放HEVC 10bit视频时可能遇到的问题可以参考这篇文章

wiki.js

036K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2M7X3g2I4N6h3q4J5K9%4y4Q4x3X3g2A6L8#2)9J5c8X3W2F1M7%4c8S2L8r3I4Q4x3V1k6V1L8$3y4C8k6i4t1`.
这个docker版本更新特别细,需要指定版本
docker-compose.yml内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
version: "3"
services:
 
  wiki:
    image: requarks/wiki:2.5.297
    environment:
      DB_TYPE: postgres
      DB_HOST: #此处为本机IP或域名#
      DB_PORT: #此处应为数据库端口#
      DB_USER: wikijs
      DB_PASS: wikijs
      DB_NAME: wiki
    restart: always
    ports:
      - "3000:3000"
1
docker run -d -p 8080:3000 --name wiki --restart unless-stopped -e "DB_TYPE=postgres" -e "DB_HOST=#此处为本机IP或域名#" -e "DB_PORT=#此处应为数据库端口#" -e "DB_USER=wikijs" -e "DB_PASS=wikijsrocks" -e "DB_NAME=wiki" requarks/wiki:2.5.297

gogs

1
docker run -d --name gogs -p 30010:22 -p 30011:3000 -v /home/ubuntu/gogs/:/data --link postgresql:postgresql gogs/gogs:0.13

照做就好,如果用的数据库不是PostgreSQL,则在link选项里改为自己的数据库的名称
第一次设置gogs时,在数据库主机中填入link参数(以上面为例则是:postgresql)

gitea

1
docker run -d --name gitea --restart always -p 30010:22 -p 30011:3000 -v /path/to/gitea:/data -v /etc/timezone:/etc/timezone:ro -v /etc/localtime:/etc/localtime:ro --link postgresql:postgresql gitea/gitea:1.18.5

和gogs的注意事项一样
第一次填写,请注意ROOT_URL部分,这将影响后续的网站默认下载地址

transmission

1
docker run -d  --name=transmission  -e USER=test  -e PASS=test -e TRANSMISSION_WEB_HOME=/config/web -m 500M  -p 9091:9091  -p 51413:51413  -p 51413:51413/udp  -v /home/ubuntu/transmission/config:/config  -v /home/ubuntu/transmission/download:/downloads  -v /home/ubuntu/transmission/watch:/watch  --restart unless-stopped  linuxserver/transmission:4.0.3

transmission做种教程

trilium

1
docker run -d --name=trilium --restart=always -v /trilium/:/root/trilium-data -e TRILIUM_DATA_DIR=/root/trilium-data -p 8080:8080 nriver/trilium-cn:0.60.4

创建完成后需要使用网页访问,选择第一个“新用户”选项此时会让你创建密码,之后就可以使用啦

trilium插件

这个笔记软件有不少好用的插件,此处以脑图插件举例,在release页面下载插件的zip文件包(注意是release页面不是项目页面的下载zip),然后在trilium中任意目录下选择导入到笔记,同时取消选中安全导入和压缩图像,导入成功后需要按F5或者重启程序,使用时直接点击新建笔记下面的simple mind map即可

QD

1
docker run -d --name qd -p 8923:80 -v $(pwd)/qd/config:/usr/src/app/config qdtoday/qd

这是一个用来自动签到的Docker,亲测好用,配置教程可以看这篇文章,需要注意的是要把从登录到签到整个过程的所有请求相应包全都保存到HAR文件中


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2025-6-6 09:40 被pureGavin编辑 ,原因: 增加新内容
收藏
免费 2
支持
分享
最新回复 (5)
雪    币: 15695
活跃值: (18993)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
上述docker中,不推荐安装的有
adminer:可以直接访问数据库,不安全
gogs:功能太少,且更新太慢
2023-7-14 10:51
0
雪    币: 58782
活跃值: (21900)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
有种说法,大磁盘的话,不建议用raid5,因为一块硬盘坏了的话,数据修复过程,大概率第二块硬盘也会坏
2023-7-14 11:08
0
雪    币: 15695
活跃值: (18993)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
4
kanxue 有种说法,大磁盘的话,不建议用raid5,因为一块硬盘坏了的话,数据修复过程,大概率第二块硬盘也会坏
我的方案只是个人使用,其实有很多人直到换硬盘,都还没写满过一次
2023-7-14 14:46
0
雪    币: 5621
活跃值: (31896)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2023-7-14 23:38
1
雪    币: 5088
活跃值: (5845)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2023-7-16 12:46
0
游客
登录 | 注册 方可回帖
返回