I dette innlegget vil vi se på rpm-artefaktlagringen ved å bruke et enkelt skript med inotify + createrepo. Opplasting av artefakter utføres via webdav ved bruk av apache httpd. Hvorfor apache httpd vil bli skrevet mot slutten av innlegget.
Så løsningen må oppfylle følgende krav for å organisere kun RPM-lagring:
Gratis
Tilgjengelighet av pakken i depotet noen sekunder etter opplasting til artefaktlageret.
Pulp Virker for meg som en altfor komplisert løsning.
Artefakter i SonaType Nexus lagres i blob. Hvis det er et plutselig strømbrudd, vil du ikke kunne gjenopprette bloben hvis du ikke har en backup. Vi hadde denne feilen: 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 ble aldri gjenopprettet.
Som standard overvåker inotify-createrepo katalogen /var/www/repos/rpm-repo/.
Du kan endre denne katalogen i filen /etc/inotify-createrepo.conf.
Bruk
Når du legger til en fil i en katalog /var/www/repos/rpm-repo/ inotifywait vil opprette filen /tmp/need_create. Run_createrepo-funksjonen kjører i en endeløs loop og overvåker filen /tmp/need_create. Hvis filen eksisterer, kjører den createrepo --update.
For å gjøre høy tilgjengelighet ut av en eksisterende løsning, tror jeg du kan bruke 2 servere, Keepalved for HA og Lsyncd for å synkronisere artefakter. Lsyncd - en demon som overvåker endringer i en lokal katalog, samler dem, og etter en viss tid begynner rsync å synkronisere dem. Detaljer og oppsett er beskrevet i innlegget "Rask synkronisering av en milliard filer".
WebDav
Du kan laste opp filer på flere måter: SSH, NFS, WebDav. WebDav ser ut til å være et moderne og enkelt alternativ.
For WebDav vil vi bruke Apache httpd. Hvorfor Apache httpd i 2020 og ikke nginx?
Jeg vil gjerne bruke automatiserte verktøy for å bygge Nginx + moduler (for eksempel Webdav).
Jeg tror du kan gjøre resten av Apache httpd-oppsettet selv.
Nginx før Apache httpd
I motsetning til Apache, bruker Nginx en hendelsesbasert forespørselsbehandlingsmodell, som krever bare én HTTP-serverprosess for et hvilket som helst antall klienter. Du kan bruke nginx og redusere belastningen på serveren.
Konfigurer nginx-front.conf. Jeg tror du kan gjøre resten av nginx-oppsettet selv.