Repożitorju rpm sempliċi bl-użu ta 'Inotify u webdav

F'din il-kariga se nħarsu lejn il-ħażna tal-artifact rpm billi tuża skript sempliċi b'inotify + createrepo. It-tlugħ ta' artifacts jitwettaq permezz ta' webdav bl-użu ta' apache httpd. Għaliex apache httpd se jinkiteb lejn l-aħħar tal-post.

Għalhekk, is-soluzzjoni għandha tissodisfa r-rekwiżiti li ġejjin għall-organizzazzjoni biss tal-ħażna RPM:

  • Libera

  • Disponibbiltà tal-pakkett fir-repożitorju ftit sekondi wara t-tlugħ fir-repożitorju tal-artifact.

  • Faċli biex tinstalla u żżomm

  • Kapaċità li tagħmel disponibbiltà għolja

    Għaliex le SonaType Nexus jew Polpa:

  • Ħażna fi SonaType Nexus jew Polpa ħafna tipi ta artifacts twassal għall-fatt li SonaType Nexus jew Polpa isir punt wieħed ta’ falliment.

  • Disponibbiltà għolja fi SonaType Nexus titħallas.

  • Polpa Jidhirli soluzzjoni kkumplikata żżejjed.

  • Artifacts fi SonaType Nexus huma maħżuna fi blob. Jekk ikun hemm qtugħ tad-dawl f'daqqa, ma tkunx tista' tirrestawra l-blob jekk ma jkollokx backup. Kellna dan l-iżball: 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. Blob qatt ma ġie rrestawrat.

Kodiċi tas-sors

→ Il-kodiċi tas-sors jinsab hawn

L-iskrittura prinċipali tidher bħal din:

#!/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 &

Installazzjoni

Inotify-createrepo jaħdem biss fuq CentOS 7 jew ogħla. Ma setgħetx taħdem fuq CentOS 6.

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

Konfigurazzjoni

B'mod awtomatiku, inotify-createrepo jimmonitorja d-direttorju /var/www/repos/rpm-repo/.

Tista' tibdel dan id-direttorju fil-fajl /etc/inotify-createrepo.conf.

Użu

Meta żżid xi fajl ma 'direttorju /var/www/repos/rpm-repo/ inotifywait se joħloq il-fajl /tmp/need_create. Il-funzjoni run_createrepo taħdem f'linja bla tarf u timmonitorja l-fajl /tmp/need_create. Jekk il-fajl jeżisti, jibda createrepo --update.

Se tidher entrata fil-fajl:

/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

Kapaċità li tagħmel disponibbiltà għolja

Biex tagħmel disponibbiltà għolja minn soluzzjoni eżistenti, naħseb li tista 'tuża 2 servers, Keepalived għal HA u Lsyncd għas-sinkronizzazzjoni ta' artifacts. Lsyncd - daemon li jimmonitorja l-bidliet f'direttorju lokali, jiġborhom, u wara ċertu żmien rsync jibda jissinkronizzahom. Dettalji u setup huma deskritti fil-post "Sinkronizzazzjoni mgħaġġla ta' biljun fajl".

webdav

Tista 'ttella' fajls b'diversi modi: SSH, NFS, WebDav. WebDav jidher li huwa għażla moderna u sempliċi.

Għal WebDav se nużaw Apache httpd. Għaliex Apache httpd fl-2020 u mhux nginx?

Nixtieq nuża għodod awtomatizzati għall-bini ta 'moduli Nginx + (per eżempju, Webdav).

Hemm proġett biex jinbnew Nginx + moduli - Nginx-bennej. Jekk tuża nginx + wevdav biex ittella' fajls, għandek bżonn modulu nginx-dav-ext-module. Meta tipprova tibni u tuża Nginx ma ' nginx-dav-ext-module permezz ta ' Nginx-bennej se jkollna żball Użat minn http_dav_module minflok nginx-dav-ext-module. L-istess bug ingħalaq fis-sajf nginx: [emerg] direttiva mhux magħrufa dav_methods.

Għamilt talba Pull Żid iċċekkja git_url għal embedded, refactored —with-{}_module и if module == "http_dav_module" append --with. Iżda ma ġewx aċċettati.

Konfigurazzjoni 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>

Naħseb li tista 'tagħmel il-bqija tas-setup Apache httpd lilek innifsek.

Nginx qabel Apache httpd

B'differenza minn Apache, Nginx juża mudell ta 'proċessar ta' rikjesti bbażat fuq avveniment, li jeħtieġ proċess wieħed biss ta 'server HTTP għal kull numru ta' klijenti. Tista 'tuża nginx u tnaqqas it-tagħbija fuq is-server.

Konfigurazzjoni nginx-front.conf. Naħseb li tista 'tagħmel il-bqija tas-setup nginx lilek innifsek.

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;
    }
}

Tlugħ ta' fajls permezz ta' WebDav

It-tagħbija rpm hija sempliċi ħafna.

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

Sors: www.habr.com

Żid kumment