自建 Debian 13 镜像源: ftpsync + Nginx

发布于 2026-09-20 12:45 1781 字 9 min read

Madobi Nanami avatar

Madobi Nanami

Nanami 的个人技术博客,记录网络、运维、虚拟化与逆向的实践。

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

前言

在某些企业中, 由于私有服务器有不联公网的要求, 但同时也需要更新相关软件包, 这时就需要自建软件镜像源. 而在某些 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
  1. 创建一个专门用于同步镜像的用户, 这是官方推荐的安全做法
adduser mirror
  1. 创建存储目录并配置权限, 用于存放所有镜像文件
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 创建配置文件

  1. 执行同步命令测试配置
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;
  }
  1. 将配置文件链接到 sites-enabled 目录以启用
ln -s /etc/nginx/sites-available/mirror-debian /etc/nginx/sites-enabled/
  1. 测试配置
nginx -t

如果输出没有报错, 则正常. 4. 重新加载 Nginx, 使其生效

systemctl reload nginx
  1. 配置相关权限, 使得 www-data 也对镜像目录有可读可执行权限
chmod -R a+rX /mnt/Mirror/mirrors/debian

4. 创建定时任务

  1. 安装 crontab, flock
apt install cron flock
  1. 添加互斥锁目录, 编辑权限和配置文件
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 等类似工具创建虚拟显示器

  1. 等待同步完成后, 即可在客户机替换软件源

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 做单独配置, 给予一个内网可用的专有域名. 至此, 镜像源的搭建就结束了.


结语

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


相关阅读

随机文章

加载中...