V tomto příspěvku se podíváme na úložiště artefaktů rpm pomocí jednoduchého skriptu inotify + createrepo. Artefakty se nahrávají přes webdav pomocí apache httpd. Proč apache httpd bude napsáno na konci příspěvku.
Řešení tedy musí splňovat následující požadavky pro organizaci pouze úložiště RPM:
Volný
Dostupnost balíčku v úložišti několik sekund po nahrání do úložiště artefaktů.
Artefakty v SonaType Nexus uloženy v blobu. V případě náhlého výpadku proudu nebudete moci objekt blob obnovit, pokud nemáte zálohu. Měli jsme tuto chybu: 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 nebyl nikdy obnoven.
Ve výchozím nastavení inotify-createrepo monitoruje adresář /var/www/repos/rpm-repo/.
Tento adresář v souboru můžete změnit /etc/inotify-createrepo.conf.
Použití
Při přidávání libovolného souboru do adresáře /var/www/repos/rpm-repo/ inotifywait vytvoří soubor /tmp/need_create. Funkce run_createrepo běží v nekonečné smyčce a monitoruje soubor /tmp/need_create. Pokud soubor existuje, spusťte jej createrepo --update.
Abyste dosáhli vysoké dostupnosti stávajícího řešení, myslím, že můžete použít 2 servery, Keepalived pro HA a Lsyncd pro synchronizaci artefaktů. Lsyncd - démon, který sleduje změny v lokálním adresáři, agreguje je a po určité době je rsync začne synchronizovat. Podrobnosti a nastavení jsou popsány v příspěvku "Rychlá synchronizace miliardy souborů".
WebDav
Existuje několik způsobů, jak nahrát soubory: SSH, NFS, WebDav. WebDav se zdá být moderní a jednoduchá možnost.
Pro WebDav použijeme Apache httpd. Proč Apache httpd v roce 2020 a ne nginx?
Chtěl bych používat automatizované nástroje pro vytváření modulů Nginx + (například Webdav).
Myslím, že zbytek konfigurace Apache httpd uděláte sami.
Nginx před Apache httpd
Na rozdíl od Apache používá Nginx model zpracování požadavků založený na událostech, což znamená, že pro libovolný počet klientů je vyžadován pouze jeden proces HTTP serveru. Můžete použít nginx a snížit zatížení serveru.
Konfigurace nginx-front.conf. Myslím, že zbytek konfigurace nginx uděláte sami.