{"id":494,"date":"2026-03-29T16:29:59","date_gmt":"2026-03-29T16:29:59","guid":{"rendered":"https:\/\/nuplo.org\/?page_id=494"},"modified":"2026-04-27T11:38:12","modified_gmt":"2026-04-27T11:38:12","slug":"devops","status":"publish","type":"page","link":"https:\/\/nuplo.org\/pl\/tworzenie-oprogramowania-w-erze-agentow-ai\/devops\/","title":{"rendered":"DevOps"},"content":{"rendered":"\n<p>W poprzednich rozdzia\u0142ach dowiedzia\u0142e\u015b si\u0119, jak przechowywa\u0107 dane oraz jakie s\u0105 cechy dobrej aplikacji internetowej. Kolejn\u0105 istotn\u0105 cz\u0119\u015bci\u0105 procesu wytwarzania oprogramowania jest DevOps &#8211; Dyrygent cyfrowej kuchni. Posiadasz ju\u017c dzia\u0142aj\u0105c\u0105 aplikacj\u0119, pewne MVP, kt\u00f3re ci\u0105gle rozwijasz. Dodawanie kolejnych element\u00f3w mo\u017ce okaza\u0107 si\u0119 problematyczne &#8211; szczeg\u00f3lnie kiedy w gr\u0119 wchodzi praca zespo\u0142owa. DevOps okre\u015bla jak poprawnie zautomatyzowa\u0107 elementy implementacji, aby szybciej otrzyma\u0107 informacj\u0119 zwrotn\u0105 o produkcie, upro\u015bci\u0107 procesy i je zautomatyzowa\u0107.&nbsp;<\/p>\n\n\n\n<p>Przy tworzeniu ma\u0142ej aplikacji, spora cz\u0119\u015b\u0107 element\u00f3w mo\u017ce wydawa\u0107 si\u0119 niepotrzebna, jednak wraz z rozrastaniem si\u0119 projektu, sam zauwa\u017cysz, kt\u00f3re elementy nale\u017cy wyrzuci\u0107, zmieni\u0107 lub zautomatyzowa\u0107, szczeg\u00f3lnie przy etapie wdro\u017cenia i przechowywania kodu.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"devops-czyli-wspolpraca-kucharzy-z-obsluga-sali-0\">DevOps, czyli wsp\u00f3\u0142praca kucharzy z obs\u0142ug\u0105 sali<\/h2>\n\n\n\n<p>Aby dobrze zrozumie\u0107, czym jest DevOps, trzeba wyja\u015bni\u0107 skr\u00f3t:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Dev<\/strong>: implementacja projektu<\/li>\n\n\n\n<li><strong>Ops<\/strong>: utrzymanie i wdro\u017cenie aplikacji<\/li>\n<\/ul>\n\n\n\n<p>Oznacza to w praktyce, \u017ce ca\u0142y zesp\u00f3\u0142 jest odpowiedzialny za aplikacj\u0119, kt\u00f3r\u0105 wytwarza. S\u0105 osoby odpowiedzialne za tworzenie kodu i s\u0105 osoby, kt\u00f3rych zadaniem jest wdro\u017cenie aplikacji. Sam mo\u017cesz zauwa\u017cy\u0107, \u017ce tworzenie kolejnej wersji oprogramowania jest obarczone pewnymi problemami:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jak podmieni\u0107 pliki na serwerze?&nbsp;<\/li>\n\n\n\n<li>Czy nowa funkcjonalno\u015b\u0107 dzia\u0142a poprawnie?&nbsp;<\/li>\n\n\n\n<li>Czy po wprowadzonych zmianach projekt jest gotowy do uruchomienia?<\/li>\n<\/ul>\n\n\n\n<p>DevOps pozwala wprowadzi\u0107 zasady, dzi\u0119ki kt\u00f3rym odpowiadanie na te pytania zostan\u0105 zautomatyzowane i potrzebne dane uzyskamy szybko. Odnosz\u0105c to do analogii kuchni, kucharze przygotowuj\u0105 posi\u0142ki, ale kelnerzy kt\u00f3rzy, dostarczaj\u0105 je, sprawdzaj\u0105 czy spe\u0142niaj\u0105 standardy, smakuj\u0105 klientom i daj\u0105 feedback kucharzom.&nbsp;<\/p>\n\n\n\n<p>Kolejnym wa\u017cnym elementem jest wspomniana analiza dzia\u0142ania aplikacji. DevOps zajmuje si\u0119 monitorowaniem stworzonego rozwi\u0105zania, weryfikuj\u0105c czy dzia\u0142a poprawnie, czy aplikacja odpowiada szybko, nie zacina si\u0119 i nie ma problem\u00f3w z dost\u0119pno\u015bci\u0105. Najcz\u0119stszym problemem dzia\u0142ania aplikacji s\u0105 \u201c<strong>w\u0105skie gard\u0142a<\/strong>\u201d, kt\u00f3re blokuj\u0105 wykonanie aplikacji. Je\u017celi kuchnia ma jeden piec, nie b\u0119dzie mog\u0142a upiec jednocze\u015bnie 12 pizz, mo\u017ce zrobi\u0107 tylko 6. Ta sama analogia odnosi si\u0119 do aplikacji internetowych &#8211; je\u017celi gdzie\u015b wyst\u0119puje tego typu problem, musimy podj\u0105\u0107 pewne dzia\u0142anie &#8211; na przyk\u0142ad kupi\u0107 kolejny piec!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"git-i-gitflow-jedna-ksiazka-kucharska-dla-wielu-kucharzy-1\">Git i GitFlow: Jedna ksi\u0105\u017cka kucharska dla wielu kucharzy<\/h2>\n\n\n\n<p>Przy tworzeniu oprogramowania, jednym z najwa\u017cniejszych element\u00f3w jest system kontroli wersji &#8211; oprogramowanie, kt\u00f3re <strong>przechowuje kod \u017ar\u00f3d\u0142owy<\/strong> projektu, <strong>zarz\u0105dza zmianami<\/strong>, wskazuje kto jest odpowiedzialny za cz\u0119\u015b\u0107 programu. Najpopularniejszy jest program <strong>Git<\/strong>, u\u017cywany na ca\u0142ym \u015bwiecie w biznesie, programach otwarto-\u017ar\u00f3d\u0142owych i prywatnych. Jako jednoosobowy zesp\u00f3\u0142 r\u00f3wnie\u017c mo\u017cesz z niego korzysta\u0107, cho\u0107by dla stworzenia kopii zapasowej i historii zmian. Ci\u0119\u017cko jest znale\u017a\u0107 analogi\u0119 do restauracji, mo\u017ce to by\u0107 dziennik przepis\u00f3w, w kt\u00f3rym zapisane s\u0105 poprzednie wersje przepis\u00f3w wraz ze zmianami, jakie wprowadzili poszczeg\u00f3lni kucharze.<\/p>\n\n\n\n<p>Git jest przydatny w pracy w du\u017cych zespo\u0142ach, programi\u015bci mog\u0105 <strong>r\u00f3wnolegle <\/strong>wprowadza\u0107 zmiany, bez tworzenia niepotrzebnych konflikt\u00f3w. Zwykle, <strong>ka\u017cdy pracuje na osobnej ga\u0142\u0119zi<\/strong>, a kiedy zako\u0144czy zadanie scala swoje rozwi\u0105zanie do ga\u0142\u0119zi g\u0142\u00f3wnej. Inny programista mo\u017ce te\u017c przed scaleniem sprawdzi\u0107 kod: sprawdzi\u0107 jego jako\u015b\u0107, dzia\u0142anie itd &#8211; nazywamy to pull request. Programista wysy\u0142a \u017c\u0105danie scalania zmian, a kucharz mo\u017ce prosi\u0107 o sprawdzenie dania przed wpisaniem go do karty.&nbsp;<\/p>\n\n\n\n<p>Trzeba te\u017c wspomnie\u0107 o modelu organizacji pracy. Szczeg\u00f3lnie jest to potrzebne w ogromnych zespo\u0142ach. GitFlow wprowadza sta\u0142\u0105 struktur\u0119 ga\u0142\u0119zi, w kt\u00f3rych ka\u017cda ma okre\u015blon\u0105 rol\u0119:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Prod<\/strong>: kod produkcyjny, kt\u00f3ry jest przetestowany i stabilny<\/li>\n\n\n\n<li><strong>Staging<\/strong>: odpowiada za testy, poprawki przed wstawieniem na ga\u0142\u0105\u017a g\u0142\u00f3wn\u0105<\/li>\n\n\n\n<li><strong>Feature<\/strong>: ga\u0142\u0105\u017a do implementacji nowej funkcji, np. feature\/robot-gotuj\u0105cy<\/li>\n<\/ul>\n\n\n\n<p>Oddziela to rozw\u00f3j od produkcji, wymusza kontrol\u0119 nad procesem wydawania i wdro\u017cenia aplikacji, a tak\u017ce pozwala r\u00f3wnolegle pracowa\u0107 programistom. Gdy jeden sko\u0144czy zadanie, nie wp\u0142ywa to na prac\u0119 drugiego. Kucharz zmieniaj\u0105cy przepis u siebie w zeszycie, nie zmieni tego z g\u0142\u00f3wnej ksi\u0105\u017cki, ale te\u017c nie mo\u017ce bezpo\u015brednio zmienia\u0107 jej, bez wiedzy innych kucharzy. Stosuj\u0105c t\u0119 struktur\u0119, mo\u017cesz bez ryzyka tworzy\u0107 i modyfikowa\u0107 agenta, na osobnej ga\u0142\u0119zi np.: feature\/cooking-agent<\/p>\n\n\n\n<p>Niestety, komplikuje to histori\u0119 i wymaga przeszkolenia programist\u00f3w, je\u017celi nie pracowali w tym stylu. Mo\u017cesz odnie\u015b\u0107 wra\u017cenie, \u017ce niepotrzebnie wprowadza du\u017c\u0105 ilo\u015b\u0107 po\u0142\u0105cze\u0144 ga\u0142\u0119zi. M\u00f3wi\u0105c wprost, w ma\u0142ych projektach jest to przerost formy nad tre\u015bci\u0105.&nbsp;<\/p>\n\n\n\n<p>Umieszczaj\u0105c pliki w repozytorium, nie powinno si\u0119 umieszcza\u0107 wszystkiego. Dobr\u0105 praktyk\u0105 jest wstawia\u0107 kod programu oraz list\u0119 zale\u017cno\u015bci. Nie nale\u017cy wstawia\u0107 programu wykonalnego i bibliotek, poniewa\u017c ka\u017cdy mo\u017ce na w\u0142asn\u0105 r\u0119k\u0119 stworzy\u0107 program na podstawie kodu i samodzielnie zainstalowa\u0107 biblioteki. Plikiem, kt\u00f3ry pozwala ustali\u0107 dok\u0142adnie, co zostanie wstawione do repozytorium jest .gitignore. Zapisujemy tam pliki i katalogi, kt\u00f3rych git ma nie synchronizowa\u0107.&nbsp;<\/p>\n\n\n\n<p><strong>Uwaga!<\/strong> Zmienne \u015brodowiskowe, takie jak klucze API do modeli j\u0119zykowych albo dane dost\u0119pu do bazy danych powinny by\u0107 przechowywane w osobnym pliku .env, nie w kodzie. Dodatkowo, ten plik nigdy nie powinien by\u0107 \u015bledzony przez git, poniewa\u017c wszystkie zmiany w nim b\u0119d\u0105 widoczne. Jest to jeden ze sposob\u00f3w zabezpieczenia si\u0119 przed wyciekiem kluczy, to zagadnienie zostanie lepiej opisane w rozdziale dotycz\u0105cym bezpiecze\u0144stwa. DevOps to automatyzacja i usprawnianie proces\u00f3w, ale nie wolno zapomnie\u0107 o podstawowych elementach bezpiecze\u0144stwa.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ci-cd-automatyczna-linia-wydawania-dan-2\">CI\/CD: Automatyczna linia wydawania da\u0144<\/h2>\n\n\n\n<p>CI\/CD oznacza pierwszy krok do automatyzacji proces\u00f3w. Zgodnie ze <strong>z\u0142otymi zasadami Elona Muska<\/strong>, najpierw nale\u017cy <strong>upro\u015bci\u0107 procesy przed ich automatyzacj\u0105<\/strong>, tak tutaj upro\u015bcili\u015bmy proces wprowadzania zmian do g\u0142\u00f3wnej aplikacji. Teraz nadesz\u0142a pora na automatyzacj\u0119!<br>Skr\u00f3t CI oznacza <strong>Continuous Integration<\/strong>, czyli Ci\u0105g\u0142\u0105 Integracj\u0119. Chodzi o to, \u017ce po ka\u017cdej wprowadzonej zmianie, mo\u017cemy automatycznie sprawdzi\u0107 czy program spe\u0142nia za\u0142o\u017cone przez nas standardy, uruchamia si\u0119 i jest gotowy do dzia\u0142ania. Programista wprowadza zmiany do repozytorium, program automatycznie weryfikuje czy kod jest poprawny. Odnosz\u0105c to do restauracji, po przygotowaniu nowego dania, kucharz przekazuje je robotowi, kt\u00f3ry okre\u015bla jako\u015b\u0107 tego dania. Je\u017celi jest dobre, zostanie wprowadzone do karty, je\u017celi nie, robot powie kucharzowi co jest nie tak.&nbsp;<\/p>\n\n\n\n<p>CD natomiast to <strong>Continuous Delivery<\/strong>, czyli Ci\u0105g\u0142e Dostarczanie. Skoro mamy stabiln\u0105 wersj\u0119 aplikacji, gotow\u0105 do uruchomienia, to dlaczego jej nie wdro\u017cy\u0107? Niech automat wstawi te pliki na serwer, nie cz\u0142owiek. R\u0119czne wprowadzanie zmian po ka\u017cdej wa\u017cnej zmianie jest podatne na awarie, a ten proces bardzo \u0142atwo si\u0119 automatyzuje.&nbsp;<\/p>\n\n\n\n<p>Jakie s\u0105 tego zalety? Najwi\u0119cej zyskasz otrzymuj\u0105c feedback po wprowadzeniu zmian. Je\u017celi Tw\u00f3j kod nie dzia\u0142a\u0142by poprawnie, dowiedzia\u0142by\u015b si\u0119 o tym dopiero przy wdra\u017caniu aplikacji. Wprowadzany kod do repozytorium b\u0119dzie te\u017c kodem, kt\u00f3ry posiada odpowiedni\u0105 jako\u015b\u0107. Ma to znaczenie, je\u017celi wstawiasz zmiany cz\u0119sto i zesp\u00f3\u0142 pracuje r\u00f3wnolegle.<\/p>\n\n\n\n<p>GitFlow wspomaga ten proces, na ga\u0142\u0119ziach feature mo\u017cesz uruchamia\u0107 testy, a przy do\u0142\u0105czaniu zmian na ga\u0142\u0105\u017a develop, mo\u017cesz budowa\u0107 zmiany i wstawia\u0107 je na \u015brodowisko testowe. Informacje otrzymujesz od razu!<\/p>\n\n\n\n<p>W CI\/CD elementy wdro\u017ceniowe <strong>musz\u0105 by\u0107 zautomatyzowane<\/strong>, cz\u0142owiek nie mo\u017ce bra\u0107 w nich udzia\u0142u. Programista ma tylko wprowadzi\u0107 zmiany, nic wi\u0119cej &#8211; nie konfigurowa\u0107, wpisywa\u0107 dodatkowych polece\u0144 itd. Wolne wdro\u017cenie oraz testy mog\u0105 zniech\u0119ca\u0107 programist\u00f3w do cz\u0119stego wprowadzania zmian, a im cz\u0119stsze zmiany tym lepiej.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"docker-pudelko-ktore-gwarantuje-ten-sam-smak-wszedzie-3\">Docker: Pude\u0142ko, kt\u00f3re gwarantuje ten sam smak wsz\u0119dzie<\/h2>\n\n\n\n<p>Wyobra\u017a sobie sytuacj\u0119, idziesz do restauracji we W\u0142oszech i zamawiasz najlepsz\u0105 pizz\u0119 jak\u0105 w \u017cyciu jad\u0142e\u015b. Wracasz do Polski, idziesz na Stare Miasto, do w\u0142oskiej knajpy i prosisz o tak\u0105 sam\u0105 pizz\u0119, ale niestety nie smakuje tak samo. Sk\u0142adniki by\u0142y takie same, zosta\u0142a upieczona wed\u0142ug takiego samego przepisu, ale nie jest ju\u017c tak dobra.<br><br>Tak jest te\u017c z oprogramowaniem, jeden programista wykona\u0142 zadanie, wprowadza zmiany i okazuje si\u0119, \u017ce u klienta program nie dzia\u0142a. Na ratunek przychodz\u0105 kontenery &#8211; zamkni\u0119te pude\u0142ko na aplikacj\u0119, w kt\u00f3rej s\u0105 wszystkie elementy potrzebne do dzia\u0142ania. Dzi\u0119ki temu, mamy gwarancj\u0119, \u017ce <strong>program zadzia\u0142a w ka\u017cdym \u015brodowisku<\/strong> &#8211; u klienta i u programisty.&nbsp;<\/p>\n\n\n\n<p>Najpopularniejszym narz\u0119dziem do tworzenia kontener\u00f3w jest Docker. Pakuje aplikacj\u0119 do kontenera w etapie budowania, tworzy odpowiedni\u0105 konfiguracj\u0119 i zapisuje to w gotowym do uruchomienia obrazie Docker. Mo\u017cemy to <strong>uruchomi\u0107 w dowolnym miejscu<\/strong> na \u015bwiecie!<\/p>\n\n\n\n<p>Gdyby tylko ta restauracja we W\u0142oszech mia\u0142a pude\u0142ko, z kt\u00f3rego nie ucieka ciep\u0142o! Mo\u017cna by by\u0142o zje\u015b\u0107 t\u0119 pizz\u0119 w dowolnym miejscu na \u015bwiecie.<\/p>\n\n\n\n<p>Dockera wykorzystuje si\u0119 w procesie CI\/CD, kiedy zmiany zostan\u0105 wstawione, generowany jest obraz kontenera z aplikacj\u0105, co weryfikuje poprawno\u015b\u0107 programu i daje opcje jego szybkiego uruchomienia.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"skalowanie-jak-obsluzyc-tysiac-gosci-naraz-4\">Skalowanie: Jak obs\u0142u\u017cy\u0107 tysi\u0105c go\u015bci naraz?<\/h2>\n\n\n\n<p>Wspomniane zosta\u0142y wcze\u015bniej problemy z dzia\u0142aniem aplikacji. Nasze rozwi\u0105zanie mo\u017ce zosta\u0107 przeci\u0105\u017cone i nie by\u0107 w stanie obs\u0142u\u017cy\u0107 wszystkich u\u017cytkownik\u00f3w. Tak samo jak restauracja ma limit miejsc, tak samo ka\u017cda aplikacja internetowa ma limit r\u00f3wnoleg\u0142ych u\u017cytkownik\u00f3w. Musimy nasze rozwi\u0105zanie przeskalowa\u0107, najbardziej znane s\u0105 2 typy skalowania: Skalowanie pionowe i Skalowanie poziome.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skalowanie-pionowe-kupmy-wiekszy-piec-5\">Skalowanie pionowe: Kupmy wi\u0119kszy piec!<\/h3>\n\n\n\n<p>Skoro maszyna ma problemy z wydajno\u015bci\u0105, ulepszamy j\u0105. Zwykle, usprawnia si\u0119 procesor i dodaje si\u0119 wi\u0119cej pami\u0119ci RAM. Im lepsze podzespo\u0142y serwera, tym lepiej b\u0119dzie on dzia\u0142a\u0142. Ale ma to swoje limity &#8211; ogranicza nas bud\u017cet i technologia. Czasami nie wyci\u015bniemy wi\u0119cej z serwera, w rozs\u0105dnej cenie.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"skalowanie-poziome-kupmy-wiecej-piecow-6\">Skalowanie poziome: Kupmy wi\u0119cej piec\u00f3w!<\/h3>\n\n\n\n<p>Zamiast ulepsza\u0107 maszyn\u0119, stw\u00f3rzmy drug\u0105 identyczn\u0105. Zwi\u0119kszyli\u015bmy dwukrotnie zasoby naszej aplikacji, mo\u017cemy obs\u0142u\u017cy\u0107 2 razy wi\u0119cej u\u017cytkownik\u00f3w, ale ma to te\u017c swoje problemy. Trzeba postawi\u0107 stra\u017cnika &#8211; <strong>load balancer<\/strong> &#8211; kt\u00f3ry b\u0119dzie zarz\u0105dza\u0142 ruchem i kierowa\u0142 go na odpowiednie urz\u0105dzenie. Daje to niestety dodatkowy element i komplikuje architektur\u0119 naszej aplikacji. Jednak dobrze przemy\u015blana architektura pozwala skalowa\u0107 poziomo aplikacj\u0119 w niesko\u0144czono\u015b\u0107!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"kubernetes-kierownik-sali-w-twoim-kulinarnym-imperium-7\">Kubernetes: Kierownik sali w Twoim kulinarnym imperium<\/h2>\n\n\n\n<p>Skoro wiesz ju\u017c czym s\u0105 kontenery i czym jest skalowanie poziome, mo\u017cesz wykorzysta\u0107 pot\u0119\u017cne narz\u0119dzie Kubernetes. Trzeba to por\u00f3wna\u0107 do kierownika w restauracji, on zarz\u0105dza wszystkim, co si\u0119 dzieje: ile jest sto\u0142\u00f3w na sali, ilu jest kucharzy, ile piec\u00f3w kucharze maj\u0105 do dyspozycji. Podobnie dzia\u0142a Kubernetes, uruchamia odpowiednie aplikacje i pilnuje, aby by\u0142o ich wystarczaj\u0105co. Powiesz, \u017ce chcesz mie\u0107 3 dzia\u0142aj\u0105ce kontenery, Kubernetes Ci to zapewni. Je\u017celi oka\u017ce si\u0119, \u017ce miejsc na sali jest za ma\u0142o, automatycznie wyda rozkaz o dodaniu stolik\u00f3w, a je\u017celi oka\u017ce si\u0119 by\u0107 ich za du\u017co to zabierze je. Kubernetes <strong>sam naprawia awarie<\/strong>, je\u017celi jaki\u015b stolik nie dzia\u0142a, zostanie automatycznie zmieniony.&nbsp;<\/p>\n\n\n\n<p>W ma\u0142ej aplikacji Kubernetes mo\u017ce okaza\u0107 si\u0119 niepotrzebny, ale wraz z wielko\u015bci\u0105 aplikacji zarz\u0105dzanie tym wszystkim r\u0119cznie jest nierealne. Trzeba te procesy automatyzowa\u0107. Bez Kubernetesa kto\u015b r\u0119cznie musi reagowa\u0107 na awarie, pilnowa\u0107 obci\u0105\u017cenia serwer\u00f3w i uruchamia\u0107 je w razie potrzeby. Kiedy zobaczysz, \u017ce Twoje MVP zamieni\u0142o si\u0119 w pe\u0142n\u0105 aplikacj\u0119, a u\u017cytkownik\u00f3w przybywa, rozwa\u017c Kubernetesa, aby rozwija\u0107 swoj\u0105 aplikacj\u0119.<\/p>\n\n\n\n<p>Warto wspomnie\u0107 o tym, \u017ce najlepiej to dzia\u0142a w architekturze niezale\u017cnych mikroserwis\u00f3w. Najlepsza jest sytuacja w kt\u00f3rej kontenery s\u0105 niezale\u017cne, wykonuj\u0105 okre\u015blone zadania i s\u0105 wymienialne.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"infrastructure-as-code-cyfrowe-plany-budowy-restauracji-8\">Infrastructure as Code: Cyfrowe plany budowy restauracji<\/h2>\n\n\n\n<p>Jeste\u015b kierownikiem restauracji, musisz zatrudni\u0107 3 kucharzy, wi\u0119c wstawiasz og\u0142oszenie, przeprowadzasz rozmowy kwalifikacyjne i wybierasz najlepsze osoby. Pojawia si\u0119 potrzeba rozbudowy kuchni, wi\u0119c przechodzisz przez kolejny, \u017cmudny proces. Podobnie b\u0119dzie przy tworzeniu aplikacji, chcesz utworzy\u0107 baz\u0119 danych, tworzysz j\u0105 r\u0119cznie, konfigurujesz urz\u0105dzenia, ale czujesz, \u017ce mo\u017cna to zrobi\u0107 automatycznie.<\/p>\n\n\n\n<p>Na ratunek przychodzi rozwi\u0105zanie nazywane <strong>Infrastructure as Code<\/strong>, istniej\u0105 gotowe rozwi\u0105zania do <strong>konfiguracji struktury Twojej aplikacji<\/strong>, bez r\u0119cznego przeklikania i konfigurowania. Zapisujesz w pliku konfiguracyjnym odpowiednie informacje i program np. Terraform albo Ansible <strong>buduje wszystko automatycznie<\/strong>. Posiadasz dok\u0142adny projekt architektoniczny restauracji, kt\u00f3r\u0105 mo\u017cna postawi\u0107 na dowolnej dzia\u0142ce, ze wszystkimi detalami. Daje to powtarzalno\u015b\u0107, kontrol\u0119 zmian &#8211; wiadomo kto co zmienia i dlaczego i \u0142atwo integruje si\u0119 z procesami CI\/CD.&nbsp;<\/p>\n\n\n\n<p><strong>Istniej\u0105 2 podej\u015bcia:<\/strong> deklaratywne (opisujemy co chcemy uzyska\u0107 np.: \u201cchc\u0119 3 kucharzy\u201d) albo imperatywne (opisujemy kroki: \u201cprzeprowad\u017a rozmowy, wybierz 3 kucharzy\u201d).&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"monitorowanie-czyli-sanepid-w-twojej-restauracji-9\">Monitorowanie, czyli Sanepid w Twojej restauracji<\/h2>\n\n\n\n<p>Wprowadzi\u0142e\u015b ton\u0119 automat\u00f3w do aplikacji, wszystko wykonuje si\u0119 samo, a ty skupiasz si\u0119 na programowaniu. Nagle, dostajesz wiadomo\u015b\u0107 od u\u017cytkownika, \u017ce aplikacja nie dzia\u0142a. Nie sprawdzi\u0142e\u015b, <strong>czy system zachowuje si\u0119 poprawnie po wdro\u017ceniu<\/strong>. Aplikacj\u0119 nie tylko trzeba tworzy\u0107, ale te\u017c kontrolowa\u0107 j\u0105, jej dzia\u0142anie, zu\u017cycie zasob\u00f3w. Zbierz metryki, stan serwer\u00f3w, komunikaty, kt\u00f3re zwraca aplikacja, liczb\u0119 zapyta\u0144 na sekund\u0119 i nie tylko, na tej podstawie podejmij odpowiednie dzia\u0142anie &#8211; zmie\u0144 infrastruktur\u0119, popraw aplikacj\u0119, przeskaluj.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"podsumowanie-10\">Podsumowanie<\/h2>\n\n\n\n<p>DevOps to bardzo szeroka dziedzina, kt\u00f3ra przede wszystkim wspomaga i automatyzuje procesy zwi\u0105zane z wytwarzaniem oprogramowania. Przedstawi\u0142em Ci kluczowe koncepcje, ale najwa\u017cniejsza z nich to: <strong>utrzymanie i tworzenie<\/strong> aplikacji jest <strong>jedn\u0105 ca\u0142o\u015bci\u0105<\/strong>, za kt\u00f3r\u0105 <strong>odpowiada ca\u0142y zesp\u00f3\u0142<\/strong>. Opisane narz\u0119dzia wspomagaj\u0105 ten proces.&nbsp;<\/p>\n\n\n\n<p>Nie wdra\u017caj wszystkiego od razu, r\u00f3b to krokami. Ma\u0142y projekt na pewno nie potrzebuje Kubernetesa, MVP nie potrzebuje rozbudowanego GitFlow z CI\/CD. Zauwa\u017cysz, \u017ce wraz z rozwojem Twojego rozwi\u0105zania, kolejne elementy zostan\u0105 naturalnymi krokami rozwoju.&nbsp;<\/p>\n\n\n\n<p>Dzia\u0142aj\u0105ca aplikacja to nie jest tylko kod, ale te\u017c zapewnienie reakcji na zmiany i unikanie awarii. Ca\u0142y zesp\u00f3\u0142 odpowiada za restauracj\u0119, nie tylko kierownik!&nbsp;<\/p>\n\n\n\n<p>W kolejnym rozdziale dowiesz si\u0119 wi\u0119cej o procesie testowania aplikacji i weryfikacji jako\u015bci, kt\u00f3ry zosta\u0142 wspomniany przy okazji CI\/CD.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"materialy-11\">Materia\u0142y<\/h2>\n\n\n\n<p>Materia\u0142y do samodzielnej nauki zwi\u0105zane z tym tematem:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.freecodecamp.org\/news\/guide-to-git-github-for-beginners-and-experienced-devs\/\" data-type=\"link\" data-id=\"https:\/\/www.freecodecamp.org\/news\/guide-to-git-github-for-beginners-and-experienced-devs\/\">Jak u\u017cywa\u0107 Git oraz GitHub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.github.com\/en\/desktop\/overview\/creating-your-first-repository-using-github-desktop\" data-type=\"link\" data-id=\"https:\/\/docs.github.com\/en\/desktop\/overview\/creating-your-first-repository-using-github-desktop\">Jak u\u017cywa\u0107 GitHub Desktop<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/graphite.com\/guides\/git-flow\" data-type=\"link\" data-id=\"https:\/\/graphite.com\/guides\/git-flow\">Git Flow workflow<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/12factor.net\/\" data-type=\"link\" data-id=\"https:\/\/12factor.net\/\">Metodyka 12 czynnik\u00f3w (12-factor app)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/dev.to\/574n13y\/networking-concepts-for-devops-and-cloud-engineers-fd3\" data-type=\"link\" data-id=\"https:\/\/dev.to\/574n13y\/networking-concepts-for-devops-and-cloud-engineers-fd3\">Podstawowe poj\u0119cia sieciowe<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.geeksforgeeks.org\/system-design\/caching-system-design-concept-for-beginners\/\" data-type=\"link\" data-id=\"https:\/\/www.geeksforgeeks.org\/system-design\/caching-system-design-concept-for-beginners\/\">Cache\u2019owanie w system design<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudzero.com\/blog\/horizontal-vs-vertical-scaling\/\" data-type=\"link\" data-id=\"https:\/\/www.cloudzero.com\/blog\/horizontal-vs-vertical-scaling\/\">Skalowanie poziome vs pionowe<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.cloudzero.com\/blog\/devops-monitoring-tools\/\" data-type=\"link\" data-id=\"https:\/\/www.cloudzero.com\/blog\/devops-monitoring-tools\/\">Monitoring w DevOps \u2013 czym jest i jak dzia\u0142a<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.zensoftware.cloud\/articles\/best-practices-for-cloud-backup-and-disaster-recovery-in-a-remote-first-world\" data-type=\"link\" data-id=\"https:\/\/www.zensoftware.cloud\/articles\/best-practices-for-cloud-backup-and-disaster-recovery-in-a-remote-first-world\">Najlepsze praktyki: backup w chmurze i Disaster Recovery<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/umbraco.com\/knowledge-base\/deployment\/\" data-type=\"link\" data-id=\"https:\/\/umbraco.com\/knowledge-base\/deployment\/\">Co to jest deployment?<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.freecodecamp.org\/news\/infrastructure-as-code-basics\/\" data-type=\"link\" data-id=\"https:\/\/www.freecodecamp.org\/news\/infrastructure-as-code-basics\/\">Czym jest Infrastructure as Code<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.atlassian.com\/devops\" data-type=\"link\" data-id=\"https:\/\/www.atlassian.com\/devops\">DevOps<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/resources\/articles\/pipeline\" data-type=\"link\" data-id=\"https:\/\/github.com\/resources\/articles\/pipeline\">Pipeline DevOps<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.ibm.com\/think\/topics\/ci-cd\" data-type=\"link\" data-id=\"https:\/\/www.ibm.com\/think\/topics\/ci-cd\">Czym jest CI\/CD<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/sidgs.com\/ai-in-continuous-delivery-deployment-a-game-changer-for-devops\/\" data-type=\"link\" data-id=\"https:\/\/sidgs.com\/ai-in-continuous-delivery-deployment-a-game-changer-for-devops\/\">Wykorzystanie AI do automatyzacji CI\/CD v.1<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.blog\/ai-and-ml\/generative-ai\/continuous-ai-in-practice-what-developers-can-automate-today-with-agentic-ci\/\" data-type=\"link\" data-id=\"https:\/\/github.blog\/ai-and-ml\/generative-ai\/continuous-ai-in-practice-what-developers-can-automate-today-with-agentic-ci\/\">Wykorzystanie AI do automatyzacji CI\/CD v.<\/a>2<\/li>\n\n\n\n<li><a href=\"https:\/\/www.geeksforgeeks.org\/devops\/what-is-containerisation\/\" data-type=\"link\" data-id=\"https:\/\/www.geeksforgeeks.org\/devops\/what-is-containerisation\/\">Konteneryzacja w DevOps<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/baaraku.io\/the-benefits-of-using-containers-in-devops\/\" data-type=\"link\" data-id=\"https:\/\/baaraku.io\/the-benefits-of-using-containers-in-devops\/\">Zalety konteneryzacji<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.tigera.io\/learn\/guides\/container-security-best-practices\/\" data-type=\"link\" data-id=\"https:\/\/www.tigera.io\/learn\/guides\/container-security-best-practices\/\">Bezpiecze\u0144stwo kontener\u00f3w<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Learn_web_development\/Howto\/Web_mechanics\/What_is_a_web_server\" data-type=\"link\" data-id=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Learn_web_development\/Howto\/Web_mechanics\/What_is_a_web_server\">Serwery WWW (WEB serwery)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=xj_GjnD4uyI\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=xj_GjnD4uyI\">Podstawy sieci komputerowych<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=Cy2ZJOBgk84&amp;t=342s\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=Cy2ZJOBgk84&amp;t=342s\">HTTP Caching<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=zG1cM9VSINg&amp;t=2s\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=zG1cM9VSINg&amp;t=2s\">Czym jest DevOps<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=AknbizcLq4w\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=AknbizcLq4w\">Czym jest CI\/CD<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=pg19Z8LL06w\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=pg19Z8LL06w\">Docker Crash Course<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=POPP2WTJ8es\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=POPP2WTJ8es\">Czym jest Infrastructure as Code<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=AWVTKBUnoIg&amp;t=72s\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=AWVTKBUnoIg&amp;t=72s\">Top 5 najcz\u0119\u015bciej stosowanych strategii wdra\u017cania (deployment)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=rIrNIzy6U_g\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=rIrNIzy6U_g\">G\u0142\u00f3wne koncepcje Dockera<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=bJ9NnLLMQ78\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=bJ9NnLLMQ78\">Jak dzia\u0142a CDN<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=dvRFHG2-uYs\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/watch?v=dvRFHG2-uYs\">Skalowanie pionowe vs skalowanie poziome<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>W poprzednich rozdzia\u0142ach dowiedzia\u0142e\u015b si\u0119, jak przechowywa\u0107 dane oraz jakie s\u0105 cechy dobrej aplikacji internetowej. Kolejn\u0105 istotn\u0105 cz\u0119\u015bci\u0105 procesu wytwarzania oprogramowania jest DevOps &#8211; Dyrygent cyfrowej kuchni. Posiadasz ju\u017c dzia\u0142aj\u0105c\u0105 aplikacj\u0119, pewne MVP, kt\u00f3re ci\u0105gle rozwijasz. Dodawanie kolejnych element\u00f3w mo\u017ce okaza\u0107 si\u0119 problematyczne &#8211; szczeg\u00f3lnie kiedy w gr\u0119 wchodzi praca zespo\u0142owa. DevOps okre\u015bla jak poprawnie [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":415,"menu_order":8,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-494","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages\/494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/comments?post=494"}],"version-history":[{"count":4,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages\/494\/revisions"}],"predecessor-version":[{"id":807,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages\/494\/revisions\/807"}],"up":[{"embeddable":true,"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/pages\/415"}],"wp:attachment":[{"href":"https:\/\/nuplo.org\/pl\/wp-json\/wp\/v2\/media?parent=494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}