Debian 和 Ubuntu 服务器上设置 APT 软件源的完整指南
关于在 Debian 和 Ubuntu 操作系统上设置 APT 软件仓库,以便在组织和公司中分发软件包的教育性和专业性文章。

Debian 和 Ubuntu 服务器上设置 apt 软件包仓库的指南

本文提供了一份完整实用的指南,指导您如何在 Debian 和 Ubuntu 服务器上设置 APT 软件仓库。您将学习到 dpkg-scanpackages、reprepro 和 aptly 等多种方法,并了解优化管理这些软件仓库的安全技巧。.
0 股票
0
0
0
0

我为什么要搭建企业级 APT 存储库?

本实用指南将一步步讲解如何在 Debian/Ubuntu 服务器上设置和管理 APT 软件仓库。它适用于开发人员、系统管理员、DevOps 团队以及需要分发内部软件包 (.deb) 或发布自定义软件包的公司。.

优势: 无需手动上传即可进行内部软件包分发、版本控制和依赖项管理、与 CI/CD(例如 GitLab CI)集成,以及使用 CDN 和边缘节点进行快速分发的能力。.

构建 APT 软件仓库为何如此重要?

APT 仓库允许您集中发布软件包、控制依赖关系并自动执行版本发布。对于拥有全球用户的组织而言,使用 CDN(内容分发网络)可以降低延迟并减轻源服务器的负载。.

对于公共存储库,使用反 DDoS 和 CDN 服务来抵御攻击和高流量。.

方法快速比较

dpkg-scanpackages适用于简单、快速、小型环境。配置简单,但管理功能有限。.

再制造适用于组织机构;支持多分发管理、镜像和导入/导出。.

恰当地:现代化且功能强大;快照、发布到 S3、版本管理和灵活发布。.

先决条件

安装要求:

  • 具有访问权限的 Debian/Ubuntu 服务器 或者 sudo
  • 使用 Web 服务器(Nginx/Apache)提供服务,或使用 S3/CDN。
  • GPG 用于发布签署
  • 安装所需工具(例如 reprepro 或 aptly)

安装基本软件包的示例:

sudo apt update && sudo apt install nginx gnupg2 apt-utils dpkg-dev
# برای reprepro یا aptly:
sudo apt install reprepro
# یا برای aptly (ممکن است پکیج در مخازن رسمی نباشد و نیاز به نصب از بسته‌های پروژه باشد)

APT坦克的基本结构

APT 仓库的一般结构应包含以下分支:

  • 分布/ / /二进制- /软件包(.gz)
  • 水池/ /package.deb
  • 分布/ /发布和 Release.gpg(签名)

文件结构示例:

/var/www/html/apt-repo/
├── dists/
│   └── focal/
│       └── main/
│           └── binary-amd64/
│               └── Packages.gz
└── pool/
    └── main/
        └── your-package_1.0.0_amd64.deb

简单方法:dpkg-scanpackages

适用于小型私人鱼缸。一般步骤:

  1. 创建目录并设置所有者:
sudo mkdir -p /var/www/html/apt-repo/{dists/focal/main/binary-amd64,pool/main}
sudo chown -R $USER:$USER /var/www/html/apt-repo

将软件包复制到池中:

cp mypackage_1.0.0_amd64.deb /var/www/html/apt-repo/pool/main/

创建 Packages 文件并对其进行压缩:

cd /var/www/html/apt-repo
dpkg-scanpackages pool /dev/null | gzip -9c > dists/focal/main/binary-amd64/Packages.gz

手动创建发布文件:

cat > dists/focal/Release <<EOF
Origin: MyRepo
Label: MyRepo
Suite: stable
Codename: focal
Architectures: amd64
Components: main
Description: Internal APT repository
EOF

与 GPG 签署发布协议(推荐):

gpg --default-key "[email protected]" --output dists/focal/Release.gpg --detach-sign --armor dists/focal/Release

使用 signed-by 在客户端添加存储库的示例:

echo "deb [signed-by=/usr/share/keyrings/myrepo.gpg] https://repo.example.com/apt-repo focal main" | sudo tee /etc/apt/sources.list.d/myrepo.list
sudo apt update

标准且专业的方法:reprepro

Reprepro 适用于管理多个发行版和组件,并且能够很好地与组织流程集成。.

安装:

sudo apt install reprepro

创建结构和文件夹:

sudo mkdir -p /var/www/html/repo
cd /var/www/html/repo
sudo mkdir conf db dists pool

示例 conf/distributions 文件:

Origin: MyCompany
Label: MyCompany
Suite: stable
Codename: focal
Architectures: amd64 source
Components: main
Description: MyCompany internal repository
SignWith: <KEYID>

将软件包添加到仓库:

sudo reprepro -b /var/www/html/repo includedeb focal /path/to/mypackage_1.0.0_amd64.deb

如果设置了 SignWith,reprepro 会自动生成 Packages 和 Release 文件并对其进行签名。.

以下是一个简单的 Nginx 配置示例,使用 SSL 来提供存储库服务:

server {
    listen 443 ssl;
    server_name repo.example.com;

    ssl_certificate /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;

    root /var/www/html/repo;
    location / {
        autoindex on;
    }
}

现代方法:恰当地(建议用于生产)

它具备快照、发布到 S3、镜像和高级管理功能,推荐用于生产和企业环境。.

安装和使用简便:

sudo apt install aptly
aptly repo create -distribution=focal -component=main myrepo
aptly repo add myrepo /path/to/*.deb
aptly publish repo -architectures=amd64 myrepo

要发布到 S3/CDN,您可以使用各种合适的后端,将输出放入 S3 存储桶,并使用 CDN/边缘位置进行分发。.

安全提示和最佳实践

HTTPS: 始终使用 TLS 发布存储库,以防止中间人攻击。.

提取并分发公钥:

gpg --export --armor "[email protected]" | sudo tee /usr/share/keyrings/myrepo-archive-keyring.gpg

客户端:

deb [signed-by=/usr/share/keyrings/myrepo-archive-keyring.gpg] https://repo.example.com/ubuntu focal main

访问受限: 对于私有存储库,请使用基本身份验证、客户端证书或 IP 白名单(例如在 Nginx 中)。.

日志记录和监控: 记录并监控下载量、错误和失败尝试次数。.

客户端配置(实际示例)

将密钥文件放置在客户端计算机上,并将存储库添加到客户端计算机:

sudo mkdir -p /usr/share/keyrings
curl -fsSL https://repo.example.com/keys/myrepo.gpg | sudo tee /usr/share/keyrings/myrepo-archive-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/myrepo-archive-keyring.gpg] https://repo.example.com/apt-repo focal main" | sudo tee /etc/apt/sources.list.d/myrepo.list
sudo apt update
sudo apt install mypackage

自动化和持续集成/持续交付

您可以在 GitLab CI 中创建一个作业来构建 .deb 文件并将其推送到存储库,然后使用 reprepro 或 aptly 发布软件包。.

build-package:
  script:
    - dpkg-buildpackage -us -uc
    - scp ../mypackage_*.deb deploy@repo-server:/tmp
    - ssh deploy@repo-server "reprepro -b /var/www/html/repo includedeb focal /tmp/mypackage_*.deb"

为此,您可以使用 API 或 CLI 进行自动发布。.

性能和可扩展性优化

提升表现的关键技巧:

  • CDN 和边缘节点: 将内容分发到最近的边缘节点可以降低延迟并减轻源服务器的压力。我们公司在全球拥有超过 85 个数据中心,并提供 BGP 和 CDN 等多种解决方案,能够实现这一点。.
  • 压缩和缓存: 对 Packages.gz 文件进行 Gzip 压缩,并设置相应的 Cache-Control 标头。.
  • 负载均衡和高可用性: 使用负载均衡器和多区域副本以提高稳定性。.

Nginx 中 Cache-Control 标头的示例:

location /apt-repo/ {
    add_header Cache-Control "public, max-age=3600";
}

针对具体情况的具体建议

对于需要将数据分发到交易服务器(交易 VPS)或游戏服务器的组织,建议使用靠近目标数据中心的位置,以最大限度地减少延迟。.

如果您有 AI 模型或渲染文件等大型软件包,请使用具有高速网络和 CDN 的 GPU 云和计算服务器。.

对于可扩展的全球发布,在边缘使用 S3 和 CDN 可提供最佳性能。.

摘要和启动清单

  • 工具选择:dpkg-scanpackages(简易版)/ reprepro(企业版)/ aptly(高级版)
  • 准备目录结构(dists,pool)
  • 软件包和版本生成
  • 使用 GPG 签名并分发公钥(使用 signed-by 方法)
  • 通过 Nginx/Apache 或 S3+CDN 提供 HTTPS 服务
  • 实施访问限制和监控
  • 利用 CI/CD 实现自动化发布

推荐的托管服务

我们公司可以提供运行 APT 存储库的完整基础设施,包括在高性能云服务器和 BGP 网络上托管、通过 CDN 和 85 多个位置进行全球分发、私有和安全选项(专用服务器、DDoS 防护、TLS 和身份验证),以及对 S3 兼容存储的支持和与 aptly 的集成。.

技术团队可以协助进行位置选择、CDN 设置、Nginx 配置和 CI/CD 实施。.

常见问题解答

您可能也喜欢