一、先讲核心结论:apt-mirror 和 Tunasync 是什么、有没有重复 / 多余
1. 本质定位完全不同,不是替代关系,但业务上 Tunasync 可以完整替换 apt-mirror
apt-mirror:单一工具,只做 APT/Ubuntu 二进制源码包同步,仅适配 Debian/Ubuntu,无调度、无后台面板、只能写定时脚本,轻量但功能单一。
Tunasync:一站式镜像同步调度平台,通用同步框架,支持
rsync/命令脚本,能同步 Ubuntu、CentOS、PyPI、NPM、Docker、ISO 等全类型仓库,自带调度、任务管理、Web 管理面板,适合长期企业统一镜像站。
2. 两者重叠点(看起来 “多余” 的地方)
二者都能实现:同步 Ubuntu apt 软件源到本地磁盘,Nginx 对外提供内网 apt 源给服务器安装系统包。
只同步 Ubuntu 且机器少、短期使用:apt-mirror 够用;
多系统、多类型仓库、长期运维、需要可视化管理:apt-mirror 就属于多余,统一用 Tunasync 一套搞定。
3. 核心差异对照表
表格
4. 什么时候 apt-mirror 是多余?什么时候保留?
场景 A:统一用 Tunasync,废弃 apt-mirror(推荐长期方案,无多余)
需求:同时维护 Ubuntu、后续要加 CentOS、Python PyPI、容器镜像;需要看同步面板、自动定时、统一存储目录;
处理:不再运行 apt-mirror 定时脚本,所有 apt 源同步交给 Tunasync;
兼容方案:Nginx 单独配置
/ubuntu/别名指向旧 apt-mirror 目录,存量服务器不用改源地址,平滑迁移。
场景 B:保留 apt-mirror,Tunasync 做其他仓库(短期过渡,不算多余)
需求:老机器全依赖旧 apt-mirror 地址,暂时不敢切换;仅用 Tunasync 同步 PyPI/CentOS 等其他仓库;
缺点:两套同步工具、两套定时脚本、两套存储目录,运维两份日志、两套磁盘目录,重复维护。
场景 C:只跑 Ubuntu,无其他仓库(apt-mirror 够用,Tunasync 多余)
几十台以内 Ubuntu 服务器,只需要 apt 源,不需要其他镜像,不用调度面板,直接 apt-mirror 最简部署,不用部署 Tunasync。
二、你的环境现状梳理(理清两套东西,解决冗余)
现有旧体系:
apt-mirror同步 Ubuntu24.04,存储/data/apt-mirror,Nginx 路径/ubuntu/给老机器使用;新部署体系:
Tunasync统一调度,存储/data/mirrors,正在同步全新 ubuntu 源,后续还要加 PyPI、CentOS;冗余点:两套 Ubuntu apt 源同步程序,两份 Ubuntu 完整包占用双倍磁盘空间,两套同步定时 / 日志,重复维护。
两种整合方案(二选一,按需选择)
方案 1:长期标准方案(淘汰 apt-mirror,全量 Tunasync,消除冗余)
1. 操作步骤
停止 apt-mirror 定时任务,删除 apt-mirror 同步脚本,不再更新旧 apt 目录;
Tunasync 完整同步 Ubuntu 源,作为唯一标准 apt 源;
Nginx 兼容旧路径:
/ubuntu/301 重定向到 Tunasync 新地址,存量机器自动切换,不用改本地 sources.list;磁盘清理:确认内网全部切换完成后,删除
/data/apt-mirror释放 TB 级磁盘。
配套完整 Nginx 配置(8081 端口,一套 Tunasync 兼顾面板 + apt 源 + ISO,旧地址自动跳转)
bash
运行
sudo tee /etc/nginx/sites-available/mirror-iso <<'EOF'
server {
listen 8081;
listen [::]:8081;
server_name _;
# Tunasync统一镜像根目录(唯一标准源:ubuntu/pypi/centos)
root /data/mirrors;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# Tunasync 管理面板 http://IP:8081/admin/
location ^~ /admin/ {
alias /var/www/tunasync-admin/;
index index.html;
try_files $uri $uri/ /admin/index.html;
}
# Tunasync API反向代理
location ^~ /api/ {
proxy_pass http://127.0.0.1:14242/;
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 X-Forwarded-Proto $scheme;
}
# 旧apt-mirror兼容路径:301永久重定向到Tunasync新ubuntu源,消除两套存储冗余
location /ubuntu/ {
return 301 /ubuntu/$request_uri;
}
# ISO装机镜像目录(独立存储,不和apt源冲突)
location /iso/ {
alias /data/iso/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
# 大文件缓存优化
location ~* \.(iso|deb|gz|xz|zip|tar|sha256|whl|rpm)$ {
expires 14d;
add_header Cache-Control "public, no-transform";
}
# 禁止访问隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
EOF
优势
彻底消除 apt-mirror 与 Tunasync 重复同步 Ubuntu 源的冗余,只维护一套同步程序;
统一存储目录
/data/mirrors,统一日志、统一任务调度、统一 Web 面板;存量服务器无需修改源配置,自动跳转新地址,平滑过渡。
方案 2:过渡兼容方案(两套并存,保留 apt-mirror,Tunasync 只同步其他仓库)
适合短期内不能改动内网服务器源配置、逐步迁移场景,两套工具同时运行,存在少量冗余,适合过渡期 1-3 个月。
Nginx 完整配置(旧 apt 源独立提供,Tunasync 负责新仓库、管理面板)
bash
运行
sudo tee /etc/nginx/sites-available/mirror-iso <<'EOF'
server {
listen 8081;
listen [::]:8081;
server_name _;
# Tunasync根目录:pypi、centos等新增仓库
root /data/mirrors;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# Tunasync 管理面板
location ^~ /admin/ {
alias /var/www/tunasync-admin/;
index index.html;
try_files $uri $uri/ /admin/index.html;
}
# Tunasync API代理
location ^~ /api/ {
proxy_pass http://127.0.0.1:14242/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 旧apt-mirror独立ubuntu源,不经过Tunasync,存量机器继续使用
location /ubuntu/ {
alias /data/apt-mirror/mirror/mirrors.tuna.tsinghua.edu.cn/ubuntu/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
# ISO镜像目录
location /iso/ {
alias /data/iso/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
# 静态文件缓存
location ~* \.(iso|deb|gz|xz|zip|tar|sha256|whl|rpm)$ {
expires 14d;
add_header Cache-Control "public, no-transform";
}
# 拦截隐藏文件
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
EOF
缺点(冗余问题)
Ubuntu apt 包两份完整存储,占用双倍磁盘空间;
两套同步工具:apt-mirror 靠 crontab,Tunasync 内置调度,两套日志分开排查;
新增 Ubuntu 版本需要同时修改 apt-mirror 配置和 Tunasync 配置,重复操作。
清理旧 apt-mirror 同步脚本
bash
运行
# 删除CentOS、Ubuntu旧同步脚本
sudo rm -f /opt/mirror_sync_centos.sh
sudo rm -f /opt/apt_sync.sh
# 备份apt-mirror原始配置文件
sudo cp /etc/apt/mirror.list /etc/apt/mirror.list.bak
二、终止正在运行的 apt-mirror 同步进程
bash
运行
# 查看apt-mirror后台进程
ps aux | grep apt-mirror
# 强制杀掉所有apt-mirror进程,停止同步
pkill apt-mirror
三、更新 Nginx 配置,配置 /ubuntu/ 永久 301 跳转至 Tunasync 标准源
bash
运行
sudo tee /etc/nginx/sites-available/mirror-iso <<'EOF'
server {
listen 8081;
listen [::]:8081;
server_name _;
# Tunasync统一镜像根目录(唯一标准源)
root /data/mirrors;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
# Tunasync Web管理面板
location ^~ /admin/ {
alias /var/www/tunasync-admin/;
index index.html;
try_files $uri $uri/ /admin/index.html;
}
# Tunasync Manager API反向代理
location ^~ /api/ {
proxy_pass http://127.0.0.1:14242/;
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 X-Forwarded-Proto $scheme;
}
# 兼容旧apt-mirror路径,301永久重定向到Tunasync ubuntu源
location /ubuntu/ {
return 301 $scheme://$host:$server_port/ubuntu/$request_uri;
}
# ISO装机镜像目录保持不变
location /iso/ {
alias /data/iso/;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
# 大文件缓存优化
location ~* \.(iso|deb|gz|xz|zip|tar|sha256|whl|rpm)$ {
expires 14d;
add_header Cache-Control "public, no-transform";
}
# 禁止访问隐藏文件,安全加固
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
EOF
四、校验 Nginx 配置并平滑重载
bash
运行
# 校验配置语法,防止Nginx崩溃
sudo nginx -t
# 热重载配置,不中断内网下载业务
sudo systemctl reload nginx
五、验证 301 跳转是否生效
bash
运行
curl -I http://127.0.0.1:8081/ubuntu/dists/noble/
出现 301 Moved Permanently 代表跳转正常,内网服务器无需修改源配置自动切换 Tunasync 新 apt 源。
当前状态总结
apt-mirror 进程已杀死、同步脚本删除、配置备份,彻底停止更新旧仓库;
Nginx 旧访问路径 /ubuntu/ 全部自动跳转 Tunasync 同步的全新 Ubuntu 源;
/data/apt-mirror 存量文件保留,仅做过渡观察;