Senp depo rpm lè l sèvi avèk Inotify ak webdav

Nan pòs sa a, nou pral gade yon depo zam rpm lè l sèvi avèk yon senp script inotify + createrepo. Afèk yo telechaje atravè webdav lè l sèvi avèk apache httpd. Poukisa apache httpd ap ekri nan fen pòs la.

Se konsa, solisyon an dwe satisfè kondisyon sa yo pou òganize sèlman depo RPM:

  • Gratis

  • Disponibilite pakè a nan repozitwa a kèk segonn apre w fin telechaje nan repozitwa artifact la.

  • Fasil pou enstale epi kenbe

  • Kapasite pou fè disponiblite segondè

    Poukisa SonaType Nexus oswa Kaka:

  • Depo nan SonaType Nexus oswa Kaka anpil kalite zafè mennen nan lefèt ke SonaType Nexus oswa Kaka vin yon sèl pwen echèk.

  • Segondè disponiblite nan SonaType Nexus se peye.

  • Kaka Sanble tankou yon solisyon sou-enjenieri pou mwen.

  • Afèk nan SonaType Nexus ki estoke nan blob. Nan ka yon pann kouran toudenkou, ou p ap kapab retabli blob la si ou pa gen yon backup. Nou te gen erè sa a: 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 pa t janm refè.

Kòd Sous

→ Kòd sous la sitiye isit la

Script prensipal la sanble sa a:

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

Enstalasyon

inotify-createrepo travay sèlman sou CentOS 7 oswa pi wo. Pa t 'kapab jwenn li nan travay sou CentOS 6.

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

Konfigirasyon

Pa default inotify-createrepo kontwole yon anyè /var/www/repos/rpm-repo/.

Ou ka chanje anyè sa a nan dosye a /etc/inotify-createrepo.conf.

Sèvi ak

Lè w ajoute nenpòt fichye nan yon anyè /var/www/repos/rpm-repo/ inotifywait pral kreye yon dosye /tmp/need_create. Fonksyon run_createrepo kouri nan yon bouk enfini epi kontwole dosye a /tmp/need_create. Si fichye a egziste, Lè sa a, kouri createrepo --update.

Yon antre ap parèt nan dosye a:

/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

Kapasite pou fè disponiblite segondè

Pou fè gwo disponiblite soti nan yon solisyon ki egziste deja, mwen panse ke ou ka itilize 2 serveurs, Keepalived pou HA ak Lsyncd pou senkronizasyon asosye. Lsyncd - yon demon ki kontwole chanjman ki fèt nan anyè lokal la, ki rasanble yo, epi apre yon sèten tan, rsync kòmanse senkronize yo. Detay ak anviwònman yo dekri nan pòs la "Vit senkronizasyon nan yon milya fichye".

webdav

Gen plizyè fason pou telechaje fichye yo: SSH, NFS, WebDav. WebDav sanble se yon opsyon modèn ak senp.

Pou WebDav, nou pral sèvi ak Apache httpd. Poukisa Apache httpd nan 2020 epi yo pa nginx?

Mwen ta renmen sèvi ak zouti otomatik pou konstwi modil Nginx + (pa egzanp, Webdav).

Gen yon pwojè pou bati Nginx + modil - nginx-builder. Si w itilize nginx + wevdav pou w telechaje fichye, ou bezwen yon modil nginx-dav-ext-modil. Lè w ap eseye bati epi sèvi ak Nginx ak nginx-dav-ext-modil pa vle di nan nginx-builder nou pral jwenn yon erè Itilize pa http_dav_module olye de nginx-dav-ext-module. Ensèk la menm te fèmen nan sezon lete an nginx: [emerg] enkoni direktiv dav_methods.

Mwen te fè yon demann rale Ajoute tcheke git_url pou entegre, refactorize --with-{}_module и if module == "http_dav_module" ajoute --with. Men, yo pa te aksepte.

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

Mwen panse ke ou pral fè rès la nan Apache httpd konfigirasyon an tèt ou.

Nginx devan Apache httpd

Kontrèman ak Apache, Nginx sèvi ak yon modèl pwosesis demann ki baze sou evènman, ki vle di ke se sèlman yon sèl pwosesis sèvè HTTP obligatwa pou nenpòt kantite kliyan. Ou ka itilize nginx epi redwi chaj sèvè.

nginx-front.conf konfigirasyon. Mwen panse ke ou pral fè rès la nan konfigirasyon nginx la tèt ou.

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

Telechaje dosye atravè WebDav

Telechaje rpm trè fasil.

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

Sous: www.habr.com

Add nouvo kòmantè