Inotify болон webdav ашиглан энгийн rpm хадгалах газар

Энэ нийтлэлд бид inotify + createrepo бүхий энгийн скрипт ашиглан rpm олдворын хадгалалтыг үзэх болно. Олдворуудыг apache httpd ашиглан webdav ашиглан байршуулдаг. Яагаад apache httpd гэж нийтлэлийн төгсгөлд бичих болно.

Тиймээс шийдэл нь зөвхөн RPM хадгалалтыг зохион байгуулахад дараахь шаардлагыг хангасан байх ёстой.

  • Үнэгүй

  • Олдворын санд байршуулснаас хойш хэдхэн секундын дараа уг багцыг хадгалах боломжтой.

  • Суурилуулах, засвар үйлчилгээ хийхэд хялбар

  • Өндөр хүртээмжтэй болгох чадвар

    Яагаад үгүй ​​гэж SonaType Nexus буюу Целлюлоз:

  • Хадгалалт дотор SonaType Nexus буюу Целлюлоз олон төрлийн олдворууд үүнд хүргэдэг SonaType Nexus буюу Целлюлоз бүтэлгүйтлийн нэг цэг болно.

  • Өндөр хүртээмжтэй SonaType Nexus төлдөг.

  • Целлюлоз Надад хэтэрхий төвөгтэй шийдэл шиг санагдаж байна.

  • Олдворууд SonaType Nexus blob-д хадгалагддаг. Хэрэв гэнэт цахилгаан тасарвал нөөц байхгүй бол та блобыг сэргээх боломжгүй болно. Бидэнд ийм алдаа гарсан: 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 хэзээ ч сэргээгдээгүй.

Эх код

→ Эх код байрладаг энд

Үндсэн скрипт дараах байдалтай байна.

#!/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 функц нь төгсгөлгүй давталтаар ажиллаж, файлыг хянадаг /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

Өндөр хүртээмжтэй болгох чадвар

Одоо байгаа шийдлээс өндөр хүртээмжтэй болгохын тулд та HA-д зориулсан Keepalived болон олдворуудыг синхрончлохдоо Lsyncd гэсэн 2 сервер ашиглаж болно гэж би бодож байна. Lsyncd - дотоод лавлах дахь өөрчлөлтийг хянаж, нэгтгэж, тодорхой хугацааны дараа rsync тэдгээрийг синхрончилж эхэлдэг демон. Дэлгэрэнгүй мэдээлэл, тохиргоог нийтлэлд тайлбарласан болно "Нэг тэрбум файлыг хурдан синхрончлох".

WebDav

Та SSH, NFS, WebDav гэсэн хэд хэдэн аргаар файлуудыг байршуулж болно. WebDav нь орчин үеийн, энгийн сонголт юм шиг санагддаг.

WebDav-ийн хувьд бид Apache httpd-г ашиглах болно. Яагаад nginx биш 2020 онд Apache httpd вэ?

Би Nginx + модулиудыг (жишээ нь, Webdav) бүтээхэд автоматжуулсан хэрэгслийг ашиглахыг хүсч байна.

Nginx + модулиудыг бүтээх төсөл байна - Nginx бүтээгч. Хэрэв та файл байршуулахдаа nginx + wevdav ашигладаг бол танд модуль хэрэгтэй nginx-dav-ext-модуль. Nginx-г бүтээх, ашиглахыг оролдох үед nginx-dav-ext-модуль тусламжтайгаар Nginx бүтээгч Бид алдаа авах болно Nginx-dav-ext-module-ийн оронд http_dav_module ашигладаг. Зуны улиралд ижил алдааг хаасан nginx: [emerg] үл мэдэгдэх удирдамж dav_methods.

Би татах хүсэлт гаргасан {}_модультай суулгагдсан, дахин засварлагдсан шалгах 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 тохиргооны үлдсэн хэсгийг өөрөө хийж чадна гэж бодож байна.

Apache-ийн өмнөх Nginx httpd

Apache-ээс ялгаатай нь Nginx нь үйл явдалд суурилсан хүсэлт боловсруулах загварыг ашигладаг бөгөөд энэ нь олон тооны үйлчлүүлэгчид зөвхөн нэг HTTP серверийн процесс шаарддаг. Та 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-ээр файл байршуулж байна

Эрг / мин ачаалах нь маш энгийн.

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

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх