DebianおよびUbuntuサーバーにAPTリポジトリを設定するための完全ガイド
مقالات آموزشی و تخصصی درباره راه‌اندازی مخزن APT در سیستم‌عامل‌های دبیان و اوبونتو برای توزیع بسته‌های نرم‌افزاری در سازمان‌ها و شرکت‌ها

DebianおよびUbuntuサーバーでaptパッケージリポジトリを設定するためのガイド

この記事では、DebianおよびUbuntuサーバー上でAPTリポジトリを設定するための、包括的かつ実践的なガイドを提供します。dpkg-scanpackages、reprepro、aptlyといった様々な方法に加え、これらのリポジトリを最適に管理するための安全対策についても解説します。.
0 株式
0
0
0
0

چرا باید مخزن APT سازمانی راه‌اندازی کنم؟

در این راهنما عملی و تخصصی، قدم‌به‌قدم توضیح می‌دهیم چگونه یک مخزن (Repository) APT روی سرور Debian/Ubuntu راه‌اندازی و مدیریت کنید. این مطلب مناسب توسعه‌دهندگان، مدیران سیستم، تیم‌های DevOps و شرکت‌هاست که نیاز به توزیع بسته‌های داخلی (.deb) یا انتشار بسته‌های سفارشی دارند.

利点: توزیع داخلی بسته‌ها بدون آپلود دستی، کنترل نسخه و وابستگی‌ها، ادغام با CI/CD (مثلاً GitLab CI)، و امکان استفاده از CDN و edge locations برای توزیع سریع.

چرا ساخت مخزن APT مهم است؟

یک مخزن APT به شما اجازه می‌دهد بسته‌ها را به‌صورت متمرکز منتشر کنید، وابستگی‌ها را کنترل کنید و انتشار نسخه‌ها را خودکار نمایید. برای سازمان‌هایی با کاربران جهانی، استفاده از CDN و شبکه توزیع محتوا باعث کاهش latency و بار روی origin می‌شود.

برای مخزن‌های عمومی از سرویس Anti-DDoS و CDN استفاده کنید تا در برابر حملات و ترافیک بالا مقاوم بمانید.

مقایسه سریع روش‌ها

dpkg-scanpackages: مناسب محیط‌های ساده، سریع و کم‌حجم. پیکربندی ساده اما مدیریت محدودی دارد.

reprepro: مناسب سازمان‌ها؛ مدیریت چند distribution، پشتیبانی از mirror و import/export.

aptly: مدرن و قدرتمند؛ snapshot، نشر به S3، مدیریت نسخه‌ها و انتشار انعطاف‌پذیر.

前提条件

موارد مورد نیاز برای راه‌اندازی:

  • سرور Debian/Ubuntu با دسترسی または 須藤
  • وب‌سرور برای سرو (Nginx/Apache) یا استفاده از S3/CDN
  • GPG برای امضای Release
  • نصب ابزارهای موردنیاز (مثلاً reprepro یا aptly)

مثال نصب بسته‌های پایه:

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

ساختار پایه مخزن APT

ساختار کلی یک مخزن APT باید شامل شاخه‌های زیر باشد:

  • dists/<distribution>/<component>/binary-<arch>/Packages(.gz)
  • pool/<component>/package.deb
  • dists/<distribution>/Release و 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

کپی بسته به pool:

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

ساخت دستی فایل Release:

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

امضای Release با 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 مناسب مدیریت چند distribution و کامپوننت است و به‌خوبی با فرایندهای سازمانی هماهنگ می‌شود.

نصب:

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>

اضافه کردن بسته به repo:

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

reprepro به‌صورت خودکار فایل‌های Packages و Release را تولید و در صورت تنظیم SignWith امضا می‌کند.

نمونه پیکربندی ساده 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;
    }
}

روش مدرن: aptly (پیشنهاد برای تولید)

aptly امکانات snapshot، publish به S3، mirror و مدیریت پیشرفته را دارد و برای محیط‌های تولیدی و سازمانی توصیه می‌شود.

نصب و استفاده ساده:

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 می‌توانید از backendهای مختلف aptly استفاده کنید و خروجی را در یک bucket S3 قرار داده و از CDN/edge locations برای توزیع استفاده کنید.

セキュリティのヒントとベストプラクティス

HTTPS: همیشه مخزن را با TLS منتشر کنید تا حمله MiTM جلوگیری شود.

استخراج کلید عمومی و توزیع آن:

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

دسترسی محدود: برای مخازن خصوصی از Basic Auth، client-cert، یا IP whitelisting (مثلاً در 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

اتوماسیون و CI/CD

می‌توانید در GitLab CI یک job برای ساخت .deb و push به repo داشته باشید و پس از آن بسته را با 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"

برای aptly می‌توانید از API یا CLI برای publish خودکار استفاده کنید.

بهینه‌سازی عملکرد و مقیاس‌پذیری

نکات کلیدی برای عملکرد بهتر:

  • CDN و edge locations: توزیع محتوا به نزدیک‌ترین edge باعث کاهش latency و فشار روی origin می‌شود. شرکت ما با بیش از ۸۵ لوکیشن جهانی و گزینه‌های BGP و CDN این امکان را فراهم می‌کند.
  • فشرده‌سازی و کش: فایل‌های Packages.gz را gzip کنید و هدرهای Cache-Control مناسب تنظیم کنید.
  • Load balancing و HA: استفاده از load balancer و multi-region replicas برای پایداری بالاتر.

مثال هدر Cache-Control در Nginx:

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

نکات اختصاصی برای موارد خاص

برای سازمان‌هایی که نیاز به توزیع به سرورهای معاملاتی (VPS مخصوص ترید) یا سرورهای گیمینگ دارند، پیشنهاد می‌شود از لوکیشن‌های نزدیک به دیتاسنترهای مقصد استفاده کنید تا latency حداقل شود.

اگر بسته‌های حجیم مانند مدل‌های AI یا فایل‌های رندر دارید، از GPU Cloud و سرورهای محاسباتی با شبکه‌ی پرسرعت و CDN استفاده کنید.

برای نشر جهانی مقیاس‌پذیر، استفاده از S3 و CDN در لبه‌ها بهترین عملکرد را فراهم می‌کند.

جمع‌بندی و چک‌لیست راه‌اندازی

  • انتخاب ابزار: dpkg-scanpackages (ساده) / reprepro (سازمانی) / aptly (پیشرفته)
  • آماده‌سازی ساختار دایرکتوری (dists, pool)
  • تولید Packages و Release
  • امضا با GPG و توزیع کلید عمومی (با روش signed-by)
  • سرو از طریق HTTPS با Nginx/Apache یا S3+CDN
  • اعمال محدودیت‌های دسترسی و مانیتورینگ
  • اتوماسیون با CI/CD برای انتشار خودکار

سرویس‌های میزبانی پیشنهادی

شرکت ما می‌تواند زیرساخت کامل راه‌اندازی مخزن APT را فراهم کند، شامل میزبانی روی سرور ابری با عملکرد بالا و شبکه BGP، انتشار جهانی با CDN و ۸۵+ لوکیشن، گزینه‌های خصوصی و ایمن (سرور اختصاصی، Anti-DDoS، TLS و احراز هویت)، و پشتیبانی از S3-compatible storage و integration با aptly.

تیم فنی می‌تواند در انتخاب لوکیشن، تنظیم CDN، پیکربندی Nginx و پیاده‌سازی CI/CD کمک کند.

よくある質問

あなたも気に入るかもしれない