Lazy loaded image
TrueNAS SCALE 应用管理
Words 2360Read Time 6 min
2025-9-29
2025-11-10
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
  • 注意:truenas shell 默认不能直接 ctrl +c/v 复制粘贴,而是要通过 ctrl/shirt+insert 复制粘贴
TrueNAS 设置 postgresql 应用作为日志传送后备服务器
采用主机路径作为存储路径时,postgresql 应用需要有对应数据集的权限(采用 postgresql 后端的应用同理)
  • postgresql 应用会挂载 /var/lib/postgresql/data 到对应数据集,且尝试由容器中 postgres 用户的用户 ID 拥有
  • 正确设置 postgres 应用存储类型为主机路径的方法
    • 新建数据集,并在数据集预设里选择 应用 模板
      • 如果是子数据集,父数据集无需设置为 应用 模板
    • 进一步修改对应数据集权限,所有者改为 netdata,群组改为 docker,递归应用
    • 在 postgresql 应用中选择对应路径,勾选启用 ACL 和 ACL 条目下的 Force Flag
在 truenas 终端上确认 postgresql 数据目录的虚拟路径
  • docker exec ix-postgres-postgres-1 /bin/psql -U <username> -d <database> -c "SHOW data_directory;"
    • <username>, <database> 为部署时设置的用户名和数据库名称,可以修改
    • 正常情况下返回 /var/lib/postgresql/data
    • 对应挂载的物理路径 <mnt_path>
      • 如果是使用 ixVolume 自动创建存储,则挂载于 /mnt/.ix-apps/app_mounts/postgres/data 文件夹
      • 如果是主机路径则挂载于对应数据集的根路径
备份一份现有数据到其他数据集,以免出问题
  • cp -r <mnt_path> <other_dataset_path>/postgres
通过 pg_basebackup 拷贝其他 postgresql 数据库作为基础备份
  • 需要添加 postgres_temp 数据集作为额外存储,挂载到 /var/lib/postgresql/data.temp
    • 后面称为 <temp_mnt_path>
  • docker exec -it ix-postgres-postgres-1 /bin/bash
  • ls -al /var/lib/postgresql/data.temp
    • 查看挂载是否成功
  • pg_basebackup -Pv -Xs -h <master_ip> -D /var/lib/postgresql/data.temp -U <username> --wal-method=stream
    • 复制到 /var/lib/postgresql/data.temp,即 <temp_mnt_path>
    • 这里选择不压缩,不然还得解压一遍,需要压缩的添加 Ft -z
停止 postgresql 应用,在 truenas 内用基础备份数据覆盖原有数据
  • 在 truenas 终端上执行
  • rm -rf <mnt_path>/*
  • cp -r <temp_mnt_path>/* <mnt_path>/
  • 移除 pg_wal/ 内所有文件
    • rm -rf <mnt_path>/pg_wal/*
  • 如果有之前未归档的WAL段文件,拷贝到 pg_wal/ 内
    • cp <dataset_path>/postgres/pg_wal/* <mnt_path>/pg_wal
配置为恢复模式并在 postgresql.conf 内配置流复制
  • touch <mnt_path>/recovery.signal
  • vim <mnt_path>/postgresql.conf
    • primary_conninfo = 'host=<master-ip> port=5432 user=<usrname> password=<passwd> options=''-c wal_sender_timeout=5000'''
    • restore_command = 'cp /var/lib/postgresql/data/pg_wal/%f %p'
    • archive_cleanup_command = 'pg_archivecleanup /var/lib/postgresql/data/pg_wal %r'
  • 其他可能还需要配置 listen_addresses
    • 默认是 local,但 docker 内需要修改
重新启动容器等待 postgresql 完成基础备份恢复后正常运行
  • 注意,需要先对应修改用户名,密码和主库为其他 postgresql 数据库的值,否则无法启动
  • 可能也需要重新配置 postgresql.conf 的监听地址,pg_hba.conf 的 ACL 条目等
TrueNAS 安装 kavita 管理电子书和漫画
  • (侧边栏)应用→探索应用程序→kavita,然后选择安装
  • 网络配置可以选择宿主网络(默认5000端口)或映射到 30069 端口
挂载存储
  • Hostpath:直接挂载 TrueNAS 路径
  • SMB/CIFS:挂载网络路径
    • Mount Path: /mnt/smb
    • 服务器: truenas 服务器的 IP 或域名
      • 如果是本地可以用 localhost
    • 路径:SMB 共享的名称
    • 用户名
    • 密码
  • 硬件资源根据硬件情况进行配置
    • 至少提供 1 CPU,256 MB 内存
kavita 资料库使用简单指引
  • (右上方齿轮)设置→(侧边栏-服务器)资料库→添加资料库
  • 目录内文件路径必须遵守特定的目录格式
    • 根目录下只能放置文件夹,不能放置具体章节
    • 理想的目录结构样式如下
    • manga 类型文件名识别样例
      • https://wiki.kavitareader.com/guides/scanner/manga/
      • Filename
        Parsed Series Name
        Volume
        Chapter
        Noblesse - Episode 406 (52 Pages).7z
        Noblesse
        406
        [Hidoi]_Amaenaideyo_MS_vol01_chp02.rar
        Amaenaideyo MS
        1
        2
        Transferred to another world magical swordsman v1.2
        Transferred to another world magical swordsman
        1
        2
        Okusama wa Shougakusei c003 (v01) [bokuwaNEET]
        Okusama wa Shougakusei
        1
        3
        Goblin Slayer Side Story - Year One 025.5
        Goblin Slayer Side Story - Year One
        25.5
        Itoshi no Karin - c001-006x1 (v01) [Renzokusei Scans]
        Itoshi no Karin
        1-6
        Beelzebub_53[KSH].zip
        Beelzebub
        53
        Killing Bites Vol. 0001 Ch. 0001 - Galactica Scanlations (gb)
        Killing Bites
        1
        1
    • 压缩文件可以直接读取,但会作为单独的系列进行展示
    TrueNAS 通过 LXC 部署 PBS (Proxmox backup server)
    • 注意需要 TrueNAS Scale 25.04 或以上版本才支持本地运行 LXC
    (侧边栏)实例组→初始化→创建新实例
    • 虚拟化类型选择容器(LXC)
    • 镜像选择 debian bookworm default
    • 磁盘添加新的数据集 PBS,挂载到目标 /mnt/pbs
    • 代理组用于通过宿主机直接暴露对应 PBS
      • 宿主机和实例均填写协议 tcp, 8007 端口
      • 如果需要通过 SSH 直接管理可以添加 22 端口 SSH 映射
    • 网络默认即可
    • 创建成功后为数据集 PBS 创建 PBS 用户和用户组
    • 编辑 PBS 数据集 ACL,配置 PBS 为所有者和所有者组,应用预设 ACL - POSIX_OPEN
    进入实例 shell 配置 LXC 安装 PBS
    • (侧边栏)实例组→点击实例→(右方详细信息→工具)命令行
    • 设置 root 密码,用于后续 PBS root 登录
      • passwd
    • 替换软件源
      • sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
    • 安装依赖及需要的软件
      • apt update && apt install -y nano curl wget cron chrony
        • TFA 依赖于 chrony 或 ntp 服务
    • 添加 gpg key
      • wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
    • 添加 pbs 订阅
      • cat << EOF | sudo tee -a /etc/apt/sources.list > /dev/null deb https://mirrors.ustc.edu.cn/proxmox/debian/pbs bookworm pbs-no-subscription deb https://mirrors.tuna.tsinghua.edu.cn/debian-security/ bookworm-security main contrib EOF
    • 安装 pbs
      • apt update && apt install -y proxmox-backup-server
    • 创建用于存放备份数据的目录
      • mkdir /mnt/pbs/data
    lxc 容器的 chrony 需要修改启动参数,禁用对系统时钟的控制
    • TFA 依赖于 chrony 或 ntp 服务,chrony 默认无法正常启动
    • nano /etc/systemd/system/chronyd.service
      • ExecStart=/usr/sbin/chronyd -x
        • 添加 x 参数禁用对系统时钟的控制
    • systemctl daemon-reload
    • systemctl restart chrony
    • systemctl status chrony
    • 访问 https://<truenas-ip>:8007 登录 PBS
      • 使用 linux pam 认证登录
      • 用户 root 密码为此前设置的密码
    部署 PBS
    • 添加数据存储
      • 名称用于后续 PVE 部署中的 DataStore 字段
      • 使用此前创建的路径 /mnt/pbs/data
    创建 PBS SSL 证书
    • 直接在 Truenas 系统上而非 lxc 容器内的 SSH 内执行
    • 查看实例名称
      • incus list
        • 首列为名称 <instance_name>
    • 复制 Truenas 本体证书更新 PBS 证书
      • incus file push /etc/stepca-certificates/example.com.crt <instance_name>/etc/proxmox-backup/proxy.pem
      • incus file push /etc/stepca-certificates/example.com.key <instance_name>/etc/proxmox-backup/proxy.key
    • 更改所有者及文件权限
      • incus exec <instance_name> -- chown root:backup /etc/proxmox-backup/proxy.pem /etc/proxmox-backup/proxy.key
      • incus exec <instance_name> -- chmod 640 /etc/proxmox-backup/proxy.pem /etc/proxmox-backup/proxy.key
    • 重启服务
      • incus exec <instance_name> -- service proxmox-backup-proxy restart
        • 需要重启的服务为 proxmox-backup-proxy
    • 在 truenas 证书续签时添加上述步骤即可
      • nano /root/scripts/stepca-service-restart.sh
      在 PVE 上部署 Truenas 上的 PBS 为备份服务器
      • 如果启用了 TFA 二步认证,则 PBS 需要通过 API 令牌进行认证
      PBS 为 root 用户创建 API 令牌并配置权限
      • 配置→访问控制→API 令牌→添加
        • API 密钥仅显示一次,需要记住,后续在 PVE 上添加时作为密码使用
        • 使用时的用户名为 <usrname>!<apitokenname>
      • 配置→访问控制→权限→添加→API 令牌权限
        • 路径选择 /datastore
        • API 令牌选择刚才创建的
        • 角色选择 DataStoreAdmin
      PVE 数据中心→添加→Proxmox Backup Server
      • ID 为 PBS 在 PVE 上显示的名称,假设为 pbsapi
      • 服务器填 PBS 地址,无需添加端口号
      • 用户名为 <usrname>!<apitokenname>
        • 用户对应 PBS 中的用户而非 PVE 上的用户
      • DataStore 使用 PBS 上数据存储的对应名称
      指纹信息:证书续签后指纹会发生变更,需要配置定时任务修改
      • 查看 PBS 服务器指纹信息
        • step certificate inspect --roots=~/.step/certs/root_ca.crt --format=json https://<pbs.url> | jq -r .fingerprint_sha256 | sed 's/$/@/; s/../&:/g; s/:@//; s/@/:/'
          • 通过 step 工具远程查看
        • proxmox-backup-manager cert info
          • Fingerprint (sha256) 列为对应指纹
          • 需要在 PBS 服务器上执行
      创建定时任务检查并更新 /etc/pve/storage.cfg 中的指纹信息
      • vim /usr/local/share/scripts/pbs-fingerprint.sh
        • chmod +x /usr/local/share/scripts/pbs-fingerprint.sh
        • crontab -e
          • 17,47 * * * * /usr/local/share/scripts/pbs-fingerprint.sh 2>&1 >> /var/log/pbs-fingerprint.log
        • PVE 部署同步任务
          • PVE 数据中心→备份→添加
          • 具体 VM 备份时是否包含磁盘数据需要去对应硬件中勾选 备份 项
         
        上一篇
        mac 安装 gitea 提供 git 服务
        下一篇
        Openwrt IPv6 实践

        Comments
        Loading...