博主头像

人間になりたい!!!!!


皖ICP备2025096275号

手把手自建 Debian 13 镜像源:ftpsync + Nginx 实战

前言

在某些企业中, 由于私有服务器有不联公网的要求, 但同时也需要更新相关软件包, 这时就需要自建软件镜像源. 而在某些 HomeLab 玩家中, 为了追求极致的速度和极低的延迟, 也会选择自建相关镜像源. 这篇文章将会记录博主自建 Debian 镜像源的全过程, 为有需要的人提供一些帮助.

示例环境

root@Mirror:~# neowofetch
       _,met$$$$$gg.             root@Mirror 
    ,g$$$$$$$$$$$$$$$P.          ----------- 
  ,g$$P"        """Y$$.".        OS: Debian GNU/Linux 13.6 (trixie) x86_64 
 ,$$P'              `$$$.        Host: KVM/QEMU (Standard PC (i440FX + PIIX, 1996) pc-i440fx-11.0) 
',$$P       ,ggs.     `$$b:      Kernel: 6.12.74+deb13+1-amd64 
`d$$'     ,$P"'   .    $$$       Uptime: 6 mins 
 $$P      d$'     ,    $$P       Packages: 450 (dpkg) 
 $$:      $$.   -    ,d$$'       Shell: bash 5.2.37 
 $$;      Y$b._   _,d$P'         Terminal: /dev/pts/0 
 Y$$.    `.`"Y$$$$P"'            CPU: Intel Xeon E5-2696 v4 (8) @ 2.1GHz 
 `$$b      "-.__                 Memory: 0.32 GiB / 1.92 GiB (16%) 
  `Y$$                           Network: Unknown 
   `Y$$.                         BIOS: SeaBIOS 0.0 (04/01/2014) 
     `$$b.
       `Y$$b.                                            
          `"Y$b._                                        
              `"""

注意

搭建软件镜像源需要非常多的磁盘存储, 在操作之前请确认你有足够多的空间去存放软件源. Debian 相关软件源大小可以从 这里 获取


开整

1. 前置工作

用于进行软件源同步的工具有非常多, 具体功能与特色可以参考下表

工具核心特点适用场景
apt-mirror简单易用, 配置直观, 适合快速搭建完整镜像.希望快速上手, 对功能要求不复杂的个人或小型内网环境.
apt-mirror2apt-mirror 的现代重写版, 使用 Python/asyncio, 性能功耗, 支持数据完整性检查和 GPG 签名校验, 能保证镜像完整不损坏.追求更好性能和可靠性, 希望避免同步过程中产生损坏镜像的用户.
debmirror功能强大且灵活, 支持按架构, 发行版, 组件进行精细化同步. 支持 HTTP/HTTPS/FTP/rsync 多种传输方式.需要精细控制同步内容, 或者网络环境需要特定协议的场景.
aptly企业级仓库管理工具. 除了镜像, 还支持快照, 合并, 发布等高级功能, 适合需要版本控制和 CI/CD 集成的环境.企业级应用, 需要对仓库进行复杂管理和版本控制的场景.
reprepro轻量级的仓库构建和管理工具, 可以从本地 .deb 文件池构建仓库, 也支持镜像功能, 配置灵活.希望从本地软件包构建仓库, 或者需要进行更细粒度镜像配置的场景.
rsync最基础的同步工具, 直接镜像整个目录, 增量同步效率高.对同步要求内容不高, 仅需简单, 完整地复制整个仓库目录的场景.

这里我们使用 ftpsync 作为同步工具.

  1. 首先我们需要安装 ftpsync 同步镜像源, Web 服务器 (nginx / apache) 确保能够被 HTTP 访问

    apt update
    apt install ftpsync nginx -y
  2. 创建一个专门用于同步镜像的用户, 这是官方推荐的安全做法

    adduser mirror
  3. 创建存储目录并配置权限, 用于存放所有镜像文件

    mkdir path/to/mirrir
    chown mirror:mirror path/to/mirror

2. 配置同步

  1. 创建配置文件

    mkdir /etc/ftpsync
    vim /etc/ftpsync/ftpsync.conf

    填入以下参数

    ########################################################################
    # ftpsync.conf - Debian 13 (trixie) amd64 + arm64 镜像配置
    ########################################################################
    
    # ---- 基础信息 ----
    # 镜像主机名,用于生成 trace 文件
    MIRRORNAME=$(hostname -f)
    
    # 镜像存放的目标目录(必须为空或仅含 pool 数据)
    TO="/srv/mirrors/debian"
    
    # 日志与邮件(日志目录需提前创建)
    LOGDIR="/home/mirror/log"
    MAILTO=""          # 留空则不发送邮件,改为查看日志
    
    # 是否为叶子节点(不向下游推送)
    HUB=false
    
    # ---- 上游连接 ----
    # 选择一个支持 rsync 的上游镜像
    # 国内推荐使用阿里云/腾讯云镜像,但需确认其提供 rsync 服务
    # 这里以官方 ftp.debian.org 为例,实际请替换为你的上游
    RSYNC_HOST="ftp.debian.org"
    RSYNC_PATH="debian"
    
    # ---- 架构过滤 ----
    # 只同步 amd64 和 arm64,source 包含在内以便后续需要
    ARCH_INCLUDE="amd64 arm64 source"
    
    # ---- 发行版过滤 ----
    # 只同步 trixie(Debian 13)及其相关组件
    # DIST_INCLUDE 是 ftpsync 支持的过滤选项
    DIST_INCLUDE="trixie trixie-updates trixie-backports"
    
    # ---- 日志详细程度 ----
    # 开启 FULLLOGS 才能看到 rsync 的详细传输进度
    FULLLOGS=true
    
    # ---- 安全删除限制 ----
    # 防止误删,设置最大删除数量
    MAX_DELETE=1000
    
    # ---- rsync 额外选项 ----
    # --info=progress2 用于显示整体进度(配合 FULLLOGS 使用)
    RSYNC_EXTRA="--info=progress2"
    如果想设置同步多个镜像, 则需要在相同目录下按照 ftpsync-<mirrorName>.conf 创建配置文件
  2. 执行同步命令测试配置

    ftpsync sync:all

    如果执行后没有立即报错, 正常开始同步, 则证明配置文件无误. 此时可以 ^C 然后继续进行后续配置

3. 配置 Web 服务器

  1. 创建 Nginx 配置文件

    vim /etc/nginx/site-avaliable/mirrors

    填入以下内容

    server {
     listen 80;
     listen [::]:80;
    
     server_name <your_domain>;
    
     root path/to/mirror;
    
     autoindex on;
     autoindex_exact_size on;
     autoindex_localtime on;
    
     sendfile on;
     tcp_nopush on;
     tcp_nodelay on;
    
     charset utf-8;
    
     keepalive_timeout 65;
    
     access_log /var/log/nginx/mirrors.access.log;
     error_log /var/log/nginx/mirrors.error.log;
    
     location ~* /(dists|pool)/.*(InRelease|Release|Release.gpg|Packages|Sources)(\.gz|\.xz|\.bz2)?$ {
         expires 1h;
         add_header Cache-Control "public";
     }
    
     location ~ /\. {
         deny all;
         access_log off;
         log_not_found off;
     }
    }

    server_name 服务器名称. 填入您的域名即可
    root 网站根目录. 填写镜像同步目录即可
    如果你的 URL 中包含 debian, 则需要添加以下内容

      location /debian/ {
          alias path/to/mirror;
          autoindex on;
      }
  2. 将配置文件链接到 sites-enabled 目录以启用

    ln -s /etc/nginx/sites-available/mirror-debian /etc/nginx/sites-enabled/
  3. 测试配置

    nginx -t

    如果输出没有报错, 则正常.

  4. 重新加载 Nginx, 使其生效

    systemctl reload nginx
  5. 配置相关权限, 使得 www-data 也对镜像目录有可读可执行权限

    chmod -R a+rX /mnt/Mirror/mirrors/debian

4. 创建定时任务

  1. 安装 crontab, flock

    apt install cron flock
  2. 添加互斥锁目录, 编辑权限和配置文件

    mkdir /var/run/ftpsync
    chown mirror:mirror /var/run/ftpsync
    crontab -u mirror -e

    添加行 0 3 * * * flock -xn /var/run/ftpsync/ftpsync-debian.lock ftpsync sync:all

    含义为每天凌晨三点自动运行同步
    如果想设置为每隔 n 小时同步一次, 则可以添加 0 */n * * * flock -xn /var/run/ftpsync/ftpsync-debian.lock ftpsync sync:all

保存并退出

5. 进行首次同步

  1. 运行 ftpsync sync:all 进行首次同步

    注: 单次全量同步时间较长, 建议使用 screen 等类似工具创建虚拟显示器
  2. 等待同步完成后, 即可在客户机替换软件源

6. 测试

  1. 替换客户机软件源, 使用 apt update && apt upgrade 进行测试.

    root@test:~# apt update && apt upgrade
    Get:1 http://mirrors.vm.homelab/debian-security trixie-security InRelease [43.4 kB]
    Hit:2 http://mirrors.vm.homelab/debian trixie InRelease
    Hit:3 http://mirrors.vm.homelab/debian trixie-updates InRelease
    Fetched 43.4 kB in 0s (134 kB/s)
    All packages are up to date.    
    Summary:                        
      Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 0

    如果没有报错且速度很快, 那就表明没有问题. 如果有条件的话, 还可以在内网 DNS Server 做单独配置, 给予一个内网可用的专有域名. 至此, 镜像源的搭建就结束了.


结语

本人非专业人士, 如有错误请指出! 感谢您的阅读.

手把手自建 Debian 13 镜像源:ftpsync + Nginx 实战
https://blog.nanami.tech/archives/382/
本文作者 Madobi Nanami
发布时间 2026-09-20
许可协议 CC BY-NC-SA 4.0
发表新评论