Inotify እና webdav በመጠቀም ቀላል rpm ማከማቻ

በዚህ ልጥፍ፣ ቀላል inotify + createrepo ስክሪፕት በመጠቀም የ rpm artifact ማከማቻን እንመለከታለን። ቅርሶች apache httpd በመጠቀም በ webdav በኩል ይሰቀላሉ. ለምን apache httpd ወደ ልጥፉ መጨረሻ ይጻፋል።

ስለዚህ, መፍትሄው የ RPM ማከማቻን ብቻ ለማደራጀት የሚከተሉትን መስፈርቶች ማሟላት አለበት.

  • ፍርይ

  • ወደ አርቲፊክ ማከማቻ ከተሰቀለ ከጥቂት ሰከንዶች በኋላ በማከማቻው ውስጥ ያለው ጥቅል መገኘት።

  • ለመጫን እና ለመጠገን ቀላል

  • ከፍተኛ ተገኝነት የማግኘት ችሎታ

    ለምን አይሆንም SonaType Nexus ወይም Pulp:

  • ውስጥ ማከማቻ SonaType Nexus ወይም Pulp ብዙ ዓይነት ቅርሶች ወደ እውነታው ይመራሉ SonaType Nexus ወይም Pulp አንድ ነጠላ የውድቀት ነጥብ ሆነ።

  • ውስጥ ከፍተኛ ተገኝነት SonaType Nexus የሚከፈል ነው።

  • Pulp ለእኔ ከመጠን በላይ የምህንድስና መፍትሔ ይመስላል።

  • ውስጥ ያሉ ቅርሶች SonaType Nexus በብሎብ ውስጥ ተከማችቷል. ድንገተኛ የኤሌክትሪክ መቆራረጥ በሚከሰትበት ጊዜ, ምትኬ ከሌለዎት ብሉቱን ወደነበረበት መመለስ አይችሉም. ይህ ስህተት አጋጥሞናል፡- ERROR [ForkJoinPool.commonPool-worker-2] *SYSTEM [com.orientechnologies.orient.core.storage](http://com.orientechnologies.orient.core.storage/).fs.OFileClassic - $ANSI{green {db=security}} Error during data read for file 'privilege_5.pcl' 1-th attempt [java.io](http://java.io/).IOException: Bad address. ብሎብ በጭራሽ አልተመለሰም።

ምንጭ ኮድ

→ የምንጭ ኮድ ይገኛል። እዚህ

ዋናው ጽሑፍ ይህን ይመስላል።

#!/bin/bash

source /etc/inotify-createrepo.conf
LOGFILE=/var/log/inotify-createrepo.log

function monitoring() {
    inotifywait -e close_write,delete -msrq --exclude ".repodata|.olddata|repodata" "${REPO}" | while read events 
    do
      echo $events >> $LOGFILE
      touch /tmp/need_create
    done
}

function run_createrepo() {
  while true; do
    if [ -f /tmp/need_create ];
    then
      rm -f /tmp/need_create
      echo "start createrepo $(date --rfc-3339=seconds)"
      /usr/bin/createrepo --update "${REPO}"
      echo "finish createrepo $(date --rfc-3339=seconds)"
    fi
    sleep 1
  done
}

echo "Start filesystem monitoring: Directory is $REPO, monitor logfile is $LOGFILE"
monitoring >> $LOGFILE &
run_createrepo >> $LOGFILE &

ቅንብር

inotify-createrepo የሚሰራው በCentOS 7 ወይም ከዚያ በላይ ነው። በCentOS 6 ላይ እንዲሰራ ማድረግ አልተቻለም።

yum -y install yum-plugin-copr
yum copr enable antonpatsev/inotify-createrepo
yum -y install inotify-createrepo
systemctl start inotify-createrepo

ማዋቀር

በነባሪ inotify-createrepo ማውጫን ይከታተላል /var/www/repos/rpm-repo/.

ይህንን ማውጫ በፋይሉ ውስጥ መለወጥ ይችላሉ። /etc/inotify-createrepo.conf.

ተጠቀም

ማንኛውንም ፋይል ወደ ማውጫ ውስጥ ሲያክሉ /var/www/repos/rpm-repo/ inotifywait ፋይል ይፈጥራል /tmp/need_create. የ run_createrepo ተግባር ማለቂያ በሌለው loop ውስጥ ይሰራል እና ፋይሉን ይከታተላል /tmp/need_create. ፋይሉ ካለ፣ ከዚያ ያሂዱ createrepo --update.

በፋይሉ ውስጥ ግቤት ይታያል፡-

/var/www/repos/rpm-repo/ CREATE nginx-1.16.1-1.el7.ngx.x86_64.rpm
start createrepo 2020-03-02 09:46:21+03:00
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Spawning worker 2 with 0 pkgs
Spawning worker 3 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
finish createrepo 2020-03-02 09:46:22+03:00

ከፍተኛ ተገኝነት የማግኘት ችሎታ

ካለው መፍትሄ ከፍተኛ አቅርቦትን ለማግኘት፣ 2 አገልጋዮችን፣ Keepalived for HA እና Lsyncd ለ artifact synchronization መጠቀም የምትችሉ ይመስለኛል። Lsyncd - በአካባቢ ማውጫ ውስጥ ለውጦችን የሚከታተል ፣ የሚያጠቃልለው እና ከተወሰነ ጊዜ በኋላ rsync እነሱን ማመሳሰል የሚጀምረው ዴሞን ነው። ዝርዝሮች እና ቅንብሮች በጽሁፉ ውስጥ ተገልጸዋል"የአንድ ቢሊዮን ፋይሎች ፈጣን ማመሳሰል".

ዌብ ዳቭ

ፋይሎችን ለመስቀል ብዙ መንገዶች አሉ SSH፣ NFS፣ WebDav። WebDav ዘመናዊ እና ቀላል አማራጭ ይመስላል.

ለWebDav፣ Apache httpd እንጠቀማለን። ለምን Apache httpd በ 2020 እና nginx አይደለም?

Nginx + ሞጁሎችን (ለምሳሌ Webdav) ለመገንባት አውቶሜትድ መሳሪያዎችን መጠቀም እፈልጋለሁ።

Nginx + ሞጁሎችን ለመገንባት ፕሮጀክት አለ - nginx-ገንቢ. ፋይሎችን ለመስቀል nginx + wevdav ከተጠቀሙ ሞጁል ያስፈልገዎታል nginx-dav-ext-module. Nginx ን ለመገንባት እና ለመጠቀም ሲሞክሩ nginx-dav-ext-module በ እገዛ nginx-ገንቢ ስህተት እናገኛለን ከ nginx-dav-ext-module ይልቅ በ http_dav_module ጥቅም ላይ የዋለ. በበጋው ወቅት ተመሳሳይ ስህተት ተዘግቷል nginx: [የወጣ] ያልታወቀ መመሪያ dav_methods.

የመጎተት ጥያቄ አቀረብኩ። ለተከተተ፣ ለተሻሻለ --ጋር-{}_module ቼክ git_url ያክሉ и ሞጁል == "http_dav_module" ከተጨመረ --ጋር. ግን ተቀባይነት አላገኘም።

webdav.conf ያዋቅሩ

DavLockDB /var/www/html/DavLock
<VirtualHost localhost:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog /var/log/httpd/error.log
    CustomLog /var/log/httpd/access.log combined

    Alias /rpm /var/www/repos/rpm-repo
    <Directory /var/www/repos/rpm-repo>
        DAV On
        Options Indexes FollowSymlinks SymLinksifOwnerMatch IncludesNOEXEC
        IndexOptions NameWidth=* DescriptionWidth=*
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

የቀረውን የ Apache httpd ውቅር እራስዎ የሚያደርጉ ይመስለኛል።

Nginx ከ Apache httpd ፊት ለፊት

እንደ Apache ሳይሆን Nginx በክስተት ላይ የተመሰረተ የጥያቄ ማቀናበሪያ ሞዴል ይጠቀማል፣ ይህ ማለት ለማንኛውም ደንበኛ ቁጥር አንድ የኤችቲቲፒ አገልጋይ ሂደት ብቻ ነው የሚያስፈልገው። nginx ን መጠቀም እና የአገልጋይ ጭነት መቀነስ ይችላሉ።

nginx-front.conf ውቅር. የቀረውን የ nginx ውቅር እራስዎ እንደሚያደርጉ አስባለሁ.

upstream nginx_front {
    server localhost:80;
}

server {
    listen 443 ssl;
    server_name ваш-виртуальных-хост;
    access_log /var/log/nginx/nginx-front-access.log main;
    error_log /var/log/nginx/nginx-front.conf-error.log warn;

    location / {
        proxy_pass http://nginx_front;
    }
}

ፋይሎችን በWebDav በማውረድ ላይ

rpm ማውረድ በጣም ቀላል ነው።

curl -T ./nginx-1.16.1-1.el7.ngx.x86_64.rpm https://ваш-виртуальный-хост/rpm/

ምንጭ: hab.com

አስተያየት ያክሉ