Inotify සහ webdav භාවිතා කරන සරල rpm ගබඩාව

මෙම සටහනේදී, අපි සරල inotify + createrepo ස්ක්‍රිප්ට් එකක් භාවිතයෙන් rpm කෞතුක භාණ්ඩ ගබඩාවක් දෙස බලමු. කෞතුක භාණ්ඩ apache httpd භාවිතයෙන් webdav හරහා උඩුගත කෙරේ. ඇයි apache httpd පෝස්ට් එකේ අගට ලියන්නේ.

එබැවින්, විසඳුම RPM ගබඩාව පමණක් සංවිධානය කිරීම සඳහා පහත අවශ්‍යතා සපුරාලිය යුතුය:

  • නිදහස්

  • කෞතුක භාණ්ඩ ගබඩාවට උඩුගත කිරීමෙන් තත්පර කිහිපයකට පසු ගබඩාවේ පැකේජය තිබීම.

  • ස්ථාපනය සහ නඩත්තු කිරීම පහසුය

  • ඉහළ ලබා ගැනීමේ හැකියාව

    ඇයි නැත්තේ SonaType Nexus හෝ පල්ප්:

  • තුළ ගබඩා කිරීම SonaType Nexus හෝ පල්ප් බොහෝ වර්ගවල කෞතුක වස්තු එයට හේතු වේ SonaType Nexus හෝ පල්ප් අසාර්ථක වීමේ තනි ලක්ෂයක් බවට පත් වේ.

  • ඉහළ ලබා ගැනීමේ හැකියාව SonaType Nexus ගෙවනු ලැබේ.

  • පල්ප් මට පෙනෙන්නේ ඕනෑවට වඩා ඉංජිනේරුමය විසඳුමක් ලෙසයි.

  • කෞතුක වස්තු 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 ශ්‍රිතය අනන්ත ලූපයක් තුල ක්‍රියාත්මක වන අතර ගොනුව නිරීක්ෂණය කරයි /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 ඒවා සමමුහුර්ත කිරීමට පටන් ගනී. විස්තර සහ සැකසුම් පෝස්ට් එකේ විස්තර කර ඇත "ගොනු බිලියනයක වේගවත් සමමුහුර්තකරණය".

වෙබ්ඩව්

ගොනු උඩුගත කිරීමට ක්රම කිහිපයක් තිබේ: SSH, NFS, WebDav. WebDav නවීන සහ සරල විකල්පයක් බව පෙනේ.

WebDav සඳහා, අපි Apache httpd භාවිතා කරන්නෙමු. 2020 දී Apache httpd සහ nginx නොවන්නේ ඇයි?

මම Nginx + මොඩියුල තැනීම සඳහා ස්වයංක්‍රීය මෙවලම් භාවිතා කිරීමට කැමතියි (උදාහරණයක් ලෙස, Webdav).

Nginx + මොඩියුල ගොඩනැගීම සඳහා ව්‍යාපෘතියක් ඇත - nginx-builder. ඔබ ගොනු උඩුගත කිරීමට nginx + wevdav භාවිතා කරන්නේ නම්, ඔබට මොඩියුලයක් අවශ්‍ය වේ nginx-dav-ext-module. සමඟ Nginx ගොඩනැගීමට සහ භාවිතා කිරීමට උත්සාහ කරන විට nginx-dav-ext-module උදව්වෙන් nginx-builder අපට දෝෂයක් ලැබෙනු ඇත nginx-dav-ext-module වෙනුවට http_dav_module විසින් භාවිතා කරනු ලැබේ. එම දෝෂය ගිම්හානයේදී වසා දමන ලදී nginx: [emerg] නොදන්නා විධාන dav_methods.

මම අදින්න ඉල්ලීමක් කළා කාවැද්දූ, නැවත සකස් කරන ලද --with-{}_module සඳහා git_url පරීක්ෂා කරන්න и මොඩියුලය == "http_dav_module" append --with. නමුත් ඒවා පිළිගත්තේ නැහැ.

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>

Apache httpd වින්‍යාසයේ ඉතිරි කොටස ඔබ විසින්ම සිදු කරනු ඇතැයි මම සිතමි.

Nginx Apache ඉදිරියෙන් httpd

Apache මෙන් නොව, Nginx විසින් සිද්ධි පාදක ඉල්ලීම් සැකසුම් ආකෘතියක් භාවිතා කරයි, එයින් අදහස් වන්නේ ඕනෑම සේවාලාභීන් සංඛ්‍යාවක් සඳහා අවශ්‍ය වන්නේ එක් HTTP සේවාදායක ක්‍රියාවලියක් පමණක් බවයි. ඔබට nginx භාවිතා කර සේවාදායක භාරය අඩු කළ හැකිය.

nginx-front.conf config. ඉතිරි 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/

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න