Просты rpm рэпазітар выкарыстоўваючы Inotify і webdav
У гэтым пасце разгледзім сховішча rpm артэфактаў з дапамогай простага скрыпту з inotify + createrepo. Заліванне артэфактаў ажыццяўляецца праз webdav выкарыстоўваючы apache httpd. Чаму apache httpd будзе напісана бліжэй да канца посту.
Такім чынам, рашэнне павінна адказваць наступным патрабаванням для арганізацыі толькі RPM сховішчы:
бясплатнае
Даступнасць пакета ў рэпазітары праз некалькі секунд пасля загрузкі ў сховішча артэфактаў.
Простае ва ўсталёўцы і абслугоўванні
Магчымасць зрабіць высокую даступнасць (high availability)
Артэфакты ў SonaType Nexus захоўваюцца ў blob. Пры раптоўным выключэнні электрычнасці вы не зможаце аднавіць 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 так і не аднавілі.
Па змаўчанні 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.
Магчымасць зрабіць высокую даступнасць (high availability)
Каб зрабіць высокую даступнасць (high availability) з існага рашэння, думаю можна выкарыстаць 2 сервера, Keepalived для HA і Lsyncd для сінхранізацыі артэфактаў. Lsyncd - Дэман, які сочыць за зменамі ў лакальнай дырэкторыі, агрэгуе іх, і па сканчэнні вызначанага часу стартуе rsync для іх сінхранізацыі. Падрабязнасці і настройка апісана ў пасце "Хуткасная сінхранізацыя мільярда файлаў".
WebDav
Загружаць файлы можна некалькімі шляхамі: SSH, NFS, WebDav. WebDav падаецца сучасным і простым варыянтам.
Для WebDav будзем выкарыстоўваць Apache httpd. Чаму Apache httpd у 2020 годзе, а не nginx?
Жадаецца выкарыстаць аўтаматызаваныя сродкі для зборкі Nginx + модулі (напрыклад, Webdav).
Астатнюю наладу Apache httpd я думаю вы зробіце самі.
Nginx перад Apache httpd
У адрозненне ад Apache, Nginx выкарыстоўвае падзейную мадэль апрацоўкі запытаў, дзякуючы чаму на любую колькасць кліентаў патрабуецца ўсяго адзін працэс HTTP-сервера. Вы можаце выкарыстоўваць nginx і зменшыць нагрузку на сервер.
Канфіг nginx-front.conf. Астатнюю наладу nginx я думаю вы зробіце самі.