Truenas Scale 23 升级到 25 ,K3S To Docker

本来家里的NAS是很少动的,但是最近发现升级升不动了,由于truenas升级到24+以后做了重大调整,将应用从K3S全部迁移到了Docker,而我升级的时候官方已经不提供老版本的升级镜像,所以网上的方法一一试过都不可以用,所以决定还是手动迁移。

因为底层改Docker了,想来也不难成功。

0.环境说明

我本地其实是用PVE作为宿主机底层系统,TRUENAS作为虚拟机运行于其上。

①宿主机配置如下:

CPUAMD7542
RAM64G
硬盘4*16T HDD
系统盘QCOW虚拟磁盘
网卡直通1个2.5G,其余为虚拟网卡
当前版本:23.10.2升级新版:25.10.3 (Goldeye)

②升级软件清单:

编号软件版本
1mysql5.7.38
2trilium-cn
3phpmyadmin
4nextcloud
5plex

1.安装系统,导入磁盘

Truenas Scale 镜像下载地址:

https://download.truenas.com

①下载好镜像后,配置默认网卡,完成系统安装。

②登录PVE系统,导入镜像,在终端输入:

qm set 11 --scsi2 /mnt/pve/images/10/vm-10-disk-0.qcow2
#qm set truenas23ID --scsi2 /mnt/pve/images/truenas23ID/truenas23Disk.qcow2

注:如果是在物理机安装,则直接把原来的磁盘插入新机器即可。

③登录WEBUI,点击存储,选择导入池,这里选择原先的应用磁盘即可。

2.创建应用/应用数据迁移

应用数据迁移步骤说明:

I.确认原应用目录(truenas 23 旧数据目录)
II.备份原应用数据
III.在新版本创建应用(truenas 25.10.3)
IV.解决权限问题和应用依赖

注:建议先升级数据类依赖应用(如mysql)

①确认原应用目录:

假设原来应用的目录挂载于:

/mnt/olddata/app_config  #应用配置数据集
/mnt/olddata/app_data #应用数据数据集

②备份原应用数据

tar --acls --xattrs -cf - -C /mnt/olddata/app_config . | tar --acls --xattrs -xf - -C /mnt/newdata/app_config
#拷贝应用配置到新数据集,包括权限,ACL等
tar --acls --xattrs -cf - -C /mnt/olddata/app_data . | tar --acls --xattrs -xf - -C /mnt/newdata/app_data
#拷贝应用数据到新数据集,包括权限,ACL等

注:这里使用tar命令,减少磁盘的IO操作。

③创建应用:

进入 Apps → Discover Apps → Custom App (或 Launch Docker Image)。
或者直接通过 SSH 编写 docker-compose.yml

I.迁移mysql

truenas 创建自定义应用

点击应用→检查可用应用→自定义应用

配置应用信息:

  • Image Configuration:
    • Repository:mysql
    • Tag:5.7.38
  • 环境变量集合:
    • MYSQL_ROOT_PASSWORD:你的mysql密码
  • 网络配置:
    • 端口:#配置映射宿主机端口
  • 网络:
    • 名称: 任意标识,如 multi_ip_net
    • Aliases (Optional) :你的应用IP
    • Interface Name (Optional) 留空,或填 ens19(取决于你是否需要显式绑定)
    • MAC Address (Optional) 留空
    • IPv4 Address (Optional) 留空(已在 Aliases 中指定)
    • IPv6 Address (Optional) 留空
    • Gateway Priority (Optional) 留空
    • Priority (Optional) 留空
    • Custom DNS Setup 保持默认(不启用)

然后点击安装

注:如果要使用独立的IP,需要先使用docker建立网络:

docker network create -d ipvlan \
--subnet=10.0.10.0/24 \
--ip-range=10.0.10.0/24 \
-o parent=eth0 \
-o ipvlan_mode=l2 \
net_ip_vmbr1

也可以直接编辑使用docker-compose.yml文件

services:
mysql:
image: mysql:5.7.38
container_name: mysql5738
environment:
MYSQL_ROOT_PASSWORD: "你的密码"
volumes:
- /mnt/your_pool/apps/mysql/data:/var/lib/mysql
ports:
- "3307:3306" # 将宿主机的3307端口映射到容器的3306端口
networks:
- my_network # 指定使用自定义网络

networks:
my_network:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/24 # (可选) 为自定义网络指定子网
gateway: 10.0.0.1

然后在truenas shell中运行:

docker-compose up -d

就可以看到mysql能够正常运行了:

II.迁移phpmyadmin

这里仅列出docker-compose.yml文件,迁移流程类似:

services:
mysql:
image: phpmyadmin
container_name: latest
environment:
PMA_HOSTS: "默认数据库地址1,..."

networks:
- my_network # 指定使用自定义网络

networks:
my_network:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/24 # (可选) 为自定义网络指定子网
gateway: 10.0.0.1

III.迁移plex

plex是truenas官方APP,直接搜索APP,配置即可

如果使用docker compose ,参考:

docker-compse.yml

version: '3'
services:
plex:
image: plexinc/pms-docker:latest
container_name: plex
network_mode: host
environment:
- TZ=Asia/Shanghai
- PLEX_CLAIM=claim-xxxx # 可选,首次认领
volumes:
- <path/to/plex/database>:/config
- <path/to/transcode/temp>:/transcode
- <path/to/media>:/data
restart: unless-stopped

其它步骤同上

IV. 迁移 trilium-cn

由于 trilium-cn 已经不再更新,而且官方已经有了中文版本,所以直接改用最新版的Trilium(Turenas 官方应用叫Trilium Notes)

如果使用docker compose ,参考:

docker-compse.yml

services:
trilium:
# Optionally, replace `latest` with a version tag like `v0.90.3`
# Using `latest` may cause unintended updates to the container
image: triliumnext/trilium:latest
# Restart the container unless it was stopped by the user
restart: unless-stopped
environment:
- TRILIUM_DATA_DIR=/home/node/trilium-data
ports:
- '8080:8080'
volumes:
# Unless TRILIUM_DATA_DIR is set, the data will be stored in the "trilium-data" directory in the home directory.
# This can also be changed with by replacing the line below with `- /path/of/your/choice:/home/node/trilium-data
- ${TRILIUM_DATA_DIR:-~/trilium-data}:/home/node/trilium-data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro

其它步骤同上

V.迁移nextcloud

由于我之前使用的是nextcloud 31.0.8,使用config.php配置了mysql,truenas官方的nextcloud使用postgresql,我还是想使用mysql,所以先把nextcloud按31.0.8迁移,再进行升级:

docker-compse.yml参考:

services:
nextcloud:
image: nextcloud:31
environment:
TZ: "Asia/Shanghai"
volumes:
- /yourpool/nc-config:/var/www/html/config
- /yourpool/data:/var/www/html/data
networks:
my_network:
ipv4_address: #your ip
deploy:
resources:
limits: # 硬性限制(必须满足)
cpus: "8" # 最多使用2个CPU核心(如50%)
memory: 2048M # 最大内存2048MB
reservations: # 软性预留(最低保障)
cpus: "2" # 至少分配2个CPU核心
memory: 512M # 至少预留512内存

然后启动容器,修改版本进行升级:

docker compose up -d  #启动容器

等待网页能够正常访问

docker compose down #停止容器

修改docker-compose.yml 文件中“nextcloud:31”为“nextcloud:32”

docker compose up -d  #启动容器

等待升级完成,建议不要跨大版本升级,按31→32→33这样的顺序重复执行以上操作即可。

感觉这一趟操作下来比直接升级truenas中的应用方便很多,错误也少。

发表回复

Your email address will not be published.