מאגר Apt/Yum פרטי לחבילות פנימיות

כאשר חבילות פנימיות מופצות ידנית, הגרסאות מתפצלות ועדכונים אובדים. אנו מקימים מאגרי Apt ו-Yum פרטיים במפתח מלא, עם GPG signing, בקרת גישה ופרסום אוטומטי דרך CI/CD. הצוות שלנו מטפל בכל התהליך ומבטיח פעילות יציבה עם תמיכה מתמשכת.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

הקמת מאגר Apt/Yum פרטי לחבילות פנימיות

כאשר לארגון שלך יש חבילות מותאמות אישית—builds מותאמים של nginx עם מודולים, סוכני ניטור פנימיים, ספריות מתוקנות—יש לחלק אותן בין שרתים. העתקה ידנית של .deb/.rpm דרך scp לא מתאימה לקנה מידה: גרסאות מתפצלות, עדכונים מוחמצים, ואין בקרת גרסאות מרכזית. מאגר פרטי פותר את זה: apt install internal-agent או dnf update nginx-custom נותן לכל שרת את הגרסה החתומה העדכנית ביותר.

אנחנו, כמהנדסי DevOps פעילים עם ניסיון של 10+ שנים, מקימים מאגרים כאלה במפתח מלא. המומחים המוסמכים שלנו (Kubernetes, AWS, Linux) מבטיחים יציבות ואבטחה—מחתימת GPG ועד פרסום אוטומטי ב-CI/CD. צרו קשר כדי להעריך את הפרויקט שלכם ביום אחד. במשך 5 שנים פרסנו יותר מ-50 מאגרים ללקוחות בפיננסים ובתקשורת.

למה להשתמש במאגר פרטי?

  • ניהול גרסאות והחזרות: שמרו על היסטוריית גרסאות, חזרו בקלות אם מתעוררות בעיות.
  • אבטחה: חתימת GPG מונעת החלפה; הגישה מוגבלת דרך RBAC.
  • אוטומציה: CI/CD יכול לפרסם חבילות בכל tag, ו-Ansible יכול לעדכן שרתים.
  • מדרגיות: המאגר יכול לרוץ על שרת ייעודי או בענן, ולשרת מאות מכונות.

איך להקים מאגר Apt עם Aptly?

aptly הוא כלי לניהול מאגרי Debian/Ubuntu. הוא יכול לחתום, לצלם snapshots, ולפרסם דרך HTTP. הפריסה אורכת 30 דקות.

apt install aptly gnupg
# Создаём GPG-ключ для подписи репозитория
gpg --batch --gen-key <<EOF
Key-Type: RSA
Key-Length: 4096
Name-Real: Internal Repo
Name-Email: [email protected]
Expire-Date: 0
%no-protection
EOF
gpg --export --armor [email protected] > /etc/apt/trusted.gpg.d/internal-repo.asc
aptly repo create -distribution=jammy -component=main internal
aptly repo add internal /path/to/package_1.0_amd64.deb
aptly publish repo internal filesystem:public:jammy

שירות דרך Nginx:

server {
    listen 80;
    server_name repo.internal.example.com;
    root /var/www/aptly/public;
    autoindex on;
    location / {
        try_files $uri $uri/ =404;
    }
}

בצד הלקוח:

deb [signed-by=/etc/apt/trusted.gpg.d/internal-repo.asc] http://repo.internal.example.com jammy main
apt update && apt install internal-agent

איך להקים מאגר YUM/DNF עם createrepo?

עבור RHEL/CentOS/AlmaLinux, השתמשו ב-apt install aptly gnupg # Создаём GPG-ключ для подписи репозитория gpg --batch --gen-key <<EOF Key-Type: RSA Key-Length: 4096 Name-Real: Internal Repo Name-Email: [email protected] Expire-Date: 0 %no-protection EOF gpg --export --armor [email protected] > /etc/apt/trusted.gpg.d/internal-repo.asc ליצירת מטא-דאטה מהירה:

dnf install createrepo_c gpg
mkdir -p /var/www/repos/el9/x86_64/Packages
cp internal-agent-1.0.x86_64.rpm /var/www/repos/el9/x86_64/Packages/
createrepo_c /var/www/repos/el9/x86_64/
createrepo_c --update /var/www/repos/el9/x86_64/ # при добавлении пакетов

חתימה:

gpg --detach-sign --armor /var/www/repos/el9/x86_64/repodata/repomd.xml 

לקוח: aptly repo create -distribution=jammy -component=main internal aptly repo add internal /path/to/package_1.0_amd64.deb aptly publish repo internal filesystem:public:jammy :

[internal]
name=Internal Repository
baseurl=http://repo.internal.example.com/el9/x86_64/
enabled=1
gpgcheck=1
gpgkey=http://repo.internal.example.com/RPM-GPG-KEY-Internal

מה לגבי Nexus Repository Manager כפתרון אוניברסלי?

אם אתם צריכים מאגר עם ממשק web, בקרת גישה, ותמיכה במספר פורמטים (apt, yum, Maven, npm, Docker), השתמשו ב-Nexus OSS. הריצו ב-Docker:

---
services:
  nexus:
    image: sonatype/nexus3:latest
    ports:
      - "8081:8081"
    volumes:
      - nexus-data:/nexus-data
    environment:
      INSTALL4J_ADD_VM_PARAMS: "-Xms2g -Xmx2g -XX:MaxDirectMemorySize=3g"

העלאת חבילה:

curl -u admin:password --upload-file package_1.0_amd64.deb \
    "http://nexus.internal:8081/repository/apt-internal/"

טבלת השוואת כלים

קריטריון Aptly createrepo Nexus OSS
פורמטים Debian/Ubuntu RHEL/CentOS Apt, Yum, Maven, npm, Docker
ממשק web לא לא כן
בקרת גישה דרך Nginx דרך Nginx RBAC, LDAP, OIDC
תמיכה ב-snapshots כן לא כן
אינטגרציית CI/CD REST API SCP/rsync REST API

עבור שתי הפצות (Ubuntu ו-CentOS), אפשר להריץ Aptly ו-createrepo על אותו שרת. אם אתם צריכים גמישות, Nexus הוא בחירה טובה יותר: הוא חוסך עד 60% מזמן הניהול.

איך להפוך את הפרסום לאוטומטי עם CI/CD?

הזרימה האידיאלית: CI/CD בונה את החבילה, חותם עליה, ומפרסם אותה למאגר. הלקוחות מקבלים עדכונים דרך server { listen 80; server_name repo.internal.example.com; root /var/www/aptly/public; autoindex on; location / { try_files $uri $uri/ =404; } } הסטנדרטי או Ansible.

דוגמה ל-GitLab CI:

---
publish:
  stage: deploy
  script:
    - dpkg-buildpackage -us -uc -b
    - curl -u ${NEXUS_USER}:${NEXUS_PASS} \
        --upload-file ../internal-agent_*.deb \
        "${NEXUS_URL}/repository/apt-internal/"
  only:
    - tags

אנחנו מקימים pipelines כאלה תוך 1–2 ימים. אפשר גם להפעיל playbooks של Ansible לעדכון חבילות בשרתים לאחר הפרסום.

מה כלול

  • בדיקת תשתית ובחירת כלים.
  • פריסת מאגר (Aptly/createrepo/Nexus) עם חתימת GPG.
  • הגדרת Nginx או reverse proxy להפצה.
  • חיבור שרתי יעד למאגר (דרך Ansible).
  • Pipeline של CI/CD לפרסום אוטומטי.
  • תיעוד והדרכת צוות (runbook).
  • תמיכה עם אחריות ל-30 יום.
טעויות נפוצות בהקמת מאגר
  • שכחת הוספת מפתח GPG בלקוחות → שגיאת GPG check failed.
  • אי הפעלת autoindex ב-Nginx לרשימת חבילות.
  • שימוש ב-deb [signed-by=/etc/apt/trusted.gpg.d/internal-repo.asc] http://repo.internal.example.com jammy main apt update && apt install internal-agent — חור אבטחה.
  • אי יצירת snapshots לפני עדכונים → אי אפשרות לחזור לגרסאות קודמות.

לוחות זמנים ואיך להתחיל

שלב משך
מאגר פשוט (Aptly/createrepo) 1–2 ימים
Nexus עם אינטגרציית CI/CD 3–5 ימים
תיעוד והדרכה +יום אחד

התמחור הוא אישי—תלוי במספר ההפצות, השרתים, ומורכבות האוטומציה. נבדוק את הפרויקט שלכם ביום אחד. קבלו ייעוץ על ידי יצירת קשר איתנו.

אבטחה וזמינות

מאגר חבילות פנימי הוא תשתית קריטית: אם הוא נופל, createrepo_c על מאות שרתים נכשל. אנחנו מקימים ניטור זמינות דרך Prometheus blackbox exporter ומראה גיבוי לסבילות לתקלות.

חתימת GPG היא חובה: לקוחות מאמתים את החתימה הדיגיטלית לפני התקנה, ומונעים החלפת חבילות גם אם התעבורה נפגעת. סיבוב מפתחות GPG מתוזמן ואוטומטי דרך Ansible.

צרו קשר—נבדוק את הפרויקט שלכם ביום אחד ונציע את הפתרון הטוב ביותר לתשתית שלכם.