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;
    
    
    # 默认首页
    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(客户端)
七、搭建docker镜像加速
安装 Docker 服务,并部署 KSpeeder 加速器,完整教程参照:https://blog.hx99.net/Tech/3602.html

 

第一步:源安装 Docker 服务
1、配置 APT 使用本地源

sudo tee /etc/apt/sources.list.d/docker.list << ‘EOF’
deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] http://192.168.21.92/docker-ce/linux/ubuntu noble stable
EOF

2.、从本地源下载并导入 GPG 公钥
# 从本地镜像服务器下载 GPG 密钥文件并导入到系统受信密钥环
curl -fsSL http://192.168.21.92/docker-ce/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
3、安装 Docker

# 更新 APT 缓存
sudo apt update

# 安装 Docker 及其相关组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

 

第二步:部署 KSpeeder 服务
1、创建工作目录

sudo mkdir -p /opt/kspeeder && cd /opt/kspeeder

2、创建 Docker Compose 配置文件

sudo tee docker-compose.yml << ‘EOF’
version: ‘3.8’
services:
kspeeder:
image: registry.kspeeder.com/linkease/kspeeder
container_name: kspeeder
restart: unless-stopped
ports:
– “5443:5443” # 对外服务端口
– “5003:5003” # 管理面板端口
volumes:
– ./data:/kspeeder-data # 数据缓存,确保所在磁盘空间充足
– ./config:/kspeeder-config # 配置文件
# network_mode: “host” # 可选,如需使用主机网络可取消注释
EOF

3、启动 KSpeeder

sudo docker compose up -d
sudo docker compose ps # 查看状态

4、客户端使用

sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
“registry-mirrors”: [“https://192.168.21.92:5443”],
“insecure-registries”: [“192.168.21.92:5443”]
}
EOF

5、Docker 镜像极速配置脚本

https://gitee.com/cncsrf/internal-apt-yum/blob/master/docker.sh