一、先讲核心结论:apt-mirror 和 Tunasync 是什么、有没有重复 / 多余

1. 本质定位完全不同,不是替代关系,但业务上 Tunasync 可以完整替换 apt-mirror

  1. apt-mirror:单一工具,只做 APT/Ubuntu 二进制源码包同步,仅适配 Debian/Ubuntu,无调度、无后台面板、只能写定时脚本,轻量但功能单一。

  2. Tunasync:一站式镜像同步调度平台,通用同步框架,支持 rsync/命令脚本,能同步 Ubuntu、CentOS、PyPI、NPM、Docker、ISO 等全类型仓库,自带调度、任务管理、Web 管理面板,适合长期企业统一镜像站。

2. 两者重叠点(看起来 “多余” 的地方)

二者都能实现:同步 Ubuntu apt 软件源到本地磁盘,Nginx 对外提供内网 apt 源给服务器安装系统包。

只同步 Ubuntu 且机器少、短期使用:apt-mirror 够用;

多系统、多类型仓库、长期运维、需要可视化管理:apt-mirror 就属于多余,统一用 Tunasync 一套搞定。

3. 核心差异对照表

表格

对比维度

apt-mirror

Tunasync

支持仓库类型

仅 Ubuntu/Debian APT 包,仅 deb

APT、YUM、PyPI、NPM、Docker、ISO、helm 全类型

同步方式

内置 apt 专属下载逻辑

rsync / 自定义脚本双模式,上游源灵活切换清华 / 阿里

任务调度

无内置调度,依赖 crontab 定时执行

内置调度,配置interval自动周期同步,支持启停 / 禁用任务

状态管理

无,同步成功失败只能看日志

记录同步进度、上次成功时间、任务运行状态,命令行查看

可视化面板

无,纯命令行操作

配套 Web 管理面板,页面查看 / 启停同步任务

多任务并发

只能单任务串行拉取

支持限制并发同步数,控制带宽磁盘 IO

元数据处理

自动生成 apt 仓库索引

rsync 同步上游现成元数据,无需手动重建索引

运维成本

简单但碎片化,多源要写一堆脚本

一套平台统一管理所有镜像,脚本统一存放

适用周期

短期临时内网源、几十台机器

长期企业统一镜像站、上百台服务器、多产品线

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。

二、你的环境现状梳理(理清两套东西,解决冗余)

  1. 现有旧体系:apt-mirror 同步 Ubuntu24.04,存储 /data/apt-mirror,Nginx 路径 /ubuntu/ 给老机器使用;

  2. 新部署体系:Tunasync 统一调度,存储 /data/mirrors,正在同步全新 ubuntu 源,后续还要加 PyPI、CentOS;

  3. 冗余点:两套 Ubuntu apt 源同步程序,两份 Ubuntu 完整包占用双倍磁盘空间,两套同步定时 / 日志,重复维护。

两种整合方案(二选一,按需选择)

方案 1:长期标准方案(淘汰 apt-mirror,全量 Tunasync,消除冗余)

1. 操作步骤

  1. 停止 apt-mirror 定时任务,删除 apt-mirror 同步脚本,不再更新旧 apt 目录;

  2. Tunasync 完整同步 Ubuntu 源,作为唯一标准 apt 源;

  3. Nginx 兼容旧路径:/ubuntu/ 301 重定向到 Tunasync 新地址,存量机器自动切换,不用改本地 sources.list;

  4. 磁盘清理:确认内网全部切换完成后,删除 /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

缺点(冗余问题)

  1. Ubuntu apt 包两份完整存储,占用双倍磁盘空间;

  2. 两套同步工具:apt-mirror 靠 crontab,Tunasync 内置调度,两套日志分开排查;

  3. 新增 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 存量文件保留,仅做过渡观察;