一、一共两个核心程序,缺一不可
manager 管理端(调度中心)
作用:存放同步任务数据库、接收 worker 上报状态、下发同步计划、网页后台管理(可选)
配置文件:
/usr/local/tunasync/conf/manager.conf数据存放:
/var/lib/tunasync/tunasync.db(任务记录库)
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
参数说明:
[global]name:worker 唯一名称,注册到 manager 标识
mirror_dir:本地镜像存储目录(前面创建的
/home/mirror/mirrors)concurrent:并发同步任务数
[manager]api_base:manager 调度地址端口,本地 127.0.0.1:14242
token:必须与 manager.conf 密钥完全相同
[[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 开机自启系统服务(解决启动顺序颠倒、后台常驻问题)
前置准备
确认两份配置文件存在:
/usr/local/tunasync/conf/manager.conf/usr/local/tunasync/conf/worker.conf
目录权限归属
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确认所有旧进程已经全部杀死
bash
运行
pkill tunasync
ps aux | grep /usr/local/bin/tunasync
输出只有 grep 自身,无 tunasync 业务进程才算干净。
确认你已经完整执行过创建 systemd 服务的两条 tee 命令,并且执行了
bash
运行
sudo systemctl daemon-reload
权限校验(避免运行报错)
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
三、验证是否正常运行
查看状态
bash
运行
systemctl status tunasync-manager
systemctl status tunasync-worker
两行都显示 active (running) 代表启动成功。
实时看同步日志
bash
运行
journalctl -u tunasync-worker -f
出现 Worker local-worker registered 说明两端通信正常,开始同步阿里云镜像源。
补充说明
用 systemd 服务后不会再出现之前 connection refused 报错,配置里写了 After=tunasync-manager.service,worker 只会在 manager 启动完成后再运行。