NAS

DIY4NAS

  1. License \& Copyright
  2. linux
    1. 任务
    2. 挂载异常
    3. tmux
    4. 使用远程桌面
    5. Fail2Ban
  3. 安全
    1. 仅允许局域网 SSH 登录
    2. SMB 服务仅允许局域网访问
  4. 管理面板
    1. 宝塔面板
    2. server_box_monitor
    3. omv/openmediavault
  5. 内网穿透
    1. ip
      1. s-nail
    2. ipv4 端口转发
    3. 花生壳/oray
    4. WireGuard
      1. 全互联模式(full mesh)
    5. NetBird
    6. Netmaker
    7. ddns
      1. ddns-go
  6. docker
    1. Docker基础入门
    2. 安装
    3. Portainer 安装与使用
      1. Portainer 搭建与使用(docker)
      2. Docker可视化工具——Portainer全解
      3. 通过命令安装 Portainer
    4. compose
      1. 菜鸟驿站
      2. 全网最详细的Docker-Compose详细教程
      3. Docker-Compose 基础与实战,看这一篇就够啦
      4. docker-compose教程(安装,使用, 快速入门)
    5. 本地系统(Linux)打包成docker镜像
  7. 存储器/文件系统
    1. ntfs
    2. SMB
    3. NFS
    4. FTP/SFTP/TFTP
    5. filebrowser
  8. 内网应用仪表盘
    1. Flare
    2. Heimdall
      1. 安装方式
    3. OneNav
      1. 常规安装
      2. 宝塔面板安装
      3. Docker安装
      4. docker-compose安装
      5. 安全设置
      6. Nginx反向代理
  9. 网盘
    1. alist
    2. 百度网盘
  10. 远程下载
    1. xunlei
      1. 命令行/远程下载(无图形界面)
        1. 安装使用迅雷Xware
      2. 在Docker环境中实现NAS版迅雷安装指南
    2. Aria2 一键安装管理脚本 增强版
      1. 挂载 SMB 共享为本地目录
    3. transmission
      1. 在 Transmission 服务器挂载 SMB
      2. 配置 Transmission
    4. qbitttorrent
    5. qbittorrent-nox
  11. 播放服务
    1. jellyfin
    2. VidHub
  12. 同步
    1. urbackup
  13. 开发环境
    1. 版本控制
      1. gitea
    2. gcc
    3. 文字转语音服务

linux

菜鸟教程

lsb_release -a //查看虚拟机版本
uname -a //查看虚拟机位数,但是没有下一个命令直观
getconf LONG_BIT//查看long的位数,可以直接反映出虚拟机位数
neofetch //查看系统信息
id:为指定的用户名打印用户和组信息。
getent:从 Name Service Switch 库中获取条目。
/etc/passwd: 文件包含每个用户的详细信息,每个用户详情是一行,包含 7 个字段。
finger:用户信息查询程序
lslogins:显示系统中已有用户的信息
compgen:是 bash 内置命令,它将显示用户的所有可用命令。
lsusb
blkid 命令:定位或打印块设备的属性。
lsblk 命令:列出所有可用的或指定的块设备的信息。
hwinfo 命令:硬件信息工具,是另外一个很好的实用工具,用于查询系统中已存在硬件。
udevadm 命令:udev 管理工具
tune2fs 命令:调整 ext2/ext3/ext4 文件系统上的可调文件系统参数。
dumpe2fs 命令:查询 ext2/ext3/ext4 文件系统的信息。
使用 by-uuid 路径:该目录下包含有 UUID 和实际的块设备文件,UUID 与实际的块设备文件链接在一起
df
ifconfig

iwinfo
# email
date | s-nail -s data xxx@xxx.com

任务

#查看当前用户的 cron 任务
crontab -l
#编辑当前用户的 cron 任务
crontab -e
#删除当前用户的 cron 任务
crontab -r
#添加一个新的 cron 任务
# 任务格式说明:
# *  *  *  *  * user-name command-to-be-executed
# │  │  │  │  │    │            │
# │  │  │  │  │    │            └─ 要执行的命令
# │  │  │  │  │    └─ 执行命令的用户
# │  │  │  │  └─ 星期几 (0-6, 0=周日)
# │  │  │  └─ 月份 (1-12)
# │  │  └─ 日期 (1-31)
# │  └─ 小时 (0-23)
# └─ 分钟 (0-59)

# 在多个时间点执行
0 8,12,18 * * * command    # 每天8点、12点、18点执行
0 0 1,15 * * command       # 每月1号和15号执行
# 连续时间段
0 9-18 * * * command       # 每天9点到18点,每小时执行
0 0 1-5 * * command        # 每月1号到5号,每天执行
# 固定间隔执行
*/5 * * * * command        # 每5分钟执行一次
0 */3 * * * command        # 每3小时执行一次(0点、3点、6点...)
0 0 */2 * * command        # 每2天执行一次(1号、3号、5号...)
# 工作日的上班时间
0 9-17 * * 1-5 command     # 周一到周五,9点到17点每小时执行
# 周末的特殊任务
0 10 * * 6,7 command       # 周六和周日的10点执行

系统级别的 cron 任务通常位于 /etc/crontab 文件或 /etc/cron.d 目录下的文件中
/etc/cron.deny      # 黑名单:列出不允许使用crontab的用户
/etc/cron.allow     # 白名单:只允许列表中的用户使用crontab
                    # 注意:如果cron.allow存在,则只有列表中的用户可以使用
#  为其他用户管理cron(需要root权限)
crontab -u username -e    # 编辑指定用户的任务
crontab -u username -l    # 查看指定用户的任务
crontab -u username -r    # 删除指定用户的任务

#  从文件导入cron任务
crontab mycron.txt        # 将文件内容作为cron任务

# %在cron中有特殊含义,需要转义
* * * * * date +\%Y-\%m-\%d > /tmp/date.txt
# 在0-59之间随机延迟
$(($RANDOM % 60)) * * * * /path/to/script.sh

# 或在脚本中sleep随机时间
sleep $((RANDOM \% 300))  # 随机休眠0-5分钟

条件执行
# 只在条件满足时执行
0 * * * * [ -f /tmp/flag.txt ] && /path/to/script.sh

# 或者写复杂的判断脚本
0 * * * * /path/to/conditional_script.sh

@reboot     /path/to/script.sh   # 重启后执行一次
@yearly     /path/to/script.sh   # 每年1月1日0点
@monthly    /path/to/script.sh   # 每月1日0点
@weekly     /path/to/script.sh   # 每周日0点
@daily      /path/to/script.sh   # 每天0点
@hourly     /path/to/script.sh   # 每小时0分

# 看服务状态
systemctl status cron      # Debian/Ubuntu
systemctl status crond     # CentOS/RHEL
# 重启服务
systemctl restart cron

# 系统crontab文件
/etc/crontab
# 系统cron目录
/etc/cron.d/        # 自定义任务
/etc/cron.hourly/   # 每小时执行
/etc/cron.daily/    # 每天执行
/etc/cron.weekly/   # 每周执行
/etc/cron.monthly/  # 每月执行


任务不要重叠执行
如果任务跑的时间长,可能上一次还没跑完,下一次又开始了。
用flock加锁:
* * * * * flock -n /tmp/myjob.lock /path/to/script.sh
-n表示非阻塞,拿不到锁就直接退出。

随机延迟
避免所有机器同时跑任务,压力集中:随机睡0-300秒再执行。
0 2 * * * sleep $((RANDOM \% 300)) && /path/to/script.sh

防止任务跑太久:0 2 * * * timeout 3600 /path/to/script.sh
互斥锁(防止重复执行)
# 在脚本开头添加锁检查
LOCK_FILE="/tmp/myscript.lock"

if [ -f "$LOCK_FILE" ]; then
    echo "脚本正在运行,退出"
    exit 1
fi

# 创建锁文件
touch "$LOCK_FILE"

# 执行任务
# ...

# 删除锁文件
rm -f "$LOCK_FILE"

重要文件:

挂载异常

sudo dmesg | grep usb
umount -a
fusermount -u path
mount -a

tmux

sudo apt-get install tmux
tmux ls //查看tmux会话
tmux new -s session_name //创建新的tmux会话
tmux a -t session_name //进入指定tmux会话
tmux kill-session -t session_name //关闭指定tmux会话

使用远程桌面

#通过windows自带的远程桌面软件,可以远程访问树莓派桌面应用
sudo apt-get install xrdp

#or
sudo apt-get install vnc4server

Fail2Ban

Fail2Ban是一款入侵防御软件,可以保护服务器免受暴力攻击。 它是用 Python 编程语言编写的。 Fail2Ban 基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,如 /var/log/auth.log、/var/log/apache/access.log 等,并禁止带有恶意标志的IP,比如密码失败太多,寻找漏洞等等标志。通常,Fail2Ban 用于更新防火墙规则,用于在指定的时间内拒绝 IP 地址。 它也会发送邮件通知。 Fail2Ban 为各种服务提供了许多过滤器,如 ssh、apache、nginx、squid、named、mysql、nagios 等。Fail2Ban 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。 这只是服务器防止暴力攻击的安全手段之一。

如何使用 fail2ban 防御 SSH 服务器的暴力破解攻击

配置jail.local 文件:创建一个新文件jail.local,它将覆盖jail.conf中的任何同类设置.同时将监视/var/log/auth.log,

sudo vim /etc/fail2ban/jail.local
sudo systemctl start fail2ban
sudo systemctl status fail2ban        # 查看fail2ban 是否正常启动
sudo systemctl enable fail2ban

# 日常查看 lastb 命令:
# 如何查看指定日期的 ssh 失败登陆列表:
# 查看 2022 年 10 月 16 日至 10 月 18 日的失败 ssh 登陆记录
lastb -s 2022-10-16 -t 2022-10-18

# 可以使用以下命令取消 ban 测试IP地址:
sudo fail2ban-client set sshd unbanip IP_ADDRESS
# IP_ADDRESS是禁止的IP地址
# 现在你又可以开心的使用SSH重新登录那个 fail2ban 的服务器了.​​​
[sshd]
enabled = true # 启用规则
filter = sshd # 使用fail2ban sshd过滤器,
action = iptables[name=SSH, port=ssh, protocol=tcp]
backend = systemd
logpath = /var/log/fail2ban.log # this logpath is the standard logpath for CentOS/RHEL - based operating systems
findtime = 8467200 #; 14 days
bantime = 604800 # ; 1 week
maxretry = 3  # 将最大重试次数设置为3, 超过就 ban 它的 ip

安全

# 查到了如下两个命令可以一定程度上发现被隐藏的进程
# sysdig可用如下命令安装,curl是类似wget的下载命令,这里下载的是一个bash脚本,下载后再通过bash执行安装
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash
# unhide 可以通过如下命令进行安装
yum install unhide # 中毒的是Centos7系统,所以用的是yum
sysdig -c topprocs_cpu # 该命令可以输出cpu占用的排行,经测试可以显示出被隐藏的进程
unhide proc # 自助搜索隐藏进程,linux系统中一切皆文件,proc目录下保存的就是所有正在运行程序的进程ID,即PID

# root都没权限进行操作。一通检索后才知,linux怕用户误删一些系统必要指令和文件进行的保护,可通过如下命令进行解除。
chattr -iR /etc/dns # 解除改目录的误删保护,R为递归执行,但是文件夹下的病毒都被隐藏,所以这里的R其实没有起作用

# 服务器被挖矿的原因
# 一方面是ssh远程登录没有禁用root的远程登录,此时需要在/etc/ssh/sshd_config中添加
PermitRootLogin no
# 保存后,对ssh服务进行重启
systemctl restart sshd

仅允许局域网 SSH 登录

关键:禁止公网 IP 登录

sshd_config限制监听 / 访问(推荐)

sudo nano /etc/ssh/sshd_config

1)仅监听内网网卡(可选但很安全)

假设你内网网卡 IP 是 192.168.1.100:

ListenAddress 192.168.1.100 2)仅允许指定网段登录(推荐)

例如只允许 192.168.1.0/24:

AllowUsers @192.168.1.

或针对具体用户:

AllowUsers alice@192.168.1.* bob@192.168.1.*

重启 SSH:

sudo systemctl restart sshd
# 或
sudo systemctl restart ssh

✅ 效果:

公网 IP 连接 SSH → 被拒绝

局域网 IP 连接 SSH → 允许

SMB 服务仅允许局域网访问

方法 1:Samba 配置限制(推荐)

sudo nano /etc/samba/smb.conf
#在 [global]段添加:

hosts allow = 192.168.1. 127.
hosts deny = all

说明:192.168.1.表示 192.168.1.0/24 用于本地访问

hosts deny = all作为兜底拒绝

重启 Samba:

sudo systemctl restart smbd nmbd

✅ 效果:

仅局域网可访问 SMB 共享

公网 IP 访问 → 无响应或被拒绝

方法 2:防火墙限制(补充手段)

如果你用 ufw:

sudo ufw default deny incoming
sudo ufw allow from 192.168.1.0/24 to any port 22
sudo ufw allow from 192.168.1.0/24 to any port 139
sudo ufw allow from 192.168.1.0/24 to any port 445
sudo ufw enable
#(端口 139/445 是 SMB)

管理面板

宝塔面板

sudo bt

server_box_monitor

omv/openmediavault

开源NAS系统之OpenMediaVault(OMV) 6快速上手 账号密码:admin/openmediavault

sudo omv-env set OMV_APT_REPOSITORY_URL "https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/public"
sudo omv-env set OMV_APT_ALT_REPOSITORY_URL "https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/packages"
sudo omv-env set OMV_APT_KERNEL_BACKPORTS_REPOSITORY_URL "https://mirrors.tuna.tsinghua.edu.cn/debian"
sudo omv-env set OMV_APT_SECURITY_REPOSITORY_URL "https://mirrors.tuna.tsinghua.edu.cn/debian-security"
sudo omv-env set OMV_EXTRAS_APT_REPOSITORY_URL "https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/openmediavault-plugin-developers"
sudo omv-env set OMV_DOCKER_APT_REPOSITORY_URL "https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian"
sudo omv-env set OMV_PROXMOX_APT_REPOSITORY_URL "https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian"
sudo omv-salt stage run all

完成后安装extras的命令

sudo wget https://mirrors.tuna.tsinghua.edu.cn/OpenMediaVault/openmediavault-plugin-developers/pool/main/o/openmediavault-omvextrasorg/openmediavault-omvextrasorg_6.3.1_all.deb
sudo dpkg -i openmediavault-omvextrasorg_6.3.1_all.deb

omv-firstaid是系统内置的修复工具,虽然修复功能有限但是向导式修复过程还是很简单,紧急情况下在终端输入“omv-firstaid”通常可以修复以下几项故障:

IP配置重设,有时网络配置设置失误不能联机后可以用此工具修复; WEBGUI端口重设; WEBGUI管理员密码重置; OMV配置恢复,可以恢复最近一次配置文件备份;

OMV 6.4 安装Docker

OMV 6本身是不支持Docker和虚拟机的,需要通过一个插件omv-extras-plugins来支持和安装。OMV 6安装omv-extras-plugins需要使用root用户在命令行执行:

#安装omv-extras-plugins
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

然后再次回到OMV 6的WEB管理界面刷新就可以看到Docker和Portainer的选项,根据提示操作完成安装即可。

注意:此时在docker这里会显示状态,是否是Installed and Running如果不是或者显示未安装,请重新在omv-extras中取消勾选docker-repo后保存,然后重新勾选进行保存后,回到这里,就会显示正常。

可以选择docker compose或docker二选一,我比较推荐docker compose安装,维护简单,且不用打一长串的参数命令行

安装好了omv-extras-plugins我们就可以在插件中心搜索kvm进行虚拟机插件的安装,插件全称是openmediavault-kvm

openmediavault-kvm安装完毕后,服务里面会多出一个KVM的选项,就是用来安装和管理虚拟机的。

内网穿透

ip

常用 IPv6 检测服务列表 |服务地址|说明|有效性| |:—|—|—| |ifconfig.co|自动识别协议,返回纯文本 IP|√| |ip.sb|支持 IPv6,返回信息简洁|√| |api6.ipify.org|专门用于 IPv6 查询|√| |ipv6.icanhazip.com|仅返回 IPv6 地址|√| |6.ipw.cn|返回ipv6地址,其他test.ipw.cn;4.ipw.cn|×|

# email
curl -S 6.ipw.cn | s-nail -s data msgsvr@163.com

s-nail

sudo nano /etc/s-nail.rc

# add
set from="msgsvr@163.com"   #用来发送邮件的邮箱
set smtp="smtp.163.com"
set smtp-auth-user="msgsvr@163.com"
set smtp-auth-password="..."  #邮箱授权码
set smtp-auth=login

ipv4 端口转发

花生壳/oray

WireGuard

一个开源的VPN软件,如果你不想将OMV服务映射到公网,这是一个必不可少的软件,可以通过这个软件连接到你的内网

WireGuard 的安装条件非常苛刻,对内核版本要求极高,不仅如此,在不同的系统中,内核,内核源码包,内核头文件必须存在且这三者版本要一致,Red Hat、CentOS、Fedora 等系统的内核,内核源码包,内核头文件包名分别为 kernel、kernel-devel、kernel-headers;Debian、Ubuntu 等系统的内核,内核源码包,内核头文件包名分别为 kernel、linux-headers。果这三者任一条件不满足的话,则不管是从代码编译安装还是从 repository 直接安装,也只是安装了 wireguard-tools 而已。而 WireGuard 真正工作的部分,是 wireguard-dkms,也就是动态内核模块支持(DKMS),是它将 WireGuard 编译到系统内核中。

目前 WireGuard 已经被合并到 Linux 5.6 内核中了,如果你的内核版本 >= 5.6,就可以用上原生的 WireGuard 了,只需要安装 wireguard-tools 即可,内核版本<5.6,可能需要首先更新内核,否则可能会报错:Unable to access interface: Protocol not supported

WireGuard 优点:

WireGuard 不能做的事:

当然,你可以使用 WireGuard 作为底层协议来实现自己想要的功能,从而弥补上述这些缺憾。

最后,在 WireGuard 中的所有数据报文,都采用 UDP 的方式发送。

一键安装:WireGuard VPN installer for Linux servers

全互联模式(full mesh)

全互联模式其实就是一种网络连接形式,即所有结点之间都直接连接,不会通过第三方节点中转流量。和前面提到的点对多点架构其实是一个意思。

在 WireGuard 的世界里没有 Server 和 Client 之分,所有的节点都是 Peer。大家使用 WireGuard 的常规做法是找一个节点作为中转节点,也就是 VPN 网关,然后所有的节点都和这个网关进行连接,所有节点之间都通过这个网关来进行通信。这种架构中,为了方便理解,我们可以把网关看成 Server,其他的节点看成 Client,但实际上是不区分 Server 和 Client 的。

Reference:

NetBird

https://github.com/netbirdio/netbird:Connect your devices into a single secure private WireGuard®-based mesh network with SSO/MFA and simple access controls.

NetBird 是一个建立在WireGuard之上的开源网络管理平台,它允许计算机、设备和服务器通过快速加密隧道直接连接,无需配置或中央VPN服务器。它使专用网络变得安全,并创建了一个专用网络,在没有手动配置和专家的情况下应用安全实践。NetBird网络普遍适用于云、本地、边缘和容器环境,省去了打开端口、复杂防火墙规则和VPN网关的麻烦。

NetBird 没有集中式 VPN 服务器,您的计算机、设备、机器和服务器直接通过快速加密隧道相互连接。NetBird只需点击几下即可连接在任何地方运行的机器。使用NetBird部署安全的点对点VPN只需不到5分钟。

它与 Tailscale 很像,但是区别也比较明显。Tailscale 是在用户态实现了 WireGuard 协议,无法使用 WireGuard 原生的命令行工具来进行管理。而 NetBird 直接使用了内核态的 WireGuard,可以使用命令行工具 wg 来查看和管理。

一款超牛逼的组网神器!吊打市面其它工具~

Netmaker

Netmaker Netmaker makes networks with WireGuard. Netmaker automates fast, secure, and distributed virtual networks.是一个用来配置 WireGuard 全互联模式的可视化工具,它的功能非常强大,不仅支持 UDP 打洞、NAT 穿透、多租户,还可以使用 Kubernetes 配置清单来部署,客户端几乎适配了所有平台,包括 Linux, Mac 和 Windows,还可以通过 WireGuard 原生客户端连接 iPhone 和 Android。Netmaker 使用的是 C/S 架构,即客户端/服务器架构。Netmaker Server 包含两个核心组件:用来管理网络的可视化界面,以及与客户端通信的 gRPC Server。你也可以可以选择部署DNS服务器(CoreDNS)来管理私有DNS。客户端(netclient)是一个二进制文件,可以在绝大多数 Linux 客户端以及 macOS 和 Windows 客户端运行,它的功能就是自动管理 WireGuard,动态更新 Peer 的配置。

Netmaker 还有一个重要的术语叫签到,客户端会通过定时任务来不断向 Netmaker Server 签到,以动态更新自身的状态和 Peer 的配置,它会从 Netmaker Server 检索 Peer 列表,然后与所有的 Peer 建立点对点连接,即全互联模式。所有的 Peer 通过互联最终呈现出来的网络拓扑结构就类似于本地子网或 VPC。

Netmaker 支持多种部署方式,包括二进制部署和容器化部署,容器化部署还支持 docker-compose 和 Kubernetes。

Netmaker 允许创建任意数量的私有网络,可以设置任意地址范围。你只需要给这个网络起个名字,设置一个地址范围,并选择想要启用的选项。

Node 表示节点,通常是运行 Linux 的服务器,安装了 netclient 和 WireGuard。这个节点会通过 WireGuard 私有网络和其他所有节点相连。一但节点被添加到私有网络中,Netmaker 管理员就可以操控该节点的配置.管理员也可以将该节点从私有网络中完全删除,让其无法连接其他所有 Peer 节点。

Node 还有两个比较重要的功能,就是将自身设置为 Ingress Gateway(入口网关)或者 Egress Gateway(出口网关)。Ingress Gateway 允许外部客户端的流量进入内部网络,Egress Gateway 允许将内部网络的流量转发到外部指定的 IP 范围。这两项功能对全互联模式进行了扩展,比如手机客户端就可以通过 Ingress Gateway 接入进来。

一个节点想要加入到私有网络,需要获取访问秘钥进行授权,当然你也可以选择手动批准。 一个访问秘钥可以被多个节点重复使用,你只需修改 Number 数量就可以实现这个目的。

ddns

ddns-go

动态DNS解析,支持WEB界面设置 因为一般家庭或企业用户所获得的的广域网ip并非固定,而是会时常变化,一旦变化,我们的域名针对ip的A类解析记录就会失效,因此我们需要DDNS(动态域名解析服务),在ip变动时自动更改我们的域名解析记录值。

ddns-go项目地址:

自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。

Docker部署ddns-go,动态域名解析公网IPv6地址

docker

Docker基础入门

Docker基础入门:镜像、容器导入导出与私有仓库搭建

安装

# 卸载老旧的版本(若未安装过可省略此步):
$ sudo apt-get remove docker docker-engine docker.io

# 安装最新的docker:
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

# shell会提示你输入sudo的密码,然后开始执行最新的docker过程 或者
$ curl -sSL https://get.docker.com/ | sh

# 确认Docker成功最新的docker:
$ sudo docker run hello-world

更换docker国内源 单纯替换国内源,但是在创建添加 /etc/docker/daemon.json 后出现下图无法启动的问题。

原因:/etc/docker/daemon.json 文件内容格式不正确

解决方法:修改文件内容并重启docker服务

1)添加或修改文件daemon.json

nano /etc/docker/daemon.json

2)在daemon.json中添加国内镜像源

{
"registry-mirrors" : [

"https://mirror.ccs.tencentyun.com",

"http://registry.docker-cn.com",

"http://docker.mirrors.ustc.edu.cn",

"http://hub-mirror.c.163.com"
],
"insecure-registries" : [

"http://registry.docker-cn.com",

"http://docker.mirrors.ustc.edu.cn"
],
"debug" : true,
"experimental" : true
}

===================镜像说明=========================

https://mirror.ccs.tencentyun.com” //腾讯

http://registry.docker-cn.com” //docker官方提供的中国镜像

http://docker.mirrors.ustc.edu.cn” //中国科学技术大学

http://hub-mirror.c.163.com” //网易

3)重启服务

systemctl daemon-reload
systemctl restart docker
#或者输入:
systemctl restart docker.service

Portainer 安装与使用

https://zhuanlan.zhihu.com/p/383491674

Portainer 是一个用于管理容器化应用程序的开源工具。它在数据中心和边缘与Kubernetes、Docker、Docker Swarm、Azure ACI一起使用。Portainer 消除了与编排器相关的复杂性,因此任何人都可以管理容器。它可用于部署和管理应用程序、观察容器的行为并提供广泛部署容器所需的安全性和治理。Portainer CE(开源)受到全球超过 500,000 名用户的信赖。Portainer Business建立在开源基础之上,使组织能够大规模运行容器化应用程序,而无需雇用新人员或重新培训现有团队。

no matching manifest for linux/386 in the manifest list entries

Portainer 搭建与使用(docker)

  1. 安装 1.1 创建 portainer 工作目录
// 创建文件夹
mkdir portainer

// 进入工作目录
cd ./portainer

1.2 pull 官方容器镜像

# 拉取镜像
docker pull portainer/portainer

# 检查是否更新成功(成功如下图)
docker images | grep portainer

1.3 创建docker-compose.yml 配置如下:

touch docker-compose.yml

docker-compose.yml 配置文件

version: "3.6"
services:
    portainer-mian:
        container_name: portainer
        image: portainer/portainer:latest
        restart: always
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock:rw
            - ./ortainer_data:/data:rw
        networks:
            - traefik
        labels:
            - "traefik.enable=true"
            - "traefik.docker.network=traefik"
            - "traefik.http.routers.portainer_halobug.entrypoints=https"
            - "traefik.http.routers.portainer_halobug.rule=Host(`portainer.halobug.cn`)"
            - "traefik.http.routers.portainer_halobug.tls=true"
            - "traefik.http.services.portainer_halobug-backend.loadbalancer.server.scheme=http"
            - "traefik.http.services.portainer_halobug-backend.loadbalancer.server.port=9000"
        logging:
            driver: "json-file"
            options:
                max-size: "10m"
networks:
    traefik:
        external: true

1.4 启动服务

# 本机测试绑定 hosts
127.0.0.1 portainer.cn

#启动成功如下图
docker-compose down && docker-compose up -d

1.5 访问域名portainer.cn

Docker可视化工具——Portainer全解

Portainer是一个可视化的Docker操作界面,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。

如果你部署了包含 Portainer 的Docker环境,请直接登录使用。否则,请先安装 Portainer:

通过命令安装 Portainer

docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
cd /usr/libexec/docker/
sudo ln -s docker-runc-current docker-runc

通过本地浏览器访问:http://服务器公网IP:9000, 直接进入 Portainer 界面

进入Portainer后台管理界面,点击Local项目就可以开始使用Portainer

upstream wordpress {
       server 159.138.6.145:32773;
   }

   server {
       listen 80;
       server_name  test.example.top; #绑定域名

       location / {
       proxy_pass http://wordpress;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header Via "nginx";
       }
   }
upstream portainer {
server 159.138.6.145:9000;
}

server {
    listen 80;
    listen 443 ssl;
    server_name  test.websoft9.top;

    ssl_certificate /etc/nginx/cert/cert-1540972394298_test.websoft9.top.crt;
    ssl_certificate_key /etc/nginx/cert/cert-1540972394298_test.websoft9.top.key;

    location / {
    proxy_pass http://portainer;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Via "nginx";
    }
}
 upstream portainer {
 server 159.138.6.145:9000;
 }

 server {
     listen 80;
     listen 443 ssl;
     server_name  test.websoft9.top;

  ssl_certificate /etc/nginx/cert/cert-1540972394298_test.websoft9.top.crt;
  ssl_certificate_key /etc/nginx/cert/cert-1540972394298_test.websoft9.top.key;

  if ($scheme != "https") {
  return 301 https://$host$request_uri;
  }

  location / {
  proxy_pass http://portainer;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Via "nginx";
  }
}

compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

菜鸟驿站

全网最详细的Docker-Compose详细教程

compose、machine 和 swarm 是docker 原生提供的三大编排工具。简称docker三剑客。

Docker Compose能够在 Docker 节点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部 署和管理。多数的现代应用通过多个更小的微服务互相协同来组成一个完整可用的应用。

部署和管理繁多的服务是困难的。而这正是 Docker Compose 要解决的问题。Docker Compose 并不 是通过脚本和各种冗长的 docker 命令来将应用组件组织起来,而是通过一个声明式的配置文件描述整 个应用,从而使用一条命令完成部署。应用部署成功后,还可以通过一系列简单的命令实现对其完整声 明周期的管理。甚至,配置文件还可以置于版本控制系统中进行存储和管理。

# 下载 https://github.com/docker/compose
mv /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

cp /data/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

#开发环境可以授予最高权限

chmod 777 /usr/local/bin/docker-compose

docker-compose -v

# 使用pip安装
sudo pip install docker-compose

# 卸载
rm -rf /usr/local/bin/docker-compose
reboot

Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes

version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。

services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 lagou-mysql数据库服 务以及一个名为lagou-eureka的微服。Docker Compose 会将每个服务部署在各自的容器中。

networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。 这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不 同的网络类型。

volumes 用于指引 Docker 来创建新的卷。

demo

version: '3'
services:
  mysql:
    build:
      context: ./mysql
    environment:
      MYSQL_ROOT_PASSWORD: admin
    restart: always
    container_name: mysql
    volumes:
    - /data/edu-bom/mysql/test:/var/lib/mysql
    image: mysql/mysql:5.7
    ports:
      - 3306:3306
    networks:
      net:
  eureka:
    build:
      context: ./edu-eureka-boot
    restart: always
    ports:
      - 8761:8761
    container_name: edu-eureka-boot
    hostname: edu-eureka-boot
    image: edu/edu-eureka-boot:1.0
    depends_on:
      - mysql
    networks:
      net:
networks:
    net:
volumes:
    vol:
# 启动服务
docker-compose up -d

# 停止服务
docker-compose down

# 列出所有运行容器
docker-compose ps

# 查看服务日志
docker-compose logs

# 构建或
docker-compose build者重新构建服务

# 启动服务
docker-compose start

# 停止已运行的服务
docker-compose stop

# 重启服务
docker-compose restart

Docker-Compose 基础与实战,看这一篇就够啦

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。能够管理一组相关联的的应用容器.

# 命令选项
-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
–x-networking 使用 Docker 的可拔插网络后端特性
–x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
–verbose 输出更多调试信息。
-v, --version 打印版本并退出。

注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中重复设置。

#images指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
image: apache/skywalking-oap-server:6.5.0
image: apache/skywalking-ui:6.5.0
#ports暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以,端口字符串都使用引号包括起来的字符串格式。
ports:
    - "3000"
    - "8080:8080"- "127.0.0.1:8001:8001"
#volumes数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式 (HOST:CONTAINER:ro)。
volumes:
      - /app/skywalking/elasticsearch/data:/usr/share/elasticsearch/data:rw
      - conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
version: "3"
services:
  my_src:
    image: mysql:8.0
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  mysql_data:
#ulimits指定容器的 ulimits 限制值。例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。
ulimits:
   nproc: 65535
   nofile:
     soft: 20000
     hard: 40000
#depends_on解决容器的依赖、启动先后的问题。以下例子中会先启动 redis mysql 再启动 web
version: '3'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: mysql
#environment设置环境变量。你可以使用数组或字典两种格式。
environment:
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200

environment:
      - SW_STORAGE= elasticsearch
      - SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
#restart指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped。
restart: always

docker-compose教程(安装,使用, 快速入门)

本地系统(Linux)打包成docker镜像

  1. tar
# 一、 安装工具tar
yum install -y tar
# 二、将本机系统打包成tar文件
tar --numeric-owner --exclude=/proc --exclude=/sys -cvf Linux-base.tar /
# 三、将Linux-base.tar导入
docker import Linux-base.tar  <docker中images的名字>
# 四、查看镜像
docker images
# 四、运行该系统
docker run -it <docker中images的名字> /bin/bash
  1. dockerfile

你将你的装机过程书写成dockerfile,就制作好了镜像。你按照dockerfile来装机,就等于把镜像复刻到宿主机上了。这里的一切,都因为,dockerfile本质上就是个装机脚本。

  1. dd

玩pve的应该很熟悉,很多人会在lxc里面跑一个完整系统。

如果你只是想迁移备份导入导出系统,直接dd /tar就完了。如果你还想能运行,那么dd到qcow2,开kvm,简单又省事。

  1. Convert Any Server to a Docker Container (Updated)

ShutIt script (as root):

There are therefore 3 main steps to getting into your container:

– Install ShutIt on the server

sudo su -
pip install shutit

The pre-requisites are python-pip, git and docker. The exact names of these in your package manager may vary slightly (eg docker-io or docker.io) depending on your distro.

You may need to make sure the docker server is running too, eg with ‘systemctl start docker’ or ‘service docker start’.

– Run the ‘copyserver’ ShutIt script

Check out the copyserver script:

git clone https://github.com/ianmiell/shutit_copyserver.git

cd shutit_copyserver/bin
./copy_server.sh

There is a prompt to ask what docker base image you want to use. Make sure you use one as close to the original server as possible.

– Run your copyserver Docker image as a container

Run the built image:

docker run -ti [username]/copyserver /bin/bash

存储器/文件系统

ntfs

sudo apt install ntfs-3g

sudo fdisk -l
# 或使用更直观的命令
lsblk -f
# 创建一个空目录作为“访问入口”:
sudo mkdir /mnt/ntfs
# 执行挂载命令,建议添加权限和编码选项,避免中文乱码及无法写入:
sudo mount -t ntfs-3g -o uid=1000,gid=1000,umask=000,locale=zh_CN.UTF-8 /dev/sdb1 /mnt/ntfs
#uid=1000,gid=1000:将磁盘所有权赋予当前用户(通常 1000 是第一个创建的用户)。
#umask=000:设置最大权限(所有用户可读写)。
#locale=zh_CN.UTF-8:解决中文文件名乱码问题。
#挂载成功后,通过 df -h确认,或直接访问 /mnt/ntfs
#若需每次启动自动挂载,编辑 /etc/fstab文件:
sudo nano /etc/fstab
#强烈建议使用 UUID 而非设备名(防止设备号变动导致启动失败)。获取 UUID:sudo blkid /dev/sdb1。添加如下行:
# 使用 UUID 示例
UUID=你的-UUID /mnt/ntfs ntfs-3g defaults,auto,users,rw,nofail,uid=1000,gid=1000,umask=000 0 0
#关键选项:nofail表示即使硬盘不存在也不影响系统启动。
#编辑后,执行 sudo mount -a测试配置是否正确,若无报错则重启生效。
#操作完成后,务必安全卸载:
sudo umount /mnt/ntfs
#提示只读(Read-only):可能是硬盘存在错误(如 Windows 快速启动导致的休眠),建议在 Windows 中彻底关机,或使用 #ntfsfix尝试修复(注意:修复有风险,先备份)。
#中文乱码:确认挂载命令中已添加 locale=zh_CN.UTF-8选项。
#权限不足:检查挂载参数中的 uid和 gid是否与你的用户 ID 匹配(通过 id命令查看)

# 查看硬盘类型和APM级别(适用于HDD)
sudo hdparm -B /dev/sdX
# 查看当前是否处于休眠状态
sudo hdparm -C /dev/sdX
#结果解读:-B的值通常为 1-255。128是许多硬盘的默认平衡值,255表示禁用休眠(最大性能),1-127表示不同程度的节能(数值越低休眠越激进)。
sudo nano /etc/hdparm.conf
/dev/sdX {
    apm = 64
    spindown_time = 60
}

重启系统或重新加载 hdparm服务使配置生效

# 安装
sudo apt install sdparm

# 查看电源状态
sudo sdparm -p -l /dev/sdX

# 设置空闲进入待命状态
sudo sdparm --set STANDBY=1 /dev/sdX

SSD 不需要也不应该设置机械硬盘式的“休眠”。SSD 没有机械部件,所谓的“休眠”在 SSD 上主要是让主控进入低功耗状态,通常系统默认的电源管理已经足够。

对于 SSD,建议关注 fstrim(手动或自动)来清理垃圾块,维持长期性能,而非纠结于休眠时间。

实时监控:使用 iotop或 iostat查看磁盘活动,确认休眠是否被意外唤醒。

查看日志:使用 sudo dmesg | grep -i sdX查看内核日志,确认是否有休眠相关的错误或超时信息

外部/USB 硬盘:hdparm可能无法直接管理 USB 桥接的硬盘。对于 USB 设备,通常需要在挂载时通过 udisksctl或驱动特定参数设置。

开启电源管理并设置空闲时间

你需要修改控制器的电源条件模式页(Power Condition mode page),启用 standby 计时器。

SMB

sudo apt update
sudo apt install samba

sudo nano /etc/samba/smb.conf

sudo systemctl restart smbd
sudo systemctl enable smbd

NFS

FTP/SFTP/TFTP

filebrowser

使用Golang开发的文件管理器,支持WEB管理文件和文件分享

内网应用仪表盘

Flare

Lightweight, high performance and fast self-hosted navigation pages,从零开始搭建个人书签导航应用:Flare

Heimdall

Heimdall 是一款网络书签仪表盘,它内置了超过 300 款网络服务图标,以及接通了部分服务的 API,可以实现一个非常漂亮的网络书签、内网门户页面.当然它本质上还是一个书签服务,支持自定义 URL 和图标的。并且 Heimdall 支持多用户、标签分类、自带了 242 个应用信息,以及 67 个可以显示更多信息的增强型应用。

安装方式

Docker 命令行

docker run --name=heimdall -d -v /home/heimdall:/config -e PGID=1000 -e PUID=1000 -p 8080:80 -p 8443:443 linuxserver/heimdall
# 其中 -v 是挂载配置文件夹,-e 是设置运行用户权限,一般情况下默认即可,-p 是映射端口,可自定义。

然后就能直接在内网通过 ip:8443 访问了。当然也可以放在公网上使用,毕竟支持多用户,

OneNav

OneNav是一款开源免费的书签(导航)管理程序,由xiaoz使用使用PHP + SQLite 3开发,界面简洁,安装简单,使用方便。OneNav可帮助你你将浏览器书签集中式管理,解决跨设备、跨平台、跨浏览器之间同步和访问困难问题,做到一处部署,随处访问。

https://doc.xiaoz.org/books/onenav/page/a1d0c

常规安装

https://github.com/helloxz/onenav/releases

宝塔面板安装

OneNav已上架宝塔商店,通过宝塔后台 - 软件商店 - 一键部署 - 搜索onenav,并点击一键部署。

Docker安装

# 80:第1个80端口为访问端口,可自行修改,第2个80为容器内部端口,请不要修改
# /data/onenav:本机挂载目录,用于持久存储Onenav数据
docker run -itd --name="onenav" -p 80:80 \
    -v /data/onenav:/data/wwwroot/default/data \
    helloz/onenav

docker-compose安装

您也可以选择docker-compose进行安装,将下面的文件保存为docker-compose.yaml

version: '3'
services:
  onenav:
    container_name: onenav
    ports:
      - "3080:80"
    volumes:
      - './data:/data/wwwroot/default/data'
    image: 'helloz/onenav'
    restart:
      always

然后运行命令docker-compose up -d进行启动。

安全设置

如果您使用的Nginx,请务必将以下规则添加到站点配置中,否则数据库可能被下载(非常危险):

#安全设置
location ~* ^/(class|controller|db|data|functions|templates)/.*.(db3|php|php5|sql)$ {
    return 403;
}
location ~* ^/(data)/.*.(html)$ {
        deny all;
}
location /db {
        deny all;
}

#伪静态
rewrite ^/click/(.*) /index.php?c=click&id=$1 break;
rewrite ^/api/(.*)?(.*) /index.php?c=api&method=$1&$2 break;
rewrite /login /index.php?c=login break;

如果使用得Apache则无需设置,已内置.htaccess进行屏蔽。 如果您使用的Docker安装也无需此配置,默认已内置规则 如果使宝塔一键安装用户,不需要此设置

Nginx反向代理

如果您使用的Docker部署,需要通过域名进行访问,您可以通过下面2个方法完成:

直接将域名解析到您服务器IP,然后访问http://域名:端口进行访问 如果您不希望带上容器端口,也可以通过Nginx反向代理绑定域名进行访问 Nginx反向代理配置参考:

server {
    listen 80;

 #改成你自己的域名
    server_name demo.onenav.top;

    #指定网站日志路径
    #access_log /data/logs/demo.onenav.top_nginx.log xlog;
    charset utf-8,gbk;

 location / {
        proxy_connect_timeout 10;
     # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
     proxy_http_version 1.1;
     proxy_set_header Connection "";
     #chunked_transfer_encoding off;
        proxy_set_header Host $host;
     #将3080改成你容器的端口
        proxy_pass http://127.0.0.1:3080;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

网盘

alist

AList 是一款免费开源支持多存储的自建网盘程序 (文件列表程序),可以轻松在 VPS 服务器、NAS、普通电脑 Win、Mac、Linux 上部署。它除了能作为一款自建网盘 (将文件保存在设备硬盘上) 外,最大的特色就是支持「挂载各大主流网盘」,免费将它们的空间“据为己用”!AList 提供了网页版界面能让你集中管理各大网盘的文件,支持文件上传下载、文件管理、预览图片、查看文档、在线播放音乐、视频等等。AList 网页版可以支持 PC 以及手机浏览器。而更加有用的是,AList 还支持对外提供 WebDAV 服务!也就是能将网盘转换成 WebDAV 协议,这样我们就可以用各种各样的软件来访问它们了 (比如使用播放器直接播放网盘里的视频)。通过 WebDAV 协议,你还能使用 nPlayer、Infuse、Fileball、Kodi、MX Player、KMPlayer、NOVA、VLC、PotPlayer 等播放器直接连接播放了!而且如果借助「RaiDrive」等工具,还能把 Alist 的 WebDAV 服务直接挂载变成一个虚拟的本地“硬盘”来使用 (如上图),可以用于备份、传照片、保存文档、播放原画质视频等等,用途更加广泛。

sudo curl -fsSL "https://alist.nn.ci/v3.sh" -o v3.sh
sudo bash v3.sh
./alist storage list

./alist storage disable /233
# /usr/lib/systemd/system/alist.service
# 其中 path_alist 为 AList 所在的路径

[Unit]
Description=alist
After=network.target

[Service]
Type=simple
WorkingDirectory=path_alist
ExecStart=path_alist/alist server
Restart=on-failure

[Install]
WantedBy=multi-user.target
# 重载配置
systemctl daemon-reload
# 启动:
systemctl start alist
# 关闭:
systemctl stop alist
# 配置开机自启:
systemctl enable alist
# 取消开机自启:
systemctl disable alist
# 状态:
systemctl status alist
# 重启:
systemctl restart alist

AList 支持后端挂载的存储服务:

Alist 部署安装教程:

Alist Helper 桌面版的功能:

docker run -d --restart=always -v /your/host/dir:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest
# -v 是挂载数据目录,其中的 /your/host/dir 是你主机上的目录,自行修改
# -p 是绑定端口号,启动后可通过「http://主机IP:5244」进行访问

# 如需手动设置密码,则可以执行下面的命令:
docker exec -it alist ./alist admin set 你的密码

待 Alist 服务成功启动之后,我们就能通过浏览器访问它了:

Alist 作为一个网盘文件管理器,它后端支持挂载的存储服务非常非常多!包括但不限于本地硬盘存储、SMB 共享、FTP / SFTP、WebDAV、各大云服务的对象存储等,同时还可以支持各种网盘:百度网盘、阿里云盘、OneDrive (SharePoint)、迅雷云盘、天翼云盘、移动云盘、腾讯微云、PikPak、夸克网盘、Dropbox、Seafile 等等,非常丰富。

在 Alist 的管理界面中的「存储」页面,我们可以随意添加它所支持的网盘。具体每一个网盘的添方法都有所区别,比如需要扫码登录账号获取 token 或 cookie 等,具体就需要大家「参考官网的文档」来使用了

AList 的 WebDAV 服务: AList 运行后就会开启 WebDAV 服务,供其他程序连接,下面是其连接信息,大家可以参考:

URL <http://主机IP地址:端口号/dav/>
路径 /dav
协议 http
端口号 与网页端一致
WebDAV用户名 与网页端用户名一致
WebDAV密码 与网页端密码一致

将AList 变成本地硬盘盘符 比如有了这些信息,你就可以使用 RaiDrive 将 Alist 的 WebDAV 挂载成本地硬盘了。

AList 功能特性:

AList 不仅是一款开源实用的自建网盘程序,通过它你还可以自由添加任意多的网盘作为背后存储,从而实现“多网盘聚合管理”!同时还能将网盘空间转换成 WebDAV 服务“据为己用”。

无论是作为网络影视资源库,或是文档备份的空间,它都能让你更好地利用网盘的容量,节省本地磁盘空间。从而也能省下一大笔购买 NAS 、硬盘的开支。不得不说,AList 绝对是一个非常实用的开源项目,如果你有一点动手能力,绝对值得部署一个。

百度网盘

omv 家用 nas 搭建[3], 百度云网盘部署

docker pull johngong/baidunetdisk
docker create  \
    --name=baidunetdisk  \
    -p 5800:5800  \
    -p 5900:5900  \
    -v /配置文件位置:/config  \
    -v /下载位置:/config/baidunetdiskdownload  \
    --restart unless-stopped  \
    johngong/baidunetdisk:latest

docker-compose:

---
version: "2.1"
services:
  baiduNetdisk:
    image: johngong/baidunetdisk:latest
    container_name: baiduNetdisk
    environment:
      - TZ=Asia/Shanghai
      - VNC_PASSWORD=123456
    volumes:
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/software/baiduNetdisk/config:/config
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/pt/baidupcs/downloads:/config/baidunetdiskdownload
    ports:
      - 5900:5900
      - 6080:5800
    restart: unless-stopped

远程下载

xunlei

命令行/远程下载(无图形界面)

适合服务器或 NAS 环境,通过命令行管理。

Xware:迅雷的旧版远程下载核心,路由固件。解压后运行 portal获取激活码,在迅雷远程页面(yuancheng.xunlei.com)绑定后即可添加任务。

状态:该方案年久失修,在新版内核或高版本 glibc 环境下极易出现段错误(Segmentation Fault),仅建议在旧系统或特定设备上使用。

安装使用迅雷Xware

在Docker环境中实现NAS版迅雷安装指南

docker run -d \
 --name=xunlei \
 --hostname=mynas \
 --net=host \
 -v /mnt/sdb1/xunlei:/xunlei/data \
 -v /mnt/sdb1/downloads:/xunlei/downloads \
 --restart=unless-stopped \
 --privileged \
 cnk3x/xunlei:latest

hostname:主机名称(设备名称)
/mnt/sdb1/xunlei:为迅雷配置保存路径,请根据自身情况修改
/mnt/sdb1/downloads:迅雷下载文件保存路径,请根据自身情况修改
latest:版本号,截至目前,Docker镜像最新的版本号为3.7.1,如果您使用latest安装发现不是最新版本,建议手动修改版本号

使用docker-compose安装

services:
  xunlei:
    image: cnk3x/xunlei:latest
    privileged: true
    container_name: xunlei
    hostname: mynas
    network_mode: host
    volumes:
      - /mnt/sdb1/xunlei:/xunlei/data
      - /mnt/sdb1/downloads:/xunlei/downloads
    restart: unless-stopped

参数含义同上,安装完毕后访问端口为http://IP:2345,也可以增加XL_WEB_PORT变量来指定端口,具体见:https://hub.docker.com/r/cnk3x/xunlei

如果您使用的host网络模式,还需要在防火墙上放行2345端口,命令为:

# 如果是firewalld
firewall-cmd --zone=public --add-port=2345/tcp --permanent
firewall-cmd --reload
# 如果是ufw
ufw allow 2345

Aria2 一键安装管理脚本 增强版

多线程下载工具,支持http/ftp/BT等协议

sudo apt install aria2
# or
wget -N https://github.com/P3TERX/aria2.sh && chmod +x aria2.sh
./aria2.sh
# 1. 下载单个文件(最常用)
aria2c http://example.com/file.zip

# 2. 断点续传(-c 参数,网络不稳时必备)
aria2c -c http://example.com/largefile.iso

# 3. 多线程加速(-s 指定连接数,-x 指定线程数)
aria2c -s 10 -x 10 http://example.com/bigfile.tar.gz

# 4. 下载磁力链接或种子
aria2c 'magnet:?xt=urn:btih:...'


nano ~/aria2/aria2.conf
## 基础设置 ##
# 启用后台守护进程模式
daemon=true
# 下载保存目录(请替换为你的实际路径,如 /home/你的用户名/Downloads)
dir=/home/你的用户名/Downloads/aria2_downloads
# 启用断点续传
continue=true
# 最大并发下载数
max-concurrent-downloads=5

## RPC 远程控制设置(核心) ##
# 启用 RPC
enable-rpc=true
# 监听所有网络接口(允许网页连接)
rpc-listen-all=true
# RPC 监听端口(默认 6800)
rpc-listen-port=6800
# 允许所有来源跨域(AriaNG 必须)
rpc-allow-origin-all=true
# RPC 密钥(重要!请设置一个复杂密码,连接 AriaNG 时需要)
rpc-secret=Your_Secret_Token_123

## 会话和日志 ##
# 会话保存文件(记录未完成的任务)
save-session=~/.config/aria2/aria2.session
# 定时保存会话(秒)
save-session-interval=60
# 日志文件(可选,排查问题时有用)
# log=~/.config/aria2/aria2.log
# log-level=warn
# 创建服务文件(需 root 权限)
sudo nano /etc/systemd/system/aria2.service
[Unit]
Description=Aria2 RPC Daemon
After=network.target

[Service]
Type=forking
# 请将 User 替换为你的实际用户名
User=你的用户名
ExecStart=/usr/bin/aria2c --conf-path=/home/你的用户名/.config/aria2/aria2.conf
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
# 重载 systemd 配置
sudo systemctl daemon-reload
# 设置开机自启
sudo systemctl enable aria2.service
# 立即启动服务
sudo systemctl start aria2.service
# 检查状态,看到 active (running) 即为成功
sudo systemctl status aria2.service

挂载 SMB 共享为本地目录

在宿主机上执行命令,将远程 SMB 路径映射到本地(例如 /mnt/nas_download)

# 创建挂载点
sudo mkdir -p /mnt/nas_download

# 挂载 SMB(请替换为你的实际参数)
sudo mount -t cifs //192.168.1.100/Downloads /mnt/nas_download -o username=yourname,password=yourpass,vers=2.0,uid=1000,gid=1000,file_mode=0777,dir_mode=0777

#关键参数:vers=2.0是兼容性关键,如果报错可尝试改为 vers=1.0或 vers=3.0。
#//192.168.1.100/share_path:你的 SMB 服务器地址和共享名。
#uid/gid:设置为运行 Aria2 的用户 ID,确保有写权限。
#file_mode/dir_mode:设置文件权限,避免下载后无法读写
#开机自动挂载:编辑 /etc/fstab添加一行,确保重启后依然有效:
//192.168.1.100/Downloads /mnt/nas_download cifs username=yourname,password=yourpass,vers=2.0,uid=1000,gid=1000,file_mode=0777,dir_mode=0777 0 0
#编辑 Aria2 的配置文件(通常是 aria2.conf),将下载目录指向挂载点
# 修改下载目录
dir=/mnt/nas_download

# 如果使用了自动移动完成文件脚本,也需对应修改
# on-download-complete=/path/to/your/script.sh
systemctl restart aria2


# 1. 创建目录
sudo mkdir -p /opt/alist/data/temp/aria2

# 2. 设置权限(假设你的当前用户是 alist)
sudo chown -R alist:alist /opt/alist/data/temp
# 或者给所有人写权限(测试用)
sudo chmod 777 -R /opt/alist/data/temp

# 3. 验证
ls -la /opt/alist/data/temp/

transmission

BT下载工具,用来保种不错,占用很低

sudo apt install transmission-daemon -y
sudo find / -name transmission-daemon
cd ~/.config/transmission-daemon
sudo nano settings.json
sudo service transmission-daemon restart
sudo transmission-daemon -d

修改transmission配置,实现远程访问transmission

{
  "rpc-authentication-required": true,
  "rpc-bind-address": "0.0.0.0",
  "rpc-enabled": true,
  "rpc-host-whitelist": "",
  "rpc-host-whitelist-enabled": true,
  "rpc-password": "123456",
  "rpc-port": 9091,
  "rpc-url": "/transmission/",
  "rpc-username": "admin",
  "rpc-whitelist": "127.0.0.1,192.168.*.*",  // 如果上面是 true,这里需包含 AList 所在 IP 网段
  "rpc-whitelist-enabled": false,
}
curl -I "http://transmission:123456@你的服务器IP:9091/transmission/rpc"

如果返回 HTTP/1.1 409 Conflict:说明账号密码完全正确,问题出在 AList 的配置页面上(大概率是密码框里有隐藏空格)。

如果返回 401 Unauthorized:说明 Transmission 端配置未生效,请检查服务是否重启成功,或配置文件路径是否正确。

Transmission URI: http://transmission:123456@你的服务器IP:9091/transmission/rpc

在 Transmission 服务器挂载 SMB

# 1. 创建本地挂载点
sudo mkdir -p /mnt/nas_download

# 2. 安装 CIFS 工具(如未安装)
sudo apt-get install cifs-utils

# 3. 手动挂载(示例)
sudo mount -t cifs //192.168.1.100/share /mnt/nas_download -o username=你的用户名,password=你的密码,uid=1000,gid=1000,file_mode=0777,dir_mode=0777

# 4. 验证挂载
df -h | grep nas_download

权限说明:uid和 gid需设置为运行 Transmission 服务的用户 ID(通常为 debian-transmission或你的用户名),否则 Transmission 会因权限不足无法写入。使用 id username命令查看具体 ID。

开机自动挂载:编辑 /etc/fstab添加一行,确保重启后依然有效。

//192.168.1.100/Downloads /mnt/nas_download cifs username=yourname,password=yourpass,vers=2.0,uid=1000,gid=1000,file_mode=0777,dir_mode=0777 0 0

配置 Transmission

修改 Transmission 的配置文件 settings.json(通常位于 /var/lib/transmission-daemon/info/或 /etc/transmission-daemon/)

{
    "download-dir": "/mnt/nas_download/complete",  // 完成目录
    "incomplete-dir": "/mnt/nas_download/incomplete", // 未完成目录(可选)
    "incomplete-dir-enabled": true,
    ... // 其他配置保持不变
}
# 1. 停止服务
sudo systemctl stop transmission-daemon

# 2. 编辑配置文件(推荐使用 nano 或 vim)
sudo nano /var/lib/transmission-daemon/info/settings.json
{
  # 3. 修改以下关键参数(将 false 改为 true,并设置密码)
  "rpc-authentication-required": true,    # 开启认证
  "rpc-username": "admin",                # 自定义用户名
  "rpc-password": "your_password",        # 自定义密码(明文,启动后会自动加密)
  "rpc-whitelist": "127.0.0.1,192.168.*.*",  // 如果上面是 true,这里需包含 AList 所在 IP 网段
  "rpc-whitelist-enabled": false,         # 关闭IP白名单(方便外网访问)
}
# 4. 保存后启动服务
sudo systemctl start transmission-daemon
sudo systemctl enable transmission-daemon  # 设置开机自启

qbitttorrent

BT下载工具,抢上传比较厉害,一般PT用得比较多

omv 家用 nas 搭建[2], qbitttorrent 部署

docker pull linuxserver/qbittorrent

docker-compose:

---
version: "2.1"
services:
  qbittorrent:
    image: ghcr.io/linuxserver/qbittorrent
    container_name: qbittorrent
    environment:
      - PUID=998
      - PGID=100
      - TZ=Asia/Shanghai
      - WEBUI_PORT=9001
    volumes:
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/software/qbittorrent/config:/config
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/pt/qbittorrent/downloads:/downloads
    ports:
      - 6881:6881
      - 6881:6881/udp
      - 9001:9001
    restart: unless-stopped

qbittorrent-nox

qbittorrent webui版 在 Ubuntu 服务器上安装 qBittorrent-nox

[Unit]
Description=qBittorrent Command Line Client
After=network.target

[Service]
Type=forking
User=root

ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080
Restart=on-failure

[Install]
WantedBy=multi-user.target
# Remove qBittorrent Stable
sudo add-apt-repository --remove ppa:qbittorrent-team/qbittorrent-stable
# Remove qBittorrent Unstable (Nightly)
sudo add-apt-repository --remove ppa:qbittorrent-team/qbittorrent-unstable -y
# Remove qBittorrent
sudo apt autoremove qbittorrent-nox

播放服务

jellyfin

omv 家用 nas 搭建[4], jellyfin 部署

jellyfin 作为播放系统,除了海报墙等基础功能外,还自带免费的硬件解码以及转码功能,对于远程播放且带宽受限的用户来说,是一个比较经济的解决方案。除此之外,jellyfin 源码也在 github 上开源了,这相比闭源系统来说,使用更加放心。

docker pull linuxserver/jellyfin

docker-compose:

---
version: "2.1"
services:
  jellyfin:
    image: ghcr.io/linuxserver/jellyfin
    container_name: jellyfin
    environment:
      - PUID=998
      - PGID=100
      - TZ=Asia/Shanghai
    volumes:
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/software/jellyfin/config:/config # 配置
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/pt/qbittorrent/downloads/Movies:/data/Movies # 电影
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/pt/qbittorrent/downloads/Musics:/data/Musics # 音乐
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/pt/qbittorrent/downloads/Pictures:/data/Pictures # 图片

    ports:
      - 9003:8096 # web ui
      - 8920:8920 # optional
      - 7359:7359/udp # optional
      - 1900:1900/udp # optional
    devices:
      - /dev/dri:/dev/dri # Intel 集显驱动
    restart: unless-stopped

VidHub

VidHub 是一款主打“聚合播放”的跨平台媒体播放器。它的核心卖点不是简单的本地播放,而是能把你的网盘、NAS、本地文件统统整合到一个界面里,生成类似 Netflix 的海报墙,实现一站式观影。

功能维度 具体支持
资源聚合​ 网盘直连:阿里云盘、百度网盘、115、移动/天翼云盘等(无需下载,直接在线播放)。
NAS/服务器:支持 SMB、WebDAV 协议,可直连 Emby、Jellyfin、Plex 媒体服务器。
本地文件:手机、电脑、电视本地存储。
观影体验​ 海报墙:自动从 TMDB 刮削影片信息,将杂乱文件名变成精美的海报墙,支持剧集分季。
高清解码:支持 4K、HDR、杜比视界及蓝光原盘播放,兼容 MKV、MP4 等主流格式。
字幕音轨:支持外挂字幕(SRT/ASS)、音轨切换、倍速播放、投屏(DLNA/AirPlay)。
跨端同步​ 支持 iOS、Android(含TV)、macOS、Windows。通过 iCloud 或账号同步观看进度和收藏。

同步

urbackup

omv 家用 nas 搭建[5], urbackup 部署

nas 中一个重要功能就是同步不同设备的数据。同步大概可分为定时同步和增量同步,定时同步一般是设定时间间隔,以每个时间间隔作为增量进行同步更新。而增量同步则是每当待同步的文件夹更新时,服务端主动拉取信息进行同步。

C/S 架构需要远程部署服务端,在本地部署客户端,并且服务端与客户端成功建立连接进行配对。当客户端在事件触发后有同步需求时,将会往服务端发送同步信息,进而开始同步进程。

urbackup 架构也属于 C/S 架构,需要在本地下载同步客户端,远程部署服务端,在客户端设置按照文件夹或是按照磁盘为单位,选择增量同步方式或是定时同步方式进行同步。

docker pull uroni/urbackup-server

docker-compose:

version: '2'

services:
  urbackup:
    image: uroni/urbackup-server:latest
    container_name: urbackup
    restart: unless-stopped
    environment:
      - PUID=998 # Enter the UID of the user who should own the files here
      - PGID=100  # Enter the GID of the user who should own the files here
      - TZ=Asia/Shanghai # Enter your timezone
    volumes:
      - /srv/dev-disk-by-uuid-760db5aa-db10-48eb-bc2e-06fcf98b2c8f/software/urbackup:/var/urbackup
      - /srv/dev-disk-by-uuid-c9ed017d-390d-4243-8ffd-5089e6ac1d91/backup:/backups
    network_mode: "host"

开发环境

版本控制

gitea

Private, Fast, Reliable DevOps Platform

文档

gcc

文字转语音服务