Бул постто биз жөнөкөй inotify + createrepo скриптин колдонуу менен rpm артефакт репозиторийсин карайбыз. Артефакттар apache httpd аркылуу webdav аркылуу жүктөлөт. Эмне үчүн apache httpd посттун аягында жазылат.
Ошентип, чечим RPM сактоону уюштуруу үчүн төмөнкү талаптарга жооп бериши керек:
бекер
Артефакт репозиторийине жүктөөдөн кийин бир нече секунддан кийин пакеттин репозиторийде болушу.
орнотуу жана тейлөө үчүн жеңил
Жогорку жеткиликтүүлүктү камсыз кылуу мүмкүнчүлүгү
Эмне үчүн жок же :
Сактоо ичинде же артефакттардын көптөгөн түрлөрүн алып келет же ийгиликсиздиктин бир чекити болуп калат.
Жогорку жеткиликтүүлүк төлөнөт.
Мага ашыкча иштелип чыккан чечим окшойт.
Артефакттар блобдо сакталат. Күтүлбөгөн жерден электр жарыгы өчүп калган учурда, резервдик көчүрмөңүз жок болсо, блобду калыбына келтире албайсыз. Бизде бул ката болду:
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 серверди колдоно аласыз. - жергиликтүү каталогдогу өзгөрүүлөргө көз салган, аларды бириктирүүчү жана белгилүү бир убакыттан кийин rsync аларды синхрондоштурууну баштаган демон. Чоо-жайы жана жөндөөлөрү постто сүрөттөлөт "".
webdav
Файлдарды жүктөөнүн бир нече жолу бар: SSH, NFS, WebDav. WebDav заманбап жана жөнөкөй вариант окшойт.
WebDav үчүн биз Apache httpd колдонобуз. Эмне үчүн nginx эмес, 2020-жылы Apache httpd?
Мен Nginx + модулдарын куруу үчүн автоматташтырылган куралдарды колдонгум келет (мисалы, Webdav).
Nginx + модулдарын куруу долбоору бар - . Файлдарды жүктөө үчүн nginx + wevdav колдонсоңуз, анда сизге модул керек . Nginxти курууга жана колдонууга аракет кылып жатканда жардамы менен биз ката алабыз . Ошол эле мүчүлүштүк жай мезгилинде жабылган .
Мен тартуу өтүнүчү менен кайрылдым и . Бирок алар кабыл алынган жок.
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 конфигурациясы. Калган 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/Source: www.habr.com
