Depoya rpm ya hêsan bi karanîna Inotify û webdav

Di vê postê de, em ê li depoyek hunerî ya rpm bi karanîna skrîptek hêsan a inotify + createrepo binêrin. Artifact bi riya webdav bi karanîna apache httpd têne barkirin. Çima apache httpd dê li dawiya postê were nivîsandin.

Ji ber vê yekê, çareserî divê ji bo organîzekirina tenê hilanîna RPM hewcedariyên jêrîn bicîh bîne:

  • Belaş

  • Hebûna pakêtê di depoyê de çend saniye piştî barkirina li depoya hunerî.

  • Sazkirin û parastin hêsan e

  • Kapasîteya çêkirina hebûna bilind

    Çima na SonaType Nexus an Pulp:

  • Storage in SonaType Nexus an Pulp gelek cureyên berheman dibe sedema wê yekê ku SonaType Nexus an Pulp bibe yek xala têkçûnê.

  • Hebûna bilind li SonaType Nexus tê dayîn.

  • Pulp Ji min re wekî çareseriyek zêde-endezyarkirî xuya dike.

  • Artifacts in SonaType Nexus di blobê de têne hilanîn. Di bûyera qutbûna elektrîkê ya ji nişka ve, heke piştgiriyek we tune be hûn ê nikaribin blobê sererast bikin. Ev xeletiya me hebû: 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 qet nehate vegerandin.

Koda çavkaniyê

→ Koda çavkanî heye vir

Skrîpta sereke wiha xuya dike:

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

mîhengê

inotify-createrepo tenê li ser CentOS 7 an mezintir dixebite. Nekarî ew li ser CentOS 6 bixebite.

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

Veavakirin

Ji hêla xwerû ve inotify-createrepo pelrêçek çavdêrî dike /var/www/repos/rpm-repo/.

Hûn dikarin vê pelrêça pelê biguherînin /etc/inotify-createrepo.conf.

Bikar bînin

Dema ku pelek li pelrêçek zêde bike /var/www/repos/rpm-repo/ inotifywait dê pelek çêbike /tmp/need_create. Fonksîyona run_createrepo di kelekek bêdawî de dimeşe û pelê dişopîne /tmp/need_create. Ger pel heye, wê hingê bimeşîne createrepo --update.

Têketinek dê di pelê de xuya bibe:

/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

Kapasîteya çêkirina hebûna bilind

Ji bo ku ji çareseriyek heyî peydabûnek bilind çêbike, ez difikirim ku hûn dikarin 2 pêşkêşkeran bikar bînin, Keepalived ji bo HA û Lsyncd ji bo hevdengkirina hunerî. Lsyncd - Daemonek ku guhartinên di pelrêça herêmî de dişopîne, wan berhev dike, û piştî demek diyarkirî, rsync dest bi senkronîzekirina wan dike. Agahdarî û mîhengan di postê de têne diyar kirin "Hevdemkirina bilez a mîlyar pelan".

webdav

Gelek awayên barkirina pelan hene: SSH, NFS, WebDav. WebDav vebijarkek nûjen û hêsan xuya dike.

Ji bo WebDav, em ê Apache httpd bikar bînin. Çima Apache httpd di 2020 de û ne nginx?

Ez dixwazim ji bo avakirina Nginx + modulan amûrên otomatîk bikar bînim (mînak, Webdav).

Ji bo avakirina Nginx + modulan projeyek heye - nginx-çêker. Heke hûn ji bo barkirina pelan nginx + wevdav bikar tînin, wê hingê hûn hewceyê modulek in nginx-dav-ext-module. Dema ku hewl didin ku bi Nginx re ava bikin û bikar bînin nginx-dav-ext-module bi arîkariya nginx-çêker em ê xeletiyekê bibînin Ji hêla http_dav_module ve li şûna nginx-dav-ext-module tê bikar anîn. Heman bug di havînê de hat girtin nginx: [emerg] dîrektîfa nenas dav_methods.

Min daxwaza vekişînê kir Git_url kontrolê lê zêde bike ji bo pêvekirî, vesazkirî --with-{}_module и heke module == "http_dav_module" pêvebike --bi. Lê nehatin qebûlkirin.

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

Ez difikirim ku hûn ê mîhengên mayî yên Apache httpd bixwe bikin.

Nginx li ber Apache httpd

Berevajî Apache, Nginx modelek pêvajoyek daxwaznameya-bingeha bûyerê bikar tîne, ku tê vê wateyê ku tenê pêvajoyek serverek HTTP ji bo her hejmarek xerîdar hewce ye. Hûn dikarin nginx bikar bînin û barkirina serverê kêm bikin.

nginx-front.conf config. Ez difikirim ku hûn ê veavakirina nginx ya mayî bi xwe bikin.

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

Daxistina pelan bi WebDav

Daxistina rpm pir hêsan e.

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

Source: www.habr.com

Add a comment