一、一共两个核心程序,缺一不可

  1. manager 管理端(调度中心)

    • 作用:存放同步任务数据库、接收 worker 上报状态、下发同步计划、网页后台管理(可选)

    • 配置文件:/usr/local/tunasync/conf/manager.conf

    • 数据存放:/var/lib/tunasync/tunasync.db(任务记录库)

  2. worker 工作端(真正拉取镜像)

    • 作用:根据 manager 下发的任务,rsync/http 拉取上游镜像,存本地磁盘

    • 配置文件:/usr/local/tunasync/conf/worker.conf

    • 本地镜像存储:/home/mirror/mirrors

1. 系统与磁盘说明

系统:Ubuntu Server

数据盘:/dev/sda1 挂载至 /home,大容量分区用于存放全部同步镜像

运行用户:shitou(日常操作普通用户,不全程 root)

2. 创建镜像存储目录并授权

本地镜像统一存放路径:/home/mirror/mirrors

bash

运行

# 创建目录
sudo mkdir -p /home/mirror/mirrors
# 修改目录归属为当前用户shitou
sudo chown -R shitou:shitou /home/mirror
# 权限放开读写
sudo chmod 755 /home/mirror/mirrors

3. 安装编译依赖包

Tunasync 基于 Go 语言开发,同步依赖 rsync,编译需要 git、gcc 编译工具链

bash

运行

sudo apt update
sudo apt install -y rsync git build-essential golang-go

验证依赖是否正常:

bash

运行

go version
git --version
rsync --version

二、源码编译安装 Tunasync

1. 拉取源码至用户工作目录

源码存放路径:/home/shitou/tunasync-src

bash

运行

# 切换到用户家目录
cd /home/shitou
# 克隆官方tunasync源码仓库
git clone https://github.com/tuna/tunasync.git tunasync-src
# 进入源码目录
cd tunasync-src

2. 编译生成二进制可执行文件

项目自带 Makefile,一键编译 amd64 架构程序

bash

运行

make

编译完成后,二进制文件输出在 build-linux-amd64/tunasync

3. 将程序放入系统全局路径

复制到 /usr/local/bin,任意终端可直接调用 tunasync 命令

bash

运行

sudo cp build-linux-amd64/tunasync /usr/local/bin/
# 验证全局调用
tunasync -h

4. 创建全局配置目录

配置文件统一存放路径:/usr/local/tunasync/conf/

bash

运行

sudo mkdir -p /usr/local/tunasync/conf
# 目录归属授权shitou,无需每次sudo编辑
sudo chown -R shitou:shitou /usr/local/tunasync

三、编写两份核心配置文件

3.1 管理调度端配置:manager.conf

作用:调度中心,存储同步任务数据库、监听端口供 worker 连接通信

数据库存放路径:/var/lib/tunasync/tunasync.db

1)先创建数据库目录并授权

bash

运行

sudo mkdir -p /var/lib/tunasync
sudo chown -R shitou:shitou /var/lib/tunasync

2)编辑 manager 配置

bash

运行

vi /usr/local/tunasync/conf/manager.conf

完整配置内容:

toml

[server]
listen = "0.0.0.0:14242"
token = "Sync@2026Tuna"

[files]
db_type = "bolt"
db_file = "/var/lib/tunasync/tunasync.db"

保存退出:Esc → 输入 :wq 回车

参数说明:

  • listen:监听端口 14242,worker 通过此地址建立连接

  • token:通信密钥,worker 配置必须完全一致才能注册成功

  • db_file:任务数据库,记录镜像同步状态、计划时间

3.2 同步工作端配置:worker.conf

作用:负责真实拉取上游镜像,本地存放在 /home/mirror/mirrors

bash

运行

vi /usr/local/tunasync/conf/worker.conf

完整可用配置(已修复 Rocky Linux 上游源,无 rsync 模块报错)

toml

[global]
name = "local-worker"
log_dir = "/home/mirror/logs/{{.Name}}"
mirror_dir = "/home/mirror/mirrors"
concurrent = 3

[manager]
api_base = "http://127.0.0.1:14242"
token = "Sync@2026Tuna"

# Ubuntu 同步任务
[[mirrors]]
name = "ubuntu"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu/"
interval = 43200
use_ipv6 = false

# Alpine 同步任务
[[mirrors]]
name = "alpine"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/alpine/"
interval = 43200
use_ipv6 = false

# Rocky Linux 阿里云rsync源(清华无rsync模块,替换后正常同步)
[[mirrors]]
name = "rockylinux"
provider = "rsync"
upstream = "rsync://mirrors.aliyun.com/rockylinux/"
interval = 43200
use_ipv6 = false

保存退出::wq

参数说明:

  1. [global]

    • name:worker 唯一名称,注册到 manager 标识

    • mirror_dir:本地镜像存储目录(前面创建的/home/mirror/mirrors

    • concurrent:并发同步任务数

  2. [manager]

    • api_base:manager 调度地址端口,本地 127.0.0.1:14242

    • token:必须与 manager.conf 密钥完全相同

  3. [[mirrors]] 每一段对应一套镜像同步任务

    • provider:同步协议,rsync 速度优先;http 备选

    • upstream:上游公共镜像源地址

    • interval:同步间隔,单位秒,43200=12 小时

四、标准启动运行流程(顺序不可颠倒)

终端窗口 1:启动 manager 调度服务,窗口保持常开

bash

运行

/usr/local/bin/tunasync manager -c /usr/local/tunasync/conf/manager.conf

启动成功标识:输出 listen on 0.0.0.0:14242,14242 端口持续监听,不可关闭窗口、不可 Ctrl+C

新开终端窗口 2:启动 worker 同步程序

bash

运行

/usr/local/bin/tunasync worker -c /usr/local/tunasync/conf/worker.conf

正常成功标识:打印 Worker <local-worker> registered

worker 自动读取配置,定时拉取 ubuntu/alpine/rockylinux 镜像到本地 /home/mirror/mirrors

1. 一键终止所有同步程序

bash

运行

# 杀死全部 tunasync 业务进程(manager + worker)
pkill tunasync

2. 清理多余日志监控进程(tail 实时日志进程,可选)

bash

运行

pkill tail

3. 验证进程已全部清空

bash

运行

ps aux | grep /usr/local/bin/tunasync
  • 正常结果:仅输出 grep 自身,无 manager、worker 程序进程;

  • 出现 /usr/local/bin/tunasync 代表未杀干净,重复执行 pkill tunasync

补充:如果已经部署了 systemd 服务,停止服务替代 pkill

bash

运行

# 先停worker,再停manager
sudo systemctl stop tunasync-worker
sudo systemctl stop tunasync-manager

二、部署 systemd 开机自启系统服务(解决启动顺序颠倒、后台常驻问题)

前置准备

  1. 确认两份配置文件存在:

    • /usr/local/tunasync/conf/manager.conf

    • /usr/local/tunasync/conf/worker.conf

  2. 目录权限归属 shitou:shitou

bash

运行

sudo chown -R shitou:shitou /usr/local/tunasync /var/lib/tunasync /home/mirror

步骤 1:创建 manager 调度服务单元

bash

运行

sudo tee /etc/systemd/system/tunasync-manager.service <<EOF
[Unit]
Description=Tunasync Manager 调度中心
After=network-online.target
Wants=network-online.target

[Service]
User=shitou
Group=shitou
ExecStart=/usr/local/bin/tunasync manager -c /usr/local/tunasync/conf/manager.conf
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

步骤 2:创建 worker 同步服务单元(依赖 manager,保证后启动)

bash

运行

sudo tee /etc/systemd/system/tunasync-worker.service <<EOF
[Unit]
Description=Tunasync Worker 同步任务程序
After=network-online.target tunasync-manager.service
Wants=network-online.target tunasync-manager.service

[Service]
User=shitou
Group=shitou
ExecStart=/usr/local/bin/tunasync worker -c /usr/local/tunasync/conf/worker.conf
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

步骤 3:重载 systemd 识别新服务

bash

运行

sudo systemctl daemon-reload

步骤 4:设置开机自启并启动整套服务

bash

运行

# 服务器重启自动拉起
sudo systemctl enable tunasync-manager tunasync-worker

# 启动调度manager
sudo systemctl start tunasync-manager
# 启动同步worker(自动等待manager端口就绪)
sudo systemctl start tunasync-worker

三、systemd 日常运维全套命令

1. 查看服务运行状态

bash

运行

# 查看manager状态
systemctl status tunasync-manager
# 查看worker同步状态
systemctl status tunasync-worker

2. 实时查看同步日志(替代 nohup 的 tail)

bash

运行

# manager实时日志
journalctl -u tunasync-manager -f
# worker同步实时日志
journalctl -u tunasync-worker -f

3. 修改同步源 / 配置后重载

bash

运行

# 仅重启worker(只改镜像任务配置时用)
sudo systemctl restart tunasync-worker
# 整套完整重启
sudo systemctl restart tunasync-manager tunasync-worker

4. 临时停止同步服务

bash

运行

sudo systemctl stop tunasync-worker tunasync-manager

5. 取消开机自启

bash

运行

sudo systemctl disable tunasync-manager tunasync-worker
  1. 确认所有旧进程已经全部杀死

bash

运行

pkill tunasync
ps aux | grep /usr/local/bin/tunasync

输出只有 grep 自身,无 tunasync 业务进程才算干净。

  1. 确认你已经完整执行过创建 systemd 服务的两条 tee 命令,并且执行了

bash

运行

sudo systemctl daemon-reload
  1. 权限校验(避免运行报错)

bash

运行

sudo chown -R shitou:shitou /usr/local/tunasync /var/lib/tunasync /home/mirror

二、启动整套服务命令

bash

运行

# 设置开机自启
sudo systemctl enable tunasync-manager tunasync-worker

# 启动调度端manager
sudo systemctl start tunasync-manager
# 启动同步worker(配置了依赖,会等manager就绪再运行)
sudo systemctl start tunasync-worker

三、验证是否正常运行

  1. 查看状态

bash

运行

systemctl status tunasync-manager
systemctl status tunasync-worker

两行都显示 active (running) 代表启动成功。

  1. 实时看同步日志

bash

运行

journalctl -u tunasync-worker -f

出现 Worker local-worker registered 说明两端通信正常,开始同步阿里云镜像源。

补充说明

用 systemd 服务后不会再出现之前 connection refused 报错,配置里写了 After=tunasync-manager.service,worker 只会在 manager 启动完成后再运行。