В тази публикация ще разгледаме хранилище за rpm артефакти, използвайки прост скрипт inotify + createrepo. Артефактите се качват чрез webdav с помощта на apache httpd. Защо apache httpd ще бъде написано в края на поста.
Така че решението трябва да отговаря на следните изисквания за организиране само на RPM съхранение:
безплатно
Наличност на пакета в хранилището няколко секунди след качване в хранилището на артефакти.
Целулоза Изглежда ми като прекалено инженерно решение.
Артефакти в 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. 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.
За да направите висока достъпност от съществуващо решение, мисля, че можете да използвате 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 сами.