功能概述
本文档提供在 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 / universeupdates / 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、添加错误通知功能(可选)
#创建脚本
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(客户端)