{"id":32217,"date":"2019-10-31T21:45:43","date_gmt":"2019-10-31T18:45:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/net-core-na-linux-devops-na-kone\/"},"modified":"2019-10-31T21:45:43","modified_gmt":"2019-10-31T18:45:43","slug":"net-core-na-linux-devops-na-kone","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/net-core-na-linux-devops-na-kone","title":{"rendered":".NET Core Linux alatt, DevOps a cs\u00facson","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>A DevOps-t a lehet\u0151s\u00e9geinkhez m\u00e9rten fejlesztett\u00fck. Nyolcan voltunk, \u00e9s Vanya volt a legjobb Windows szak\u00e9rt\u0151. Hirtelen Vanya t\u00e1vozott, \u00e9s nekem kellett egy \u00faj projektet beind\u00edtanom, ami Windows fejleszt\u00e9ssel foglalkozik. Amikor az \u00f6sszes Windows fejleszt\u00e9si eszk\u00f6zt az asztalra ter\u00edtettem, r\u00e1j\u00f6ttem, hogy a helyzet f\u00e1jdalmas...<\/p>\n<p>\u00cdgy kezd\u0151dik a t\u00f6rt\u00e9net <b>Alexander Sinchinov<\/b> Gyorsan eml\u00e9kezz\u00fcnk vissza, hogyan m\u0171k\u00f6dik a modul\u00e1ris aritmetika. Az \u00f3ra m\u00e1r egy ismert koncepci\u00f3. Az \u00f3r\u00e1k haszn\u00e1lata <noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/\">DevOpsConf<\/a><\/noindex>. Amikor a c\u00e9g \u00e9l\u0151 Windows szak\u00e9rt\u0151je t\u00e1vozott, Alexander elkezdte keresni a megold\u00e1st, hogy mit tegyen most. A v\u00e1lasza: term\u00e9szetesen \u00e1tt\u00e9rni Linuxra! Alexander elmes\u00e9li, hogyan siker\u00fclt p\u00e9ld\u00e1t \u00e1ll\u00edtania \u00e9s \u00e1t\u00e1ll\u00edtania a Windows fejleszt\u00e9s egy r\u00e9sz\u00e9t Linuxra, egy 100 000 v\u00e9gfelhaszn\u00e1l\u00f3s projekt p\u00e9ld\u00e1j\u00e1n.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/3c944351864df95217e133236542c9b1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHogyan lehet k\u00f6nnyed\u00e9n \u00e9s probl\u00e9mamentesen k\u00e9zbes\u00edteni egy projektet RPM-be, a TFS, Puppet \u00e9s Linux .NET Core haszn\u00e1lat\u00e1val? Hogyan t\u00e1mogassuk a projekt adatb\u00e1zis\u00e1nak verzi\u00f3kezel\u00e9s\u00e9t, ha a fejleszt\u0151k el\u0151sz\u00f6r hallanak a Postgres \u00e9s a Flyway szavakr\u00f3l, m\u00edg a hat\u00e1rid\u0151 holnapra esed\u00e9kes? Hogyan integr\u00e1ljuk a Dockert? Hogyan motiv\u00e1ljuk a .NET fejleszt\u0151ket arra, hogy mondjanak le a Windowsr\u00f3l \u00e9s a smoothie-r\u00f3l a Puppet \u00e9s Linux jav\u00e1ra? Hogyan kezelj\u00fck az ideol\u00f3giai konfliktusokat, ha a Windows kezel\u00e9s\u00e9re nincs energia, v\u00e1gy vagy forr\u00e1s? Err\u0151l, valamint a Web Deploy-r\u00f3l, a tesztel\u00e9sr\u0151l, a CI-r\u0151l, a TFS gyakorlati haszn\u00e1lat\u00e1r\u00f3l a megl\u00e9v\u0151 projektekben, \u00e9s term\u00e9szetesen a t\u00f6r\u00f6tt t\u00e1maszokr\u00f3l \u00e9s m\u0171k\u00f6d\u0151 megold\u00e1sokr\u00f3l is Alexander el\u0151ad\u00e1s\u00e1nak egy\u00e9rtelm\u0171s\u00edt\u00e9se sor\u00e1n.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"tZH9Ro9j9KQ\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/tZH9Ro9j9KQ\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nTeh\u00e1t Vanya t\u00e1vozott, a feladat az \u00e9n nyakamban, a fejleszt\u0151k m\u00e1r v\u00e1rj\u00e1k a vill\u00e1ikkal. Amikor v\u00e9gleg r\u00e1j\u00f6ttem, hogy Vany\u00e1t nem tudom visszaszerezni, nekil\u00e1ttam a munk\u00e1nak. El\u0151sz\u00f6r is felm\u00e9rtem a Windows virtu\u00e1lis g\u00e9pek ar\u00e1ny\u00e1t a parkunkban. Az eredm\u00e9ny nem a Windows jav\u00e1ra sz\u00f3lt.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/836e47372126b6ba369ac494b91c7d3c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMivel akt\u00edvan fejlesztett\u00fck a DevOps-ot, r\u00e1j\u00f6ttem, hogy valamit v\u00e1ltoztatni kell az \u00faj alkalmaz\u00e1s kihelyez\u00e9s\u00e9nek megk\u00f6zel\u00edt\u00e9s\u00e9ben. Az egyetlen megold\u00e1s az volt \u2013 amennyire csak lehet, mindent \u00e1t kell \u00e1ll\u00edtani Linuxra. A Google seg\u00edtett \u2013 addigra m\u00e1r portolt\u00e1k a .Net-et Linuxra, \u00e9s r\u00e1j\u00f6ttem, hogy ez a megold\u00e1s!<\/p>\n<h2>Mi\u00e9rt a .NET Core Linux-szal?<\/h2>\n<p>\nT\u00f6bb oka volt ennek. A legt\u00f6bben a 'p\u00e9nzt adni' \u00e9s a 'nem p\u00e9nzt adni' opci\u00f3n\u00e1l az ut\u00f3bbit v\u00e1lasztj\u00e1k \u2013 ahogyan \u00e9n is. A MSDB licenc k\u00f6r\u00fclbel\u00fcl 1 000 $-ba ker\u00fcl, \u00e9s a Windows virtu\u00e1lis g\u00e9pek fenntart\u00e1sa t\u00f6bb sz\u00e1z doll\u00e1rra r\u00fag. Egy nagy c\u00e9g sz\u00e1m\u00e1ra ezek \u00f3ri\u00e1si kiad\u00e1sok. \u00cdgy <b>megtakar\u00edt\u00e1s\u00a0<\/b>\u2014<b> az els\u0151 ok<\/b>. Nem a legfontosabb, de jelent\u0151s.<\/p>\n<p>A Windows virtu\u00e1lis g\u00e9pek t\u00f6bb er\u0151forr\u00e1st ig\u00e9nyelnek, mint Linux testv\u00e9reik \u2013 <b>neh\u00e9zkesek.<\/b>. Figyelembe v\u00e9ve a nagyv\u00e1llalat m\u00e9ret\u00e9t, Linuxot v\u00e1lasztottunk.<\/p>\n<p><b>A rendszer egyszer\u0171en integr\u00e1l\u00f3dik a megl\u00e9v\u0151 CI-ba.<\/b>. Magunkat progressz\u00edv DevOps-nak tartjuk, Bamboo, Jenkins \u00e9s GitLab CI-t haszn\u00e1lunk, \u00edgy a legt\u00f6bb dolog Linuxon fut.<\/p>\n<p>Az utols\u00f3 ok \u2014 <b>k\u00e9nyelmes karbantart\u00e1s. <\/b>Cs\u00f6kkenten\u00fcnk kellett a bel\u00e9p\u00e9si k\u00fcsz\u00f6b\u00f6t a \"karbantart\u00f3k\" sz\u00e1m\u00e1ra - olyan fiatalok, akik \u00e9rtik a technikai r\u00e9szt, biztos\u00edtj\u00e1k a z\u00f6kken\u0151mentess\u00e9get \u00e9s a m\u00e1sodik vonalbeli szolg\u00e1ltat\u00e1sokat \u00fczemeltetik. M\u00e1r ismerik a Linux stacket, \u00edgy sokkal k\u00f6nnyebben meg\u00e9rtik az \u00faj term\u00e9ket, t\u00e1mogatj\u00e1k \u00e9s karbantartj\u00e1k, mint hogy plusz forr\u00e1st kellene ford\u00edtani a Windows platformokra hasonl\u00f3 funkcionalit\u00e1s meg\u00e9rt\u00e9s\u00e9re.<\/p>\n<h2>K\u00f6vetelm\u00e9nyek<\/h2>\n<p>\nEls\u0151dleges \u00e9s legfontosabb \u2014 <b>az \u00faj megold\u00e1s k\u00e9nyelme a fejleszt\u0151k sz\u00e1m\u00e1ra<\/b>. Nem mind volt felk\u00e9sz\u00fclve a v\u00e1ltoz\u00e1sokra, k\u00fcl\u00f6n\u00f6sen a Linux sz\u00f3 ut\u00e1n. A fejleszt\u0151k a kedvenc Visual Studio-jukat, a TFS-t az automatikus tesztekkel \u00e9s a smoothieval akarj\u00e1k. Hogy hogyan zajlik a termel\u00e9sbe val\u00f3 \u00e1tad\u00e1s \u2014 az nem \u00e9rdekli \u0151ket. Ez\u00e9rt \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy nem v\u00e1ltoztatjuk meg a megszokott folyamatot, \u00e9s mindent v\u00e1ltozatlanul hagyunk a Windows fejleszt\u00e9shez. <\/p>\n<p>Az \u00faj projektet <b>be kell \u00e9p\u00edteni a megl\u00e9v\u0151 CI-ba.<\/b>. A s\u00ednek m\u00e1r k\u00e9szen \u00e1lltak, \u00e9s az eg\u00e9sz munk\u00e1t a konfigur\u00e1ci\u00f3s menedzsment rendszer, a fogadott sz\u00e1ll\u00edt\u00e1si szabv\u00e1nyok \u00e9s a monitoroz\u00f3 rendszerek param\u00e9tereivel kellett elv\u00e9gezni.<\/p>\n<p><b>A t\u00e1mogat\u00e1s \u00e9s karbantart\u00e1s egyszer\u0171s\u00e9ge<\/b>, mint a k\u00fcl\u00f6nb\u00f6z\u0151 oszt\u00e1lyok \u00e9s a karbantart\u00f3 r\u00e9szleg \u00faj r\u00e9sztvev\u0151i sz\u00e1m\u00e1ra a minim\u00e1lis bel\u00e9p\u00e9si k\u00fcsz\u00f6b felt\u00e9tele.<\/p>\n<p><b>A hat\u00e1rid\u0151 \u2014 tegnap<\/b>.<\/p>\n<h2>A Windows fejleszt\u0151i csoport<\/h2>\n<p>\nMivel dolgozott a Windows csapat?<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/6e6e128ef3d49410c260d05114f819a4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMost biztosan mondhatom, hogy <b>IdentityServer4<\/b>\u00a0\u2014 egy nagyszer\u0171 ingyenes alternat\u00edva az ADFS-hez hasonl\u00f3 lehet\u0151s\u00e9gekkel, vagy hogy <b>Entity Framework Core<\/b>\u00a0\u2014 a fejleszt\u0151k mennyorsz\u00e1ga, ahol nem kell agg\u00f3dni SQL szkriptek \u00edr\u00e1sa miatt, hanem a lek\u00e9rdez\u00e9seket OOP kifejez\u00e9sekben lehet le\u00edrni az adatb\u00e1zisban. De akkor, amikor a cselekv\u00e9si tervet vitattuk, \u00fagy n\u00e9ztem erre a stack-re, mint egy sum\u00e9r \u00e9k\u00edr\u00e1sra, csak a PostgreSQL-t \u00e9s a Git-et ismerve.<\/p>\n<p>Akkoriban akt\u00edvan haszn\u00e1ltuk <b>Puppet<\/b> mint konfigur\u00e1ci\u00f3s menedzsment rendszert. A projektjeink t\u00f6bbs\u00e9g\u00e9ben haszn\u00e1ltuk <b>GitLab CI<\/b>, <b>Elastic<\/b>, nagy terhel\u00e9ssel b\u00edr\u00f3 szolg\u00e1ltat\u00e1sokat egyens\u00falyoztunk a <b>HAProxy,<\/b> mindezt figyelt\u00fck a <b>Zabbix<\/b>, a kombin\u00e1ci\u00f3n kereszt\u00fcl, <b>Grafan\u00e1ba<\/b> \u00e9s\u00a0<b>Prometheus<\/b>, <b>Jaeger<\/b>, \u00e9s mindez a\u00a0<b>HP<\/b> c\u00a0<b>ESXi<\/b> Gyorsan eml\u00e9kezz\u00fcnk vissza, hogyan m\u0171k\u00f6dik a modul\u00e1ris aritmetika. Az \u00f3ra m\u00e1r egy ismert koncepci\u00f3. Az \u00f3r\u00e1k haszn\u00e1lata\u00a0<b>VMware.<\/b>Mindenki ismeri \u2014 a m\u0171faj klasszikus\u00e1t.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/f4ffcac7a7fbb4fa48d47f07bed52610.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e9zz\u00fck meg, \u00e9s pr\u00f3b\u00e1ljuk meg\u00e9rteni, mi t\u00f6rt\u00e9nt miel\u0151tt belekezdt\u00fcnk ebbe a beavatkoz\u00e1s sorozatba.<\/p>\n<h2>Mi volt<\/h2>\n<p>\nA TFS egy meglehet\u0151sen er\u0151s rendszer, amely nemcsak a k\u00f3dot juttatja el a fejleszt\u0151t\u0151l a v\u00e9gs\u0151 produkci\u00f3s g\u00e9pig, hanem egy nagyon rugalmas integr\u00e1ci\u00f3s keretet is k\u00edn\u00e1l k\u00fcl\u00f6nb\u00f6z\u0151 szolg\u00e1ltat\u00e1sokkal - a CI biztos\u00edt\u00e1sa \u00e9rdek\u00e9ben t\u00f6bbplatformos szinten.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/ea448b38e321a8350468d69f3e45e429.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKor\u00e1bban csupa ablak volt. A TFS t\u00f6bb Build-\u00fcgyn\u00f6k\u00f6t haszn\u00e1lt, amelyeken sok projekt gy\u0171lt \u00f6ssze. Minden \u00fcgyn\u00f6kben 3-4 munk\u00e1s, hogy p\u00e1rhuzamos\u00edtsa a feladatokat \u00e9s optimaliz\u00e1lja a folyamatot. Ezut\u00e1n a kiad\u00e1si tervek szerint a TFS frissen k\u00e9sz\u00fclt Buildet sz\u00e1ll\u00edtott egy Windows alkalmaz\u00e1sszerverre.<\/p>\n<h2>Hova akartunk eljutni<\/h2>\n<p>\nA TFS-t haszn\u00e1ljuk a sz\u00e1ll\u00edt\u00e1shoz \u00e9s fejleszt\u00e9shez, az alkalmaz\u00e1st pedig Linux alkalmaz\u00e1sszerveren ind\u00edtjuk el, k\u00f6z\u00f6tt\u00fck meg valami var\u00e1zslat. Ez a <b>var\u00e1zsdoboz<\/b> \u00e9s ez a munka kulcsa. Miel\u0151tt megfejten\u00e9nk, egy l\u00e9p\u00e9st h\u00e1tral\u00e9pek, \u00e9s mondok p\u00e1r sz\u00f3t az alkalmaz\u00e1sr\u00f3l.<\/p>\n<h2>Projekt<\/h2>\n<p>\nAz alkalmaz\u00e1s funkci\u00f3t biztos\u00edt el\u0151re fizetett k\u00e1rty\u00e1k kezel\u00e9s\u00e9re. <\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/c93aa67b340c45ad279330466fc4f776.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>\u00dcgyf\u00e9l<\/h3>\n<p>\nK\u00e9tf\u00e9le felhaszn\u00e1l\u00f3 l\u00e9tezett. <b>Az els\u0151<\/b> hozz\u00e1f\u00e9r\u00e9st kapott, SSL SHA-2 tan\u00fas\u00edtv\u00e1nyon kereszt\u00fcl hiteles\u00edtve. A\u00a0<b>m\u00e1sodik<\/b> felhaszn\u00e1l\u00f3n\u00e9vvel \u00e9s jelsz\u00f3val l\u00e9pett be.<\/p>\n<h3>HAProxy<\/h3>\n<p>\nEzut\u00e1n az \u00fcgyf\u00e9lk\u00e9r\u00e9s a HAProxy-ba ker\u00fclt, amely az al\u00e1bbi feladatokat oldotta meg:<\/p>\n<ul>\n<li>els\u0151dleges hiteles\u00edt\u00e9s;\n<\/li>\n<li>SSL lez\u00e1r\u00e1s;\n<\/li>\n<li>HTTP k\u00e9r\u00e9sek optimaliz\u00e1l\u00e1sa;\n<\/li>\n<li>k\u00e9r\u00e9sek tov\u00e1bb\u00edt\u00e1sa.\n<\/li>\n<\/ul>\n<p>\nA kliens tan\u00fas\u00edtv\u00e1ny\u00e1nak ellen\u0151rz\u00e9se l\u00e1ncon kereszt\u00fcl zajlott. Mi vagyunk a <b>hat\u00f3s\u00e1g <\/b>\u00e9s ezt megengedhetj\u00fck magunknak, mivel magunk adjuk ki a tan\u00fas\u00edtv\u00e1nyokat a szolg\u00e1ltat\u00e1s \u00fcgyfeleinek.<\/p>\n<p>Figyeljen a harmadik pontra, kicsit k\u00e9s\u0151bb visszat\u00e9r\u00fcnk r\u00e1.<\/p>\n<h3>Backend<\/h3>\n<p>\nA backend Linuxra volt tervezve. A backend interakci\u00f3ba l\u00e9p az adatb\u00e1zissal, bet\u00f6lti a sz\u00fcks\u00e9ges jogosults\u00e1gliszt\u00e1t, majd att\u00f3l f\u00fcgg\u0151en, hogy milyen jogosults\u00e1gokkal rendelkezik a hiteles\u00edtett felhaszn\u00e1l\u00f3, hozz\u00e1f\u00e9r\u00e9st biztos\u00edt p\u00e9nz\u00fcgyi dokumentumok al\u00e1\u00edr\u00e1s\u00e1hoz \u00e9s azok v\u00e9grehajt\u00e1sra k\u00fcld\u00e9s\u00e9hez, vagy valamilyen jelent\u00e9s gener\u00e1l\u00e1s\u00e1hoz.<\/p>\n<h2>Megtakar\u00edt\u00e1s a HAProxy-val<\/h2>\n<p>\nA k\u00e9t kontextus mellett, amelyeken minden \u00fcgyf\u00e9l v\u00e9gighaladt, volt m\u00e9g egy identity kontextus. <b>IdentityServer4<\/b> amely lehet\u0151v\u00e9 teszi a hiteles\u00edt\u00e9st, ez egy ingyenes \u00e9s er\u0151s alternat\u00edva a <b>ADFS\u00a0<\/b>\u2014<b> Active Directory Federation Services<\/b>.<\/p>\n<p>Az identity-re k\u00fcld\u00f6tt k\u00e9r\u00e9s t\u00f6bb l\u00e9p\u00e9sben lett feldolgozva. Az els\u0151 l\u00e9p\u00e9s - <b>az \u00fcgyf\u00e9l<\/b> <b>a backendbe ker\u00fclt.<\/b>, amely adatokat cser\u00e9lt ezzel a szerverrel \u00e9s ellen\u0151rizte az \u00fcgyf\u00e9l tokenj\u00e9nek megl\u00e9t\u00e9t. Ha nem tal\u00e1lta, a k\u00e9r\u00e9s visszat\u00e9rt arra a kontextusra, ahonnan \u00e9rkezett, de m\u00e1r \u00e1tir\u00e1ny\u00edt\u00e1ssal, \u00e9s az \u00e1tir\u00e1ny\u00edt\u00e1s az identity-re ment.<\/p>\n<p>A m\u00e1sodik l\u00e9p\u00e9s - a k\u00e9r\u00e9s eljutott <b>az IdentityServer bejelentkez\u00e9si oldal\u00e1ra,<\/b> ahol az \u00fcgyf\u00e9l regisztr\u00e1lt, \u00e9s az IdentityServer adatb\u00e1zis\u00e1ban megjelent az a r\u00e9g\u00f3ta v\u00e1rt token. <\/p>\n<p>A harmadik l\u00e9p\u00e9s - <b>az \u00fcgyf\u00e9l visszair\u00e1ny\u00edt\u00f3dott <\/b>arra a kontextusra, ahonnan \u00e9rkezett.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/e052c408d67485ab9aa10d0fd25df57e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz IdentityServer4-nek van egy saj\u00e1toss\u00e1ga: <b>a visszair\u00e1ny\u00edtott k\u00e9r\u00e9sre HTTP-n kereszt\u00fcl v\u00e1laszol,<\/b>. Ak\u00e1rhogy is pr\u00f3b\u00e1lkoztunk a szerver be\u00e1ll\u00edt\u00e1saival, ak\u00e1rh\u00e1ny dokument\u00e1ci\u00f3t elolvastunk, de minden alkalommal az \u00fcgyf\u00e9l kezdeti k\u00e9r\u00e9s\u00e9t kaptuk meg URL-lel, amely HTTPS-en \u00e9rkezett, m\u00edg az IdentityServer ugyanazon kontextust visszajuttatta HTTP-val. Megd\u00f6bbent\u00fcnk! \u00c9s mindezt az identity kontextuson kereszt\u00fcl \u00e1tir\u00e1ny\u00edtottuk a HAProxy-ra, a fejekben pedig a HTTP protokollt HTTPS-re kellett m\u00f3dos\u00edtanunk. <\/p>\n<p>Mi az el\u0151ny, \u00e9s hol sp\u00f3roltunk?<\/p>\n<blockquote><p>P\u00e9nzt sp\u00f3roltunk az\u00e1ltal, hogy ingyenes megold\u00e1st haszn\u00e1ltunk a felhaszn\u00e1l\u00f3i csoportok hiteles\u00edt\u00e9s\u00e9re, forr\u00e1sokat, mivel az IdentityServer4-et egy k\u00fcl\u00f6n nodk\u00e9nt k\u00fcl\u00f6n szegmensben nem futtattuk, hanem egy\u00fctt haszn\u00e1ltuk az alkalmaz\u00e1s backendj\u00e9vel ugyanazon a szerveren, ahol a backend m\u0171k\u00f6dik.<\/p><\/blockquote>\n<p><\/p>\n<h2>Hogyan kell m\u0171k\u00f6dnie<\/h2>\n<p>\nTeh\u00e1t, ahogy \u00edg\u00e9rtem - Magic Box. M\u00e1r \u00e9rtj\u00fck, hogy garant\u00e1ltan a Linux ir\u00e1ny\u00e1ba haladunk. Form\u00e1ljunk meg konkr\u00e9t feladatokat, amelyek megold\u00e1sra v\u00e1rtak.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/cc59632aa0e5c65fe0efc754311ecf5e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Puppet manifesztumok. <\/b>A szolg\u00e1ltat\u00e1s \u00e9s az alkalmaz\u00e1s konfigur\u00e1ci\u00f3s kezel\u00e9s\u00e9hez klassz recepteket kellett \u00edrni. A ceruza \u00e9s a tekercs besz\u00e9desen mutatja, hogy mennyire gyorsan \u00e9s min\u0151s\u00e9gben k\u00e9sz\u00fclt el ez.<\/p>\n<p><b>A sz\u00e1ll\u00edt\u00e1s m\u00f3dja. <\/b>A standard az RPM. Mindenki tudja, hogy Linuxon n\u00e9lk\u00fcle nem lehet, de maga a projekt ford\u00edt\u00e1s ut\u00e1n egy futtathat\u00f3 DLL-f\u00e1jlok halmazak\u00e9nt jelent meg. K\u00f6r\u00fclbel\u00fcl 150 volt bel\u0151le, a projekt el\u00e9g neh\u00e9z. Az egyetlen harmonikus megold\u00e1s, hogy ezt a bin\u00e1ris anyagot RPM-be csomagoljuk, \u00e9s m\u00e1r abb\u00f3l telep\u00edts\u00fck az alkalmaz\u00e1st.<\/p>\n<p><b>Verzi\u00f3kezel\u00e9s. <\/b>S\u0171r\u0171n kellett kiadnunk, \u00e9s meg kellett hat\u00e1roznunk, hogyan alak\u00edtsuk ki a csomag nev\u00e9t. Ez a TFS integr\u00e1ci\u00f3s szintj\u00e9nek k\u00e9rd\u00e9se. A Build-\u00fcgyn\u00f6k\u00fcnk Linuxon futott. Amikor a TFS felad egy feladatot az \u00fcgyn\u00f6knek - worker - a Build-\u00fcgyn\u00f6k\u00f6n, \u00e1tkonvert\u00e1lja sz\u00e1m\u00e1ra a sz\u00fcks\u00e9ges v\u00e1ltoz\u00f3kat, amelyeket a folyamat k\u00f6rnyezeti v\u00e1ltoz\u00f3ihoz ad. Ezek k\u00f6z\u00f6tt a k\u00f6rnyezeti v\u00e1ltoz\u00f3k k\u00f6z\u00f6tt \u00e1tadhat\u00f3 a Build neve, a verzi\u00f3 neve \u00e9s egy\u00e9b v\u00e1ltoz\u00f3k. Tov\u00e1bbi r\u00e9szletek a 'RPM-csomag \u00e9p\u00edt\u00e9se' r\u00e9szben tal\u00e1lhat\u00f3ak.<\/p>\n<p><b>TFS be\u00e1ll\u00edt\u00e1sa<\/b> a Pipeline be\u00e1ll\u00edt\u00e1s\u00e1ra \u00f6sszpontosult. Kor\u00e1bban a Windows-\u00fcgyn\u00f6k\u00f6k\u00f6n gy\u0171jt\u00f6tt\u00fck az \u00f6sszes Windows-projektet, most viszont megjelenik a Linux-\u00fcgyn\u00f6k - Build-\u00fcgyn\u00f6k, amelyet be kell iktatni az \u00e9p\u00edt\u00e9si csoportba, bizonyos artefaktumokkal gazdag\u00edtani, megmondani, milyen t\u00edpus\u00fa projekteket fognak ezen a Build-\u00fcgyn\u00f6k\u00f6n \u00f6ssze\u00e1ll\u00edtani, \u00e9s valamilyen m\u00f3don m\u00f3dos\u00edtani a Pipeline-t.<\/p>\n<p><b>IdentityServer. <\/b>Az ADFS nem a mi utunk, az Open Source mellett \u00e1llunk ki.<\/p>\n<p>N\u00e9zz\u00fck \u00e1t a komponenseket.<\/p>\n<h2>var\u00e1zsdoboz<\/h2>\n<p>\nN\u00e9gy r\u00e9szb\u0151l \u00e1ll.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/22ea63bcf184046c15e034ec093352bb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Linux Build-\u00fcgyn\u00f6k. <\/b>Linux, mert erre \u00e1ll\u00edtjuk \u00f6ssze - logikus. Ezt a r\u00e9szt h\u00e1rom l\u00e9p\u00e9sben v\u00e9gezt\u00fck el.<\/p>\n<ul>\n<li><b>\u00dcgyn\u00f6k\u00f6k be\u00e1ll\u00edt\u00e1sa<\/b> \u00e9s nem egyet, mert elv\u00e1rtuk a projekt elosztott munk\u00e1j\u00e1t.\n<\/li>\n<li><b>A .NET Core 1.x telep\u00edt\u00e9se<\/b>. Mi\u00e9rt \u00e9ppen 1.x, amikor m\u00e1r el\u00e9rhet\u0151 a 2.0 a standard t\u00e1rol\u00f3ban? Mert amikor elkezdt\u00fck a fejleszt\u00e9st, az 1.09 stabil verzi\u00f3 volt, \u00edgy ezt a verzi\u00f3t v\u00e1lasztottuk a projekthez.\n<\/li>\n<li><b>Git 2.x<\/b>.\n<\/li>\n<\/ul>\n<p>\n<b>RPM-t\u00e1rol\u00f3. <\/b>Az RPM-csomagokat valahol t\u00e1rolni kellett. Azt tervezt\u00fck, hogy ugyanazt a v\u00e1llalati RPM-t\u00e1rol\u00f3t haszn\u00e1ljuk, amely minden Linux hoszt sz\u00e1m\u00e1ra el\u00e9rhet\u0151. \u00cdgy is tett\u00fcnk. A t\u00e1rol\u00f3 szerveren be\u00e1ll\u00edtottuk <b>webhook<\/b> amely let\u00f6lt\u00f6tte a megadott helyr\u0151l a sz\u00fcks\u00e9ges RPM-csomagot. A webhook verzi\u00f3j\u00e1t a Build-\u00fcgyn\u00f6k k\u00f6z\u00f6lte.<\/p>\n<p><b>GitLab. <\/b>Figyelem! A GitLab itt nem a fejleszt\u0151k \u00e1ltal, hanem a \u00fczemeltet\u00e9si oszt\u00e1ly \u00e1ltal van haszn\u00e1lva az alkalmaz\u00e1s verzi\u00f3inak, a csomagok verzi\u00f3inak, minden Linux-g\u00e9p \u00e1llapot\u00e1nak ellen\u0151rz\u00e9s\u00e9re, \u00e9s az \u00f6sszes recept - minden Puppet-manifeszt itt tal\u00e1lhat\u00f3. <\/p>\n<p><b>Puppet<\/b>\u00a0megoldja a vit\u00e1s k\u00e9rd\u00e9seket, \u00e9s pontosan azt a konfigur\u00e1ci\u00f3t szolg\u00e1ltatja, amit szeretn\u00e9nk, a Gitlab-b\u00f3l.<\/p>\n<p>Kezdj\u00fck el m\u00e9lyebben belemer\u00fclni. Hogyan t\u00f6rt\u00e9nik a DLL sz\u00e1ll\u00edt\u00e1sa az RPM-be?<\/p>\n<h3>DLL sz\u00e1ll\u00edt\u00e1sa az RPM-be<\/h3>\n<p>\nTegy\u00fck fel, hogy van egy rockcsillagunk a .NET fejleszt\u00e9s\u00e9ben. \u0150 a Visual Studio-t haszn\u00e1lja, \u00e9s l\u00e9trehoz egy kiad\u00e1si \u00e1gat. Ezut\u00e1n felt\u00f6lti azt a Git-be, \u00e9s a Git itt - TFS entit\u00e1s, teh\u00e1t ez az alkalmaz\u00e1s t\u00e1rol\u00f3ja, amellyel a fejleszt\u0151 dolgozik.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/978240886981d41fc6d7b17d0a4fcb05.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzut\u00e1n a TFS \u00e9szleli, hogy \u00faj elk\u00f6telez\u00e9s \u00e9rkezett. Melyik alkalmaz\u00e1sr\u00f3l van sz\u00f3? A TFS be\u00e1ll\u00edt\u00e1saiban van egy c\u00edmke, amely megmutatja, hogy milyen er\u0151forr\u00e1sokkal rendelkezik az egyes Build-\u00fcgyn\u00f6k\u00f6k. Ebben az esetben l\u00e1tja, hogy .NET Core projektet \u00e9p\u00edt\u00fcnk, ez\u00e9rt a Linux Build-\u00fcgyn\u00f6k\u00f6t v\u00e1lasztja a poolb\u00f3l. <\/p>\n<p>A Build-\u00fcgyn\u00f6k megkapja a forr\u00e1st, let\u00f6lti a sz\u00fcks\u00e9ges <b>f\u00fcgg\u0151s\u00e9geket<\/b> a .NET, npm stb. t\u00e1rol\u00f3b\u00f3l, majd az alkalmaz\u00e1s \u00e9p\u00edt\u00e9se \u00e9s a csomagol\u00e1s ut\u00e1n elk\u00fcldi az RPM-csomagot az RPM-t\u00e1rol\u00f3ba.<\/p>\n<p>M\u00e1sr\u00e9szt a k\u00f6vetkez\u0151 t\u00f6rt\u00e9nik. Az \u00fczemeltet\u00e9si r\u00e9szleg m\u00e9rn\u00f6ke k\u00f6zvetlen\u00fcl a projekt kiad\u00e1s\u00e1val foglalkozik: v\u00e1ltoztatja a csomagok verzi\u00f3it a\u00a0<b>Hiera<\/b> a t\u00e1rol\u00f3ban, ahol az alkalmaz\u00e1s receptje tal\u00e1lhat\u00f3, majd a Puppet aktiv\u00e1lja a <b>Yum-ot,<\/b>amely let\u00f6lti az \u00faj csomagot a t\u00e1rol\u00f3b\u00f3l, \u00e9s az \u00faj verzi\u00f3 az alkalmaz\u00e1s k\u00e9szen \u00e1ll a haszn\u00e1latra.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/6c2db3ce4bd7d4268e88c6c3d3ecbeba.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSz\u00f3ban minden egyszer\u0171, de mi t\u00f6rt\u00e9nik bel\u00fcl a Build-\u00fcgyn\u00f6k\u00f6n?<\/p>\n<h3>DLL RPM csomagol\u00e1sa<\/h3>\n<p>\nMegkaptuk a projekt forr\u00e1sait \u00e9s a TFS-t\u0151l \u00e9rkez\u0151 \u00e9p\u00edt\u00e9si feladatot. A Build-\u00fcgyn\u00f6k <b>elind\u00edtja a project \u00e9p\u00edt\u00e9s\u00e9t a forr\u00e1sokb\u00f3l.<\/b>A meg\u00e9p\u00edtett projekt t\u00f6bb <b>DLL f\u00e1jl form\u00e1j\u00e1ban \u00e9rhet\u0151 el,<\/b>amelyeket zip-arch\u00edvumba csomagolnak a f\u00e1jlrendszer terhel\u00e9s\u00e9nek cs\u00f6kkent\u00e9se \u00e9rdek\u00e9ben.<\/p>\n<p>A ZIP-arch\u00edvum <b>a RPM csomag\u00e9p\u00edt\u00e9si k\u00f6nyvt\u00e1rba ker\u00fcl.<\/b> Ezut\u00e1n a Bash-skriptek inicializ\u00e1lj\u00e1k a k\u00f6rnyezeti v\u00e1ltoz\u00f3kat, megkeresik a Build verzi\u00f3j\u00e1t, a projekt verzi\u00f3j\u00e1t, a build k\u00f6nyvt\u00e1r el\u00e9r\u00e9si \u00fatj\u00e1t, \u00e9s elind\u00edtj\u00e1k az RPM-build folyamatot. Az \u00e9p\u00edt\u00e9s befejez\u00e9se ut\u00e1n a csomag publik\u00e1l\u00e1sra ker\u00fcl a\u00a0<b>helyi t\u00e1rol\u00f3ba,<\/b>amely a Build-\u00fcgyn\u00f6k\u00f6n tal\u00e1lhat\u00f3.<\/p>\n<p>Ezut\u00e1n a Build-\u00fcgyn\u00f6kr\u0151l a szerverre az RPM-t\u00e1rol\u00f3ba <b>JSON-k\u00e9r\u00e9st k\u00fcldenek,<\/b> amelyben megadj\u00e1k a verzi\u00f3- \u00e9s buildnevet. Az \u00e1ltalam kor\u00e1bban eml\u00edtett Webhook let\u00f6lti ezt a csomagot a Build-\u00fcgyn\u00f6k helyi t\u00e1rol\u00f3j\u00e1b\u00f3l, \u00e9s \u00faj \u00e9p\u00edt\u00e9st tesz el\u00e9rhet\u0151v\u00e9 telep\u00edt\u00e9sre.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/b69cacdadd171f4cbc9913b2ff4b7a79.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMi\u00e9rt ilyen a csomagok t\u00e1rol\u00f3ba juttat\u00e1s\u00e1nak terve? Mi\u00e9rt nem lehet az \u00f6sszes csomagot k\u00f6zvetlen\u00fcl a t\u00e1rol\u00f3ba k\u00fcldeni? Az ok az, hogy ez a biztons\u00e1g biztos\u00edt\u00e1s\u00e1ra szolg\u00e1l\u00f3 felt\u00e9tel. Ez a forgat\u00f3k\u00f6nyv korl\u00e1tozza a k\u00fcls\u0151 szem\u00e9lyek \u00e1ltali jogosulatlan RPM-csomagok felt\u00f6lt\u00e9s\u00e9nek lehet\u0151s\u00e9g\u00e9t a minden Linux-g\u00e9p sz\u00e1m\u00e1ra el\u00e9rhet\u0151 szerverre.<\/p>\n<h2>DB verzi\u00f3z\u00e1s<\/h2>\n<p>\nA fejleszt\u00e9ssel folytatott konz\u00edliumban kider\u00fclt, hogy a sr\u00e1coknak k\u00f6zelebb \u00e1ll a MS SQL, de a legt\u00f6bb nem Windows projekt\u00fcnkben m\u00e1r b\u0151ven haszn\u00e1ltuk a PostgreSQL-t. Mivel m\u00e1r eld\u00f6nt\u00f6tt\u00fck, hogy lemondunk minden fizet\u0151s megold\u00e1sr\u00f3l, \u00edgy itt is a PostgreSQL-t kezdt\u00fck el haszn\u00e1lni.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/6b6c081344f2408c399248a70a63dccc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEbben a r\u00e9szben szeretn\u00e9m elmondani, hogyan v\u00e9gezt\u00fck a DB verzion\u00e1l\u00e1s\u00e1t, \u00e9s hogyan v\u00e1lasztottunk a Flyway \u00e9s az Entity Framework Core k\u00f6z\u00f6tt. N\u00e9zz\u00fck meg az el\u0151nyeiket \u00e9s h\u00e1tr\u00e1nyaikat.<\/p>\n<h3>H\u00e1tr\u00e1nyok<\/h3>\n<p>\nA Flyway csak egy ir\u00e1nyba m\u0171k\u00f6dik, mi\u00a0<b>nem tudunk visszav\u00e1ltani<\/b>\u00a0\u2014 ez jelent\u0151s h\u00e1tr\u00e1ny. Az Entity Framework Core-ral m\u00e1s param\u00e9terek szerint lehet \u00f6sszehasonl\u00edtani \u2014 a fejleszt\u0151k k\u00e9nyelme szempontj\u00e1b\u00f3l. Biztosan eml\u00e9kszik, hogy ezt \u00e1ll\u00edtottuk a k\u00f6z\u00e9ppontba, \u00e9s alapvet\u0151 krit\u00e9rium volt, hogy semmit ne v\u00e1ltoztassunk meg a Windows fejleszt\u00e9sben.<\/p>\n<p>A Flyway-hoz <b>sz\u00fcks\u00e9g\u00fcnk volt valamilyen burkol\u00f3ra<\/b>, hogy a sr\u00e1cok ne \u00edrjanak <b>SQL-lek\u00e9rdez\u00e9seket<\/b>. Sz\u00e1mukra sokkal k\u00e9nyelmesebb az OOP fogalmaival dolgozni. \u00cdrtunk utas\u00edt\u00e1sokat az DB objektumokkal val\u00f3 munk\u00e1hoz, l\u00e9trej\u00f6tt az SQL-lek\u00e9rdez\u00e9s \u00e9s v\u00e9grehajt\u00e1sra ker\u00fclt. Az \u00faj DB verzi\u00f3 k\u00e9sz, tesztelt\u00fck \u2014 minden rendben van, minden m\u0171k\u00f6dik.<\/p>\n<p>Az Entity Framework Core-nak van egy h\u00e1tr\u00e1nya \u2014 nagy terhel\u00e9s eset\u00e9n nem\u00a0<b>optimaliz\u00e1lt SQL-lek\u00e9rdez\u00e9seket \u00e9p\u00edt<\/b>, \u00e9s a DB teljes\u00edtm\u00e9nye jelent\u0151s lehet. De mivel nem egy nagy terhel\u00e9s\u0171 szolg\u00e1ltat\u00e1ssal dolgozunk, nem sz\u00e1m\u00edtunk milli\u00f3s RPS terhel\u00e9sre, v\u00e1llaltuk ezt a kock\u00e1zatot \u00e9s a j\u00f6v\u0151beli probl\u00e9m\u00e1t \u00e1tdeleg\u00e1ltuk magunknak.<\/p>\n<h3>El\u0151ny\u00f6k<\/h3>\n<p>\nEntity Framework Core <b>dobozb\u00f3l m\u0171k\u00f6dik \u00e9s k\u00e9nyelmes a fejleszt\u00e9shez<\/b>, m\u00edg a Flyway <b>k\u00f6nnyen integr\u00e1lhat\u00f3 a megl\u00e9v\u0151 CI-be<\/b>. De mi is a fejleszt\u0151k k\u00e9nyelm\u00e9re \u00f6sszpontos\u00edtunk :)<\/p>\n<h3>A folyamatautomatiz\u00e1l\u00e1s<\/h3>\n<p>\nA Puppet \u00e9szleli, hogy v\u00e1ltoz\u00e1s t\u00f6rt\u00e9nt a csomagok verzi\u00f3j\u00e1ban, bele\u00e9rtve azt is, amely a migr\u00e1ci\u00f3\u00e9rt felel\u0151s. El\u0151sz\u00f6r telep\u00edti azt a csomagot, amely a migr\u00e1ci\u00f3s szkripteket \u00e9s az DB-vel kapcsolatos funkci\u00f3t tartalmazza. Ezut\u00e1n \u00fajraind\u00edtja az alkalmaz\u00e1st, amely az DB-vel dolgozik. Ezut\u00e1n k\u00f6vetkezik a t\u00f6bbi komponens telep\u00edt\u00e9se. A csomagok telep\u00edt\u00e9si sorrendje \u00e9s az alkalmaz\u00e1sok ind\u00edt\u00e1sa a Puppet manifesztj\u00e9ben van le\u00edrva.<\/p>\n<p>Az alkalmaz\u00e1sok \u00e9rz\u00e9keny adatokat haszn\u00e1lnak, p\u00e9ld\u00e1ul tokeneket, DB jelszavakat, mindezek a konfigur\u00e1ci\u00f3ban a Puppet masterb\u0151l t\u00f6lt\u0151dnek be, ahol titkos\u00edtott form\u00e1ban t\u00e1rolj\u00e1k \u0151ket.<\/p>\n<h2>TFS probl\u00e9m\u00e1k<\/h2>\n<p>\nMiut\u00e1n eld\u00f6nt\u00f6tt\u00fck, \u00e9s meg\u00e9rtett\u00fck, hogy n\u00e1lunk t\u00e9nyleg minden j\u00f3l m\u0171k\u00f6dik, \u00fagy d\u00f6nt\u00f6ttem, megn\u00e9zem, mi t\u00f6rt\u00e9nik a TFS buildjeivel az Win-fejleszt\u00e9si r\u00e9szlegen m\u00e1s projektekn\u00e9l \u2014 gyorsan vagyunk-e a buildel \u00e9s a kiad\u00e1son, \u00e9s jelent\u0151s sebess\u00e9gi probl\u00e9m\u00e1kat fedeztem fel.<\/p>\n<p>Az egyik f\u0151 projekt 12-15 percet vesz ig\u00e9nybe \u2014 ez hossz\u00fa, \u00edgy nem lehet \u00e9lni. Gyors elemz\u00e9s mutatta, hogy borzalmasan gyenge az I\/O, \u00e9s ez az array-eken.<\/p>\n<p>Megn\u00e9zve komponensenk\u00e9nt h\u00e1rom g\u00f3cpontot azonos\u00edtottam. Az els\u0151 \u2014 <b>\u201eKaspersky antivirus\u201d<\/b>, amely minden Windows Build-\u00fcgyn\u00f6k\u00f6n beolvassa a forr\u00e1sokat. A m\u00e1sodik - <b>Windows<\/b> <b>Indexer.<\/b> Nem volt letiltva, \u00e9s a Build-\u00fcgyn\u00f6k\u00f6k val\u00f3s id\u0151ben indexelt\u00e9k az \u00f6sszes folyamatban l\u00e9v\u0151t a telep\u00edt\u00e9s sor\u00e1n. <\/p>\n<p>A harmadik - <b>Npm install. <\/b>Kider\u00fclt, hogy a legt\u00f6bb Pipeline-ban \u00e9ppen ezt a szkriptet haszn\u00e1ltuk. Mi a h\u00e1tr\u00e1nya? Az Npm install elj\u00e1r\u00e1s a f\u00fcgg\u0151s\u00e9gek f\u00e1jlt\u00e9rk\u00e9p\u00e9nek l\u00e9trehoz\u00e1sakor fut le.\u00a0<b>package-lock.json<\/b>, ahol r\u00f6gz\u00edtik a projektehez felhaszn\u00e1lt csomagok verzi\u00f3it. A h\u00e1tr\u00e1nya, hogy az Npm install minden alkalommal a legfrissebb verzi\u00f3kat h\u00fazza le az internetr\u0151l, ami jelent\u0151s id\u0151t vehet ig\u00e9nybe egy nagy projekt eset\u00e9n.<\/p>\n<blockquote><p>A fejleszt\u0151k n\u00e9ha a helyi g\u00e9pen k\u00eds\u00e9rleteznek, hogy ellen\u0151rizz\u00e9k egy-egy r\u00e9sz vagy az eg\u00e9sz projekt m\u0171k\u00f6d\u00e9s\u00e9t. N\u00e9ha az t\u00f6rt\u00e9nt, hogy helyben minden j\u00f3l m\u0171k\u00f6d\u00f6tt, de amikor \u00f6ssze\u00e1ll\u00edtottuk \u00e9s telep\u00edtett\u00fck, semmi nem m\u0171k\u00f6d\u00f6tt. Kezd\u00fcnk ut\u00e1naj\u00e1rni, mi a probl\u00e9ma - aha, k\u00fcl\u00f6nb\u00f6z\u0151 verzi\u00f3k a f\u00fcgg\u0151s\u00e9gekb\u0151l.<\/p><\/blockquote>\n<p><\/p>\n<h3>Megold\u00e1s<\/h3>\n<p><\/p>\n<ul>\n<li>A forr\u00e1sok az AV kiv\u00e9telekben.\n<\/li>\n<li>Az index\u00e1l\u00e1s letilt\u00e1sa.\n<\/li>\n<li>\u00c1t\u00e1ll\u00e1s a\u00a0<b>npm ci<\/b>.\n<\/li>\n<\/ul>\n<p>\nAz npm ci el\u0151nye, hogy\u00a0<b>a f\u00fcgg\u0151s\u00e9gek f\u00e1jlt\u00e9rk\u00e9p\u00e9t egyszer \u00e1ll\u00edtjuk \u00f6ssze<\/b>, \u00e9s lehet\u0151s\u00e9get ad arra, hogy a fejleszt\u0151 sz\u00e1m\u00e1ra <b>aktu\u00e1lis csomaglist\u00e1t<\/b>, amellyel szabadon k\u00eds\u00e9rletezhet helyben. Ez <b>id\u0151t takar\u00edt meg<\/b> a k\u00f3dot \u00edr\u00f3 fejleszt\u0151k sz\u00e1m\u00e1ra.<\/p>\n<h3>Konfigur\u00e1ci\u00f3<\/h3>\n<p>\nMost egy kicsit a repozit\u00f3rium konfigur\u00e1ci\u00f3j\u00e1r\u00f3l. T\u00f6rt\u00e9nelmileg <b>a Nexus-t<\/b> haszn\u00e1ljuk a repozit\u00f3riumok kezel\u00e9s\u00e9re, bele\u00e9rtve <b>az Internal REPO-t.<\/b>Ebben a bels\u0151 repozit\u00f3riumban tal\u00e1lhat\u00f3ak mindazon komponensek, amelyeket bels\u0151 c\u00e9lokra haszn\u00e1lunk, p\u00e9ld\u00e1ul a saj\u00e1t k\u00e9sz\u00edt\u00e9s\u0171 monitoroz\u00e1sok.<\/p>\n<p><img decoding=\"async\" alt=\".NET Core Linux alatt, DevOps a cs\u00facson\" src=\"\/wp-content\/uploads\/2019\/04\/147d7e80bf20e03a232f8b533be316eb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEmellett haszn\u00e1ljuk <b>a NuGet-et,<\/b>, mivel jobban cache-eli, mint a t\u00f6bbi csomagkezel\u0151.<\/p>\n<h3>Eredm\u00e9ny<\/h3>\n<p>\nMiut\u00e1n optimaliz\u00e1ltuk a Build-\u00fcgyn\u00f6k\u00f6ket, az \u00e1tlagos \u00f6ssze\u00e1ll\u00edt\u00e1si id\u0151 12 percr\u0151l 7 percre cs\u00f6kkent.<\/p>\n<blockquote><p>Ha sz\u00e1m\u00edt\u00e1sba vessz\u00fck az \u00f6sszes g\u00e9pet, amelyet haszn\u00e1lhattunk volna Windows alatt, de ebben a projektben Linuxra v\u00e1ltottunk, k\u00f6r\u00fclbel\u00fcl 10 000 doll\u00e1rt sp\u00f3roltunk meg. \u00c9s ez csak a licenceken, ha figyelembe vessz\u00fck a fenntart\u00e1si k\u00f6lts\u00e9geket - m\u00e9g t\u00f6bbet.<\/p><\/blockquote>\n<p><\/p>\n<h2>Tervek<\/h2>\n<p>\nA k\u00f6vetkez\u0151 negyed\u00e9vre a k\u00f3d sz\u00e1ll\u00edt\u00e1s\u00e1nak optimaliz\u00e1l\u00e1s\u00e1ra tervezt\u00fck a munk\u00e1t.<\/p>\n<p><b>\u00c1t\u00e1ll\u00e1s a prebuildezett Docker-k\u00e9pre<\/b>. A TFS nagyszer\u0171 dolog sok pluginnal, amelyek lehet\u0151v\u00e9 teszik az integr\u00e1ci\u00f3t a Pipeline-ba, bele\u00e9rtve a trigger szerinti \u00f6ssze\u00e1ll\u00edt\u00e1st, p\u00e9ld\u00e1ul a Docker-k\u00e9pet. Ezt a triggert akarjuk megval\u00f3s\u00edtani arra a c\u00e9lra. <b>package-lock.json<\/b>. Ha valamilyen m\u00f3don megv\u00e1ltozik a projekt \u00f6ssze\u00e1ll\u00edt\u00e1s\u00e1hoz haszn\u00e1lt \u00f6sszetev\u0151k \u00f6sszet\u00e9tele \u2013 \u00faj Docker-k\u00e9pet k\u00e9sz\u00edt\u00fcnk. Ezt k\u00f6vet\u0151en ezt haszn\u00e1ljuk a kont\u00e9ner telep\u00edt\u00e9s\u00e9hez a l\u00e9trehozott alkalmaz\u00e1ssal. Jelenleg ez nincs, de tervezz\u00fck, hogy \u00e1tt\u00e9r\u00fcnk a Kubernetes mikroszolg\u00e1ltat\u00e1s-architekt\u00far\u00e1ra, amely akt\u00edvan fejl\u0151dik c\u00e9g\u00fcnkn\u00e9l \u00e9s m\u00e1r r\u00e9g\u00f3ta t\u00e1mogatja a produkci\u00f3s megold\u00e1sokat.<\/p>\n<h2>\u00d6sszefoglal\u00f3<\/h2>\n<p>\nArra k\u00e9rek mindenkit, hogy dobnak ki a Windows-t, de nem az\u00e9rt, mert nem tudom elk\u00e9sz\u00edteni. Az oka az, hogy a legt\u00f6bb ny\u00edlt forr\u00e1sk\u00f3d\u00fa megold\u00e1s \u2013 ez <b>Linux-stack<\/b>. Nagyon j\u00f3l <b>megtakar\u00edt p\u00e9nzt az er\u0151forr\u00e1sokon<\/b>. V\u00e9lem\u00e9nyem szerint a j\u00f6v\u0151 a Linuxon alapul\u00f3 ny\u00edlt forr\u00e1sk\u00f3d\u00fa megold\u00e1sok\u00e9, er\u0151s k\u00f6z\u00f6ss\u00e9ggel.<\/p>\n<p><i>A speaker profilja: Alexander Sinchinov <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/alextuning\">GitHub-on<\/a><\/noindex>.<\/i><\/p>\n<blockquote><p><noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/\">DevOps Conf<\/a><\/noindex>\u00a0\u2013 egy konferencia a fejleszt\u00e9si, tesztel\u00e9si \u00e9s \u00fczemeltet\u00e9si folyamatok integr\u00e1l\u00e1s\u00e1r\u00f3l szakemberek sz\u00e1m\u00e1ra szakemberekt\u0151l. \u00c9ppen ez\u00e9rt a projekt, amelyr\u0151l Alexander besz\u00e9lt, megval\u00f3sult \u00e9s m\u0171k\u00f6dik, m\u00edg a besz\u00e9d napj\u00e1n k\u00e9t sikeres kiad\u00e1s is zajlott. A\u00a0<noindex><a rel=\"nofollow\" href=\"http:\/\/devopsconf.io\/moscow-rit\/2019\">DevOps Conf a RIT++-n<\/a><\/noindex> m\u00e1jus 27-\u00e9n \u00e9s 28-\u00e1n m\u00e9g t\u00f6bb hasonl\u00f3 eset lesz a gyakorl\u00f3kt\u00f3l. M\u00e9g lehet ugrani az utols\u00f3 vonatra \u00e9s <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/lectures\/propose\/?conference=dc2019-rit\">beny\u00fajtani egy el\u0151ad\u00e1st<\/a><\/noindex> vagy nyugodtan <noindex><a rel=\"nofollow\" href=\"https:\/\/conf.ontico.ru\/conference\/join\/rit2019.html?popup=3\">lefoglalni a<\/a><\/noindex> jegyet. Tal\u00e1lkozunk Skolkovo-ban!<\/p><\/blockquote>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/448496\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b\u00a0\u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b\u0438 DevOps \u043a\u0430\u043a \u043c\u043e\u0433\u043b\u0438. \u041d\u0430\u0441 \u0431\u044b\u043b\u043e 8\u00a0\u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0438\u00a0\u0412\u0430\u0441\u044f \u0431\u044b\u043b \u0441\u0430\u043c\u044b\u043c \u043a\u0440\u0443\u0442\u044b\u043c \u043f\u043e\u00a0Windows. \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0412\u0430\u0441\u044f \u0443\u0448\u0435\u043b, \u0430\u00a0\u0443\u00a0\u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Windows-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430. \u041a\u043e\u0433\u0434\u0430 \u044f\u00a0\u0432\u044b\u0441\u044b\u043f\u0430\u043b \u043d\u0430\u00a0\u0441\u0442\u043e\u043b \u0432\u0435\u0441\u044c \u0441\u0442\u0435\u043a Windows-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u043e\u00a0\u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u00a0\u2014 \u0431\u043e\u043b\u044c\u2026 \u0422\u0430\u043a \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0438\u043d\u0447\u0438\u043d\u043e\u0432\u0430 \u043d\u0430 DevOpsConf. \u041a\u043e\u0433\u0434\u0430 \u0438\u0437\u00a0\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0443\u0448\u0435\u043b \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442 \u043f\u043e\u00a0Windows, \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0437\u0430\u0434\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u043b\u0430\u0442\u044c. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430\u00a0Linux, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24043,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32217","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b\u0438 DevOps \u043a\u0430\u043a \u043c\u043e\u0433\u043b\u0438. \u041d\u0430\u0441 \u0431\u044b\u043b\u043e 8 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0438 \u0412\u0430\u0441\u044f \u0431\u044b\u043b \u0441\u0430\u043c\u044b\u043c \u043a\u0440\u0443\u0442\u044b\u043c \u043f\u043e Windows. \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0412\u0430\u0441\u044f \u0443\u0448\u0435\u043b, \u0430 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Windows-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/net-core-na-linux-devops-na-kone\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47.NET Core \u043d\u0430 Linux, DevOps \u043d\u0430 \u043a\u043e\u043d\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b\u0438 DevOps \u043a\u0430\u043a \u043c\u043e\u0433\u043b\u0438. \u041d\u0430\u0441 \u0431\u044b\u043b\u043e 8 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0438 \u0412\u0430\u0441\u044f \u0431\u044b\u043b \u0441\u0430\u043c\u044b\u043c \u043a\u0440\u0443\u0442\u044b\u043c \u043f\u043e Windows. \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0412\u0430\u0441\u044f \u0443\u0448\u0435\u043b, \u0430 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Windows-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/net-core-na-linux-devops-na-kone\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:45:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:45:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47.NET Core Linuxon, DevOps a cs\u00facson | ProHoster","description":"A DevOps-t \u00fagy fejlesztett\u00fck, ahogy tudtuk. Nyolc f\u0151 voltunk, \u00e9s Vasja volt a legjobb Windowsban. V\u00e1ratlanul Vasja elment, \u00e9s nekem az volt a feladatom, hogy elind\u00edtsak egy \u00faj projektet, amely Windows-fejleszt\u00e9st biztos\u00edt.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/net-core-na-linux-devops-na-kone","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47.NET Core \u043d\u0430 Linux, DevOps \u043d\u0430 \u043a\u043e\u043d\u0435 | ProHoster","og:description":"\u041c\u044b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u043b\u0438 DevOps \u043a\u0430\u043a \u043c\u043e\u0433\u043b\u0438. \u041d\u0430\u0441 \u0431\u044b\u043b\u043e 8 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0438 \u0412\u0430\u0441\u044f \u0431\u044b\u043b \u0441\u0430\u043c\u044b\u043c \u043a\u0440\u0443\u0442\u044b\u043c \u043f\u043e Windows. \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0412\u0430\u0441\u044f \u0443\u0448\u0435\u043b, \u0430 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Windows-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/net-core-na-linux-devops-na-kone","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:45:43+00:00","article:modified_time":"2019-10-31T18:45:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32217","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 09:49:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:02:47","updated":"2026-01-21 09:49:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/32217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=32217"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/32217\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/24043"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=32217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=32217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=32217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}