Ubuntu24.04 搭建企业内网私有apt镜像源

功能概述

  本文档提供在 Ubuntu 24.04 服务器上搭建企业内网 APT 镜像源的完整技术方案。通过配置 apt-mirror 工具同步主流 Ubuntu 版本(22.04/24.04 LTS)及 Docker CE 仓库,并利用 Nginx 提供 HTTP 分发服务,为内网环境构建稳定、高速的软件包更新源。

一、准备工作
1、准备环境
服务器:Ubuntu24.04 
IP地址:192.168.21.92
2、系统更新
sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.huaweicloud.com/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources && \
sudo sed -i 's|http://.*security.ubuntu.com|https://mirrors.huaweicloud.com/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources && \
apt update && apt upgrade -y
3、安装所需软件

apt install -y apt-mirror nginx wget
二、配置 apt-mirror
1、编辑 apt-mirror 主配置
sudo cp /etc/apt/mirror.list ~/mirror.list.bak.full
nano /etc/apt/mirror.list
替换为以下 精简 + 企业可用配置
sudo tee /etc/apt/mirror.list << 'EOF'
########### config ###########
set base_path    /var/spool/apt-mirror
set mirror_path  $base_path/mirror
set skel_path    $base_path/skel
set var_path     $base_path/var
set cleanscript  $var_path/clean.sh

set defaultarch amd64
set nthreads 10

# 减肥项 - 减少磁盘占用
set no_contents 1            # 不下载 Contents 文件(节省大量空间)
set skip_sources_on_mirror 1  # 不下载源码包
set use_symlinks 1           # 使用符号链接节省空间
########### end config ###########

############ Ubuntu 24.04 LTS (noble) ############
deb-amd64 https://mirrors.huaweicloud.com/ubuntu noble main restricted universe multiverse
deb-amd64 https://mirrors.huaweicloud.com/ubuntu noble-updates main restricted universe multiverse
deb-amd64 https://mirrors.huaweicloud.com/ubuntu noble-security main restricted universe multiverse
deb-amd64 https://mirrors.huaweicloud.com/ubuntu noble-backports main restricted universe multiverse

############ Ubuntu 22.04 LTS (jammy) ############
deb-amd64 https://mirrors.huaweicloud.com/ubuntu jammy main restricted universe multiverse
deb-amd64 https://mirrors.huaweicloud.com/ubuntu jammy-updates main restricted universe multiverse
deb-amd64 https://mirrors.huaweicloud.com/ubuntu jammy-security main restricted universe multiverse
deb-amd64 https://mirrors.huaweicloud.com/ubuntu jammy-backports main restricted universe multiverse

############ Docker CE (HuaweiCloud) ############
deb-amd64 https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu jammy stable
deb-amd64 https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu noble stable
EOF
2、配置说明
  • 使用 mirrors.huaweicloud.com(国内访问速度快、稳定)
  • 仅同步 amd64 架构,但未生效  设置了仅 amd64但不生效,arm等其它架构仍会被同步,时间更宝贵先不折腾了
  • 不同步源码包(大幅减少磁盘占用)
  • 包含:
    • main / restricted / universe
    • updates / security / backports
    • Docker CE 官方仓库(国内镜像)

三、首次同步(时间可能超过24小时)
1、手动运行同步
apt install apt-mirror && apt-mirror

#同步完成后 clean
/var/spool/apt-mirror/var/clean.sh
同步过程中会看到类似输出:
Downloading XXX archive files using 10 threads...
2、同步完成后执行 clean
/var/spool/apt-mirror/var/clean.sh

3. 磁盘空间说明
  • Ubuntu 22.04 + 24.04 + Docker CE
  • 实际占用约  1.5 TB
  • 强烈建议
    • 将独立大容量磁盘挂载到 /var/spool/apt-mirror
    • 或使用 LVM / RAID

四、Nginx 提供 HTTP 服务(重点)
1、目录结构说明

apt-mirror 默认同步到

/var/spool/apt-mirror/mirror/
将旧的 Centos7 yum源目录合并过来(不再更新)
#Centos7源搭建:https://blog.hx99.net/Tech/1008.html
rsync -avzP --stats root@192.168.21.90:/data/repos_local/centos/7/ /var/www/html/centos/7/
目录结构:
/var/www/html/
├── centos                          # CentOS 7 YUM 源
│   └── 7                           # 包含 base/ updates/ epel/ extras/ 等
├── docker-ce -> /var/spool/apt-mirror/mirror/mirrors.huaweicloud.com/docker-ce  # Docker CE 仓库(Ubuntu)
├── index.html                      # 导航与使用说明
├── last_sync.txt                   # 同步时间戳
├── local.repo                      # CentOS 7 YUM 配置模板
└── ubuntu -> /var/spool/apt-mirror/mirror/mirrors.huaweicloud.com/ubuntu   # Ubuntu APT 源(22.04 jammy/24.04 noble)

/var/spool/apt-mirror/mirror/mirrors.huaweicloud.com/docker-ce/
├── gpg                 # Docker 官方 GPG 公钥
└── linux
    └── ubuntu
        └── dists       # Ubuntu 发行版 APT 仓库元数据(含 jammy/noble 等)
        
/var/spool/apt-mirror/mirror/mirrors.huaweicloud.com/ubuntu
├── dists               # 各 Ubuntu 版本(jammy/noble)的 Release/Packages 索引
│   ├── jammy
│   ├── jammy-backports
│   ├── jammy-security
│   ├── jammy-updates
│   ├── noble
│   ├── noble-backports
│   ├── noble-security
│   └── noble-updates
└── pool                # 实际 .deb 软件包存储池(按组件分类)
    ├── main
    ├── multiverse
    ├── restricted
    └── universe
2、创建软链接到 Nginx 目录
#分别创建软链接
sudo ln -sf /var/spool/apt-mirror/mirror/mirrors.huaweicloud.com/ubuntu /var/www/html/ubuntu
sudo ln -sf /var/spool/apt-mirror/mirror/mirrors.huaweicloud.com/docker-ce /var/www/html/docker-ce

#提前下载好docker-ce的密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /var/www/html/docker-ce/gpg
3、Nginx 配置示例
nano /etc/nginx/sites-available/apt-mirror
server {
    listen 80;
    server_name _;
    root /var/www/html;
    
    # 启用目录浏览(可选)
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    
    # 添加UTF-8编码支持,避免中文乱码
    charset utf-8;
    
    # 访问日志(可选)
    access_log /var/log/nginx/apt-mirror-access.log;
    error_log /var/log/nginx/apt-mirror-error.log;
    
    # 文件缓存设置(提高性能)
    location ~* \.(deb|rpm|gz|bz2|xz|tgz|zip|tar)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
    
    # 默认首页
    index index.html;
    
    location / {
        try_files $uri $uri/ =404;
    }
}
4、启用站点
#删除默认配置,启用新站点
rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/apt-mirror /etc/nginx/sites-enabled/
nginx -t && systemctl restart nginx
5、关于引导页

可创建 /var/www/html/index.html 作为访问入口,方便用户浏览和获取镜像源地址。

#引导页
https://gitee.com/cncsrf/internal-apt-yum/

五、定时同步
1、添加计划任务
#配置 crontab 定时任务
crontab -e

# 每天凌晨2点同步
0 2 * * * /usr/bin/apt-mirror && /var/spool/apt-mirror/var/clean.sh && /bin/date +"\%Y-\%m-\%d \%H:\%M:\%S" > /var/www/html/last_sync.txt
  • 每天凌晨 2 点同步
  • 实际耗时通常 5~15 分钟

  • 2、添加错误通知功能(可选)

    #创建脚本
    sudo tee /usr/local/bin/apt-mirror-sync.sh << 'EOF'
    #!/bin/bash
    # 设置环境变量
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    export LANG=en_US.UTF-8
    
    # 日志记录开始
    echo "=== 同步开始: $(date) ===" >> /var/log/apt-mirror.log
    
    # 执行同步
    echo "$(date): 开始执行 apt-mirror..." >> /var/log/apt-mirror.log
    if /usr/bin/apt-mirror; then
        echo "$(date): APT镜像同步成功" >> /var/log/apt-mirror.log
        
        # 执行清理
        echo "$(date): 开始清理旧包..." >> /var/log/apt-mirror.log
        /var/spool/apt-mirror/var/clean.sh
        
        # 更新时间戳
        echo "$(date): 更新时间戳文件..." >> /var/log/apt-mirror.log
        date +"%Y-%m-%d %H:%M:%S" > /var/www/html/last_sync.txt
        
        echo "$(date): 同步完成" >> /var/log/apt-mirror.log
    else
        echo "$(date): 错误: APT镜像同步失败" >> /var/log/apt-mirror.log
        exit 1
    fi
    
    echo "=== 同步结束: $(date) ===" >> /var/log/apt-mirror.log
    EOF
    
    #给脚本执行权限
    sudo chmod +x /usr/local/bin/apt-mirror-sync.sh
    添加计划任务
    # 添加计划任务
    (crontab -l 2>/dev/null | grep -v "apt-mirror-sync"; echo "0 2 * * * /usr/local/bin/apt-mirror-sync.sh") | crontab -
    
    # 检查计划任务
    crontab -l
    六、注意事项(非常重要)
    • 不要混用 archive.ubuntu.com
    • ❌ 不要同步 i386 / source
    • ✅ 同步完成后一定要 clean.sh
    • ✅ Docker CE 需要额外 GPG Key(客户端)