- چرا باید مخزن APT سازمانی راهاندازی کنم؟
- چرا ساخت مخزن APT مهم است؟
- مقایسه سریع روشها
- المتطلبات الأساسية
- ساختار پایه مخزن APT
- روش ساده: dpkg-scanpackages
- روش استاندارد و حرفهای: reprepro
- روش مدرن: aptly (پیشنهاد برای تولید)
- نصائح أمنية وأفضل الممارسات
- پیکربندی کلاینت (مثال عملی)
- اتوماسیون و CI/CD
- بهینهسازی عملکرد و مقیاسپذیری
- نکات اختصاصی برای موارد خاص
- جمعبندی و چکلیست راهاندازی
- سرویسهای میزبانی پیشنهادی
- الأسئلة الشائعة
چرا باید مخزن 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
مناسب برای مخازن کوچک و خصوصی. مراحل کلی:
- ساخت دایرکتوری و تنظیم مالک:
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.debreprepro بهصورت خودکار فایلهای 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 aptlyaptly 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 کمک کند.









