{"id":33504,"date":"2019-10-31T21:52:58","date_gmt":"2019-10-31T18:52:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom\/"},"modified":"2019-10-31T21:52:58","modified_gmt":"2019-10-31T18:52:58","slug":"rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom","title":{"rendered":"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/2f9db2f057c4bcb3f2e57a484dd30c8c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Tworzenie pierwszego \u0142a\u0144cucha DevOps w pi\u0119ciu krokach dla nowicjuszy.<\/em><\/p>\n<p><\/p>\n<p>DevOps sta\u0142 si\u0119 panaceum dla zbyt wolnych, rozproszonych oraz innych problematycznych proces\u00f3w rozwoju. Ale potrzebna jest minimalna wiedza na temat DevOps. Om\u00f3wimy tu takie poj\u0119cia jak \u0142a\u0144cuch DevOps oraz jak go stworzy\u0107 w pi\u0119ciu krokach. To nie jest pe\u0142ny przewodnik, a jedynie \"ryba\", kt\u00f3r\u0105 mo\u017cna rozwija\u0107. Zacznijmy od historii.<\/p>\n<p><\/p>\n<h3 id=\"moe-znakomstvo-s-devops\">Moje pierwsze do\u015bwiadczenia z DevOps<\/h3>\n<p><\/p>\n<p>Kiedy\u015b pracowa\u0142em z chmurami w Citi Group i rozwija\u0142em aplikacj\u0119 IaaS, aby zarz\u0105dza\u0107 infrastruktur\u0105 chmurow\u0105 Citi, ale zawsze ciekawi\u0142o mnie, jak mo\u017cna zoptymalizowa\u0107 \u0142a\u0144cuch rozwoju i poprawi\u0107 kultur\u0119 w\u015br\u00f3d programist\u00f3w. Greg Lavender, nasz dyrektor techniczny ds. architektury chmurowej i infrastruktury, poleci\u0142 mi ksi\u0105\u017ck\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/dp\/B078Y98RG8\/\">Projekt \"Feniks\"<\/a><\/noindex>. Wyja\u015bnia ona doskonale zasady DevOps, a przy tym czyta si\u0119 jak powie\u015b\u0107.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>W tabeli po drugiej stronie pokazano, jak cz\u0119sto firmy wypuszczaj\u0105 nowe wersje:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bf\/1e\/2_\/bf1e2_l0g8wnb5nojb1n5ruwlsi.png\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/a723283e54f7614b6b92eab78509985d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Jak Amazon, Google i Netflix s\u0105 w stanie wypuszcza\u0107 tak wiele? A to proste: zrozumieli, jak stworzy\u0107 niemal idealny \u0142a\u0144cuch DevOps.<\/p>\n<p><\/p>\n<p>W Citi wszystko wygl\u0105da\u0142o zupe\u0142nie inaczej, dop\u00f3ki nie przeszli\u015bmy na DevOps. Wtedy moja dru\u017cyna mia\u0142a r\u00f3\u017cne \u015brodowiska, ale wdro\u017cenie na serwerze rozwojowym odbywa\u0142o si\u0119 r\u0119cznie. Wszyscy programi\u015bci mieli dost\u0119p tylko do jednego serwera rozwojowego opartego na IBM WebSphere Application Server Community Edition. Podczas jednoczesnej pr\u00f3by wdro\u017cenia serwer \"siada\u0142\", a my za ka\u017cdym razem musieli\u015bmy \"bolesnie\" si\u0119 dogadywa\u0107. Mieli\u015bmy te\u017c niewystarczaj\u0105ce pokrycie kodu testami, czasoch\u0142onny proces r\u0119cznego wdro\u017cenia i brak mo\u017cliwo\u015bci \u015bledzenia wdro\u017cenia kodu zwi\u0105zanego z jakim\u015b zadaniem lub wymaganiem klienta.<\/p>\n<p><\/p>\n<p>By\u0142o jasne, \u017ce trzeba co\u015b pilnie zrobi\u0107 i znalaz\u0142em koleg\u0119 o podobnych pogl\u0105dach. Postanowili\u015bmy wsp\u00f3lnie stworzy\u0107 pierwszy \u0142a\u0144cuch DevOps \u2014 on skonfigurowa\u0142 maszyn\u0119 wirtualn\u0105 i serwer aplikacji Tomcat, a ja zaj\u0105\u0142em si\u0119 Jenkins, integracj\u0105 z Atlassian Jira i BitBucket oraz pokryciem kodu testami. Projekt odni\u00f3s\u0142 sukces: ca\u0142kowicie zautomatyzowali\u015bmy \u0142a\u0144cuch rozwoju, osi\u0105gn\u0119li\u015bmy niemal 100% nieprzerwanej pracy serwera rozwojowego, mogli\u015bmy \u015bledzi\u0107 i poprawia\u0107 pokrycie kodu testami, a ga\u0142\u0105\u017a Git mog\u0142a by\u0107 powi\u0105zana z wdro\u017ceniem i zadaniem Jira. A niemal wszystkie narz\u0119dzia, kt\u00f3rymi zbudowali\u015bmy \u0142a\u0144cuch DevOps, by\u0142y oparte na otwartym kodzie \u017ar\u00f3d\u0142owym.<\/p>\n<p><\/p>\n<p>W rzeczywisto\u015bci, proces by\u0142 uproszczony, poniewa\u017c nawet nie stosowali\u015bmy zaawansowanych konfiguracji przy u\u017cyciu Jenkinsa czy Ansible. Ale wszystko si\u0119 uda\u0142o. By\u0107 mo\u017ce to efekt zasady <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Pareto_principle\">Pareto<\/a><\/noindex> (znana tak\u017ce jako zasada 80\/20).<\/p>\n<p><\/p>\n<h3 id=\"kratkoe-opisanie-cepochki-devops-i-cicd\">Kr\u00f3tki opis \u0142a\u0144cucha DevOps i CI\/CD<\/h3>\n<p><\/p>\n<p>DevOps ma r\u00f3\u017cne definicje. DevOps, podobnie jak Agile, obejmuje r\u00f3\u017cne dyscypliny. Jednak wi\u0119kszo\u015b\u0107 zgodzi si\u0119 z nast\u0119puj\u0105c\u0105 definicj\u0105: DevOps to metoda, czyli cykl \u017cycia, rozwoju oprogramowania, kt\u00f3rej g\u0142\u00f3wn\u0105 zasad\u0105 jest tworzenie kultury, w kt\u00f3rej deweloperzy i inni pracownicy \"na tej samej fali\", r\u0119czna praca zostaje zautomatyzowana, ka\u017cdy zajmuje si\u0119 tym, w czym jest najlepszy, zwi\u0119ksza si\u0119 cz\u0119stotliwo\u015b\u0107 dostaw, ro\u015bnie wydajno\u015b\u0107, a elastyczno\u015b\u0107 wzrasta.<\/p>\n<p><\/p>\n<p>I chocia\u017c same narz\u0119dzia nie wystarczaj\u0105 do stworzenia \u015brodowiska DevOps, s\u0105 one niezb\u0119dne. Najwa\u017cniejszym z nich jest ci\u0105g\u0142a integracja i ci\u0105g\u0142e dostarczanie (CI\/CD). W \u0142a\u0144cuchu dla ka\u017cdego \u015brodowiska istniej\u0105 r\u00f3\u017cne etapy (na przyk\u0142ad, DEV (rozw\u00f3j), INT (integracja), TST (testowanie), QA (kontrola jako\u015bci), UAT (testowanie akceptacyjne przez u\u017cytkownik\u00f3w), STG (preparacja), PROD (u\u017cytkowanie)), zadania r\u0119czne s\u0105 zautomatyzowane, deweloperzy mog\u0105 pisa\u0107 jako\u015bciowy kod, dostarcza\u0107 go i \u0142atwo si\u0119 dostosowywa\u0107.<\/p>\n<p><\/p>\n<p>Niniejsza notka opisuje, jak w pi\u0119ciu krokach stworzy\u0107 \u0142a\u0144cuch DevOps, jak pokazano na obrazku poni\u017cej, przy u\u017cyciu narz\u0119dzi z otwartym kodem \u017ar\u00f3d\u0142owym.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/da\/zq\/qo\/dazqqoyxn3vv-o6p9crpsm9m_eu.jpeg\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/da2a6d8ed039f0b8e1ea8e1ba562696d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Przechodzimy do rzeczy.<\/p>\n<p><\/p>\n<h3 id=\"shag-1-platforma-cicd\">Krok 1: Platforma CI\/CD<\/h3>\n<p><\/p>\n<p>Na pocz\u0105tek potrzebujesz narz\u0119dzia CI\/CD. Jenkins to otwarte narz\u0119dzie CI\/CD napisane w Javie na licencji MIT, kt\u00f3re rozpocz\u0119\u0142o popularyzacj\u0119 ruchu DevOps i kt\u00f3re de facto sta\u0142o si\u0119 standardem dla CI\/CD.<\/p>\n<p><\/p>\n<p>Czym jest Jenkins? Wyobra\u017a sobie, \u017ce masz magiczny pilot do r\u00f3\u017cnych us\u0142ug i narz\u0119dzi. Samo narz\u0119dzie CI\/CD, takie jak Jenkins, jest bezu\u017cyteczne, ale z r\u00f3\u017cnymi narz\u0119dziami i us\u0142ugami staje si\u0119 wszechmocne.<\/p>\n<p><\/p>\n<p>Opr\u00f3cz Jenkinsa istnieje wiele innych otwartych narz\u0119dzi, wybierz jakiekolwiek. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/fb\/ov\/dd\/fbovdd2kb_e8jkj1atm1ycuw3so.png\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/2bbe6af719b90da0eb0d367aae66d779.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Oto jak wygl\u0105da proces DevOps z narz\u0119dziem CI\/CD<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/es\/-3\/dj\/es-3djmmligdmtcuvicigopzt8e.jpeg\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/2410013c9e6030596a59f3ed7ae3a7e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Masz na localhost narz\u0119dzie CI\/CD, ale na razie niewiele mo\u017cna z tym zrobi\u0107. Przechodzimy do nast\u0119pnego kroku.<\/p>\n<p><\/p>\n<h3 id=\"shag-2-upravlenie-versiyami\">Krok 2: zarz\u0105dzanie wersjami<\/h3>\n<p><\/p>\n<p>Najlepszym (a mo\u017ce najprostszym) sposobem na sprawdzenie mo\u017cliwo\u015bci narz\u0119dzia CI\/CD jest zintegrowanie go z narz\u0119dziem do zarz\u0105dzania wersjami (source control management, SCM). Po co potrzebne jest zarz\u0105dzanie wersjami? Za\u0142\u00f3\u017cmy, \u017ce tworzysz aplikacj\u0119. Piszesz j\u0105 w Java, Pythonie, C++, Go, Rubym, JavaScripcie lub w jakimkolwiek innym j\u0119zyku, kt\u00f3rych jest mn\u00f3stwo. To, co piszesz, nazywa si\u0119 kodem \u017ar\u00f3d\u0142owym. Na pocz\u0105tku, zw\u0142aszcza je\u015bli pracujesz samodzielnie, mo\u017cesz zapisywa\u0107 wszystko w lokalnym katalogu. Ale kiedy projekt si\u0119 rozwija i do\u0142\u0105cza do niego wi\u0119cej os\u00f3b, potrzebujesz sposobu na dzielenie si\u0119 zmianami w kodzie, unikaj\u0105c jednocze\u015bnie konflikt\u00f3w podczas scalania zmian. A tak\u017ce musisz mie\u0107 spos\u00f3b na odzyskiwanie wcze\u015bniejszych wersji bez korzystania z kopii zapasowych i stosowania metody kopiuj-wklej dla plik\u00f3w z kodem.<\/p>\n<p><\/p>\n<p>I tutaj nie ob\u0119dzie si\u0119 bez SCM. SCM przechowuje kod w repozytoriach, zarz\u0105dza jego wersjami i koordynuje go w\u015br\u00f3d programist\u00f3w.<\/p>\n<p><\/p>\n<p>Jest sporo narz\u0119dzi SCM, ale de facto standardem sta\u0142 si\u0119 Git. Zalecam korzystanie z niego, ale s\u0105 te\u017c inne opcje.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/37555a476c27f7066e5648b9e9e4d90b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oto jak wygl\u0105da pipeline DevOps po dodaniu SCM.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/am\/4o\/39\/am4o39ooera5tweytt3uyh80wlu.jpeg\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/040819b00dc608a9131856dd6a7d4a19.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Narz\u0119dzie CI\/CD mo\u017ce automatyzowa\u0107 \u0142adowanie i pobieranie kodu \u017ar\u00f3d\u0142owego oraz wsp\u00f3\u0142prac\u0119 w zespole. Nie\u017ale? Ale jak teraz zamieni\u0107 to na dzia\u0142aj\u0105c\u0105 aplikacj\u0119, kochan\u0105 przez miliardy u\u017cytkownik\u00f3w?<\/p>\n<p><\/p>\n<h3 id=\"shag-3-instrument-avtomatizacii-sborki\">Krok 3: narz\u0119dzie automatyzacji budowy<\/h3>\n<p><\/p>\n<p>Wszystko idzie zgodnie z planem. Mo\u017cesz przesy\u0142a\u0107 kod i rejestrowa\u0107 zmiany w systemie kontroli wersji, a tak\u017ce zaprosi\u0107 znajomych do wsp\u00f3\u0142pracy. Ale na razie nie masz aplikacji. Aby to by\u0142o web-aplikacja, trzeba j\u0105 skompilowa\u0107 i umie\u015bci\u0107 w paczce do dostarczenia lub uruchomi\u0107 jako plik wykonywalny. (J\u0119zyk programowania interpretowany, jak JavaScript czy PHP, nie wymaga kompilacji.)<\/p>\n<p><\/p>\n<p>U\u017cyj narz\u0119dzia automatyzacji budowy. Niezale\u017cnie od tego, jakie narz\u0119dzie wybierzesz, b\u0119dzie ono zbiera\u0142o kod w odpowiednim formacie i automatyzowa\u0142o czyszczenie, kompilacj\u0119, testowanie i dostarczanie. Narz\u0119dzia budowy r\u00f3\u017cni\u0105 si\u0119 w zale\u017cno\u015bci od j\u0119zyka, ale zazwyczaj u\u017cywane s\u0105 nast\u0119puj\u0105ce popularne opcje z otwartym kodem.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/cc6e958a82ac0676429da6c48e66910f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Doskonale! Teraz wstawimy pliki konfiguracyjne narz\u0119dzia automatyzacji budowy do systemu kontroli wersji, aby narz\u0119dzie CI\/CD mog\u0142o je zebra\u0107.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/gl\/t1\/ii\/glt1ii73wdg2roq5fus-fzd0ury.jpeg\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/bba539d128425e7e3ddacdc6028d3604.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Wygl\u0105da na to, \u017ce wszystko jest w porz\u0105dku. Ale dok\u0105d teraz to wszystko wdro\u017cy\u0107?<\/p>\n<p><\/p>\n<h3 id=\"shag-4-server-veb-prilozheniy\">Krok 4: serwer aplikacji webowych<\/h3>\n<p><\/p>\n<p>Zatem masz spakowany plik, kt\u00f3ry mo\u017cna wykona\u0107 lub wdro\u017cy\u0107. Aby aplikacja naprawd\u0119 by\u0142a u\u017cyteczna, musi mie\u0107 jaki\u015b serwis lub interfejs, ale musisz to wszystko gdzie\u015b umie\u015bci\u0107.<\/p>\n<p><\/p>\n<p>Aplikacj\u0119 internetow\u0105 mo\u017cna umie\u015bci\u0107 na serwerze aplikacji. Serwer aplikacji zapewnia \u015brodowisko, w kt\u00f3rym mo\u017cna wykona\u0107 logik\u0119 programow\u0105 z pakietu, zrealizowa\u0107 renderowanie interfejsu i otworzy\u0107 us\u0142ugi internetowe przez gniazdo. Potrzebujesz serwera HTTP i kilku innych \u015brodowisk (na przyk\u0142ad maszyny wirtualnej), aby zainstalowa\u0107 serwer aplikacji. Na razie wyobra\u017amy sobie, \u017ce znasz si\u0119 na tym w trakcie dzia\u0142ania (cho\u0107 o kontenerach opowiem poni\u017cej).<\/p>\n<p><\/p>\n<p>Istnieje kilka otwartych serwer\u00f3w aplikacji webowych.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/v7\/-q\/tq\/v7-qtqzlpp5nvxlqz1oshw4mw1i.png\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/7802afe041a9d56c20ddbe2885b5cf37.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Ju\u017c mamy prawie dzia\u0142aj\u0105cy \u0142a\u0144cuch DevOps. \u015awietna robota!<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/lf\/wm\/rx\/lfwmrx3grlcbwb5s_olj33npn7o.jpeg\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/3d1e524b63fecebf4973cc34a40c160d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>W zasadzie tutaj mo\u017cna si\u0119 zatrzyma\u0107, dalej poradzisz sobie sam, ale warto jeszcze wspomnie\u0107 o jako\u015bci kodu.<\/p>\n<p><\/p>\n<h3 id=\"shag-5-testovoe-pokrytie\">Krok 5: Pokrycie Testowe<\/h3>\n<p><\/p>\n<p>Testowanie zabiera du\u017co czasu i wysi\u0142ku, ale lepiej natychmiast znale\u017a\u0107 b\u0142\u0119dy i poprawi\u0107 kod, aby zadowoli\u0107 ko\u0144cowych u\u017cytkownik\u00f3w. Istnieje wiele otwartych narz\u0119dzi, kt\u00f3re nie tylko przetestuj\u0105 kod, ale tak\u017ce doradz\u0105, jak go poprawi\u0107. Wi\u0119kszo\u015b\u0107 narz\u0119dzi CI\/CD mo\u017ce integrowa\u0107 si\u0119 z tymi narz\u0119dziami i automatyzowa\u0107 proces.<\/p>\n<p><\/p>\n<p>Testowanie dzieli si\u0119 na dwie cz\u0119\u015bci: ramy testowe do pisania i wykonywania test\u00f3w oraz narz\u0119dzia z podpowiedziami dotycz\u0105cymi poprawy jako\u015bci kodu.<\/p>\n<p><\/p>\n<h3 id=\"freymvorki-testirovaniya\">Ramy testowe<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/cu\/4l\/pn\/cu4lpnpdqa7yd9f5zwsxrrlbylg.png\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/c17426a30a4f140be87489d2c8b0d0b9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Narz\u0119dzia z podpowiedziami dotycz\u0105cymi jako\u015bci<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ab\/g_\/oh\/abg_ohfxhtbprzhcicxos3jx4yg.png\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/bc65784b8bf5ccaaeef96a0c6ee4422e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Wi\u0119kszo\u015b\u0107 tych narz\u0119dzi i ram zosta\u0142a napisana dla Java, Python i JavaScript, poniewa\u017c C++ i C# s\u0105 proprietary (cho\u0107 GCC ma otwarty kod \u017ar\u00f3d\u0142owy).<\/p>\n<p><\/p>\n<p>Zastosowali\u015bmy narz\u0119dzia do pokrycia testowego i teraz pipeline DevOps powinien wygl\u0105da\u0107 jak na rysunku na pocz\u0105tku przewodnika.<\/p>\n<p><\/p>\n<h2 id=\"dopolnitelnye-shagi\">Dodatkowe kroki<\/h2>\n<p><\/p>\n<h3 id=\"konteynery\">Kontenery<\/h3>\n<p><\/p>\n<p>Jak ju\u017c wspomnia\u0142em, serwer aplikacji mo\u017cna umie\u015bci\u0107 na maszynie wirtualnej lub serwerze, ale kontenery s\u0105 bardziej popularne.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/resources\/what-are-linux-containers\">Czym s\u0105 kontenery<\/a><\/noindex>? \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430, \u0447\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0431\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c, \u043d\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442.<\/p>\n<p><\/p>\n<p>Dla kontener\u00f3w zwykle wybiera si\u0119 Docker i Kubernetes, chocia\u017c s\u0105 te\u017c inne opcje.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/6n\/wc\/rc\/6nwcrcuhk9swwjxdddudr1cqpzc.png\"><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/8749b7044102ff7f23f2c970d6939246.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Przeczytaj artyku\u0142y o Dockerze i Kubernetesie na <noindex><a rel=\"nofollow\" href=\"http:\/\/opensource.com\/\">Opensource.com<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/resources\/what-docker\">Czym jest Docker?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/business\/15\/1\/introduction-docker\">Wprowadzenie do Dockera<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/resources\/what-is-kubernetes\">Czym jest Kubernetes?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/17\/11\/kubernetes-lightning-talk\">Kubernetes od podstaw<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"instrumenty-avtomatizacii-promezhutochnogo-po\">Narz\u0119dzia automatyzacji po\u015bredniego oprogramowania<\/h3>\n<p><\/p>\n<p>Nasz \u0142a\u0144cuch DevOps koncentruje si\u0119 na wsp\u00f3lnej budowie i dostarczaniu aplikacji, ale z narz\u0119dziami DevOps mo\u017cna robi\u0107 r\u00f3wnie\u017c inne ciekawe rzeczy. Na przyk\u0142ad, mo\u017cna wykorzysta\u0107 narz\u0119dzia \u201einfrastruktura jako kod\u201d (IaC), kt\u00f3re nazywane s\u0105 r\u00f3wnie\u017c narz\u0119dziami automatyzacji oprogramowania po\u015bredniego. Te narz\u0119dzia pomagaj\u0105 zautomatyzowa\u0107 instalacj\u0119, zarz\u0105dzanie i inne zadania zwi\u0105zane z oprogramowaniem po\u015brednim. Na przyk\u0142ad, narz\u0119dzie automatyzacji mo\u017ce pobiera\u0107 aplikacje (serwer aplikacji webowych, baz\u0119 danych, narz\u0119dzia monitoruj\u0105ce) z odpowiednimi konfiguracjami i wdra\u017ca\u0107 je na serwerze aplikacji.<\/p>\n<p><\/p>\n<p>Oto kilka przyk\u0142ad\u00f3w otwartych narz\u0119dzi do automatyzacji oprogramowania po\u015bredniego:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Poradnik dla pocz\u0105tkuj\u0105cych: tworzenie \u0142a\u0144cuch\u00f3w DevOps za pomoc\u0105 narz\u0119dzi open source\" src=\"\/wp-content\/uploads\/2019\/05\/23bb3259f336a3f0ebf11ab4aa5471ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Szczeg\u00f3\u0142y w artyku\u0142ach na <noindex><a rel=\"nofollow\" href=\"http:\/\/opensource.com\/\">Opensource.com<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/2\/quickstart-guide-ansible\">Przewodnik po rozpocz\u0119ciu pracy z Ansible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/1\/automating-deployment-strategies-ansible\">Strategie automatyzacji wdro\u017ce\u0144 z Ansible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/18\/12\/configuration-management-tools\">5 najlepszych narz\u0119dzi do zarz\u0105dzania konfiguracj\u0105<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"i-chto-teper\">I co teraz?<\/h3>\n<p><\/p>\n<p>To tylko wierzcho\u0142ek g\u00f3ry lodowej. \u0141a\u0144cuch DevOps mo\u017ce zrobi\u0107 znacznie wi\u0119cej. Zacznij od narz\u0119dzia CI\/CD i dowiedz si\u0119, co jeszcze mo\u017cna zautomatyzowa\u0107, aby u\u0142atwi\u0107 sobie prac\u0119. Nie zapomnij o <noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/alternatives\/slack\">otwartych narz\u0119dziach komunikacji<\/a><\/noindex> dla efektywnej wsp\u00f3\u0142pracy.<\/p>\n<p><\/p>\n<p>Oto kilka dobrych artyku\u0142\u00f3w o DevOps dla pocz\u0105tkuj\u0105cych:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/resources\/devops\">Czym jest DevOps<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/2\/master-devops-engineer\">5 umiej\u0119tno\u015bci dewelopera DevOps<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/18\/11\/how-non-engineer-got-devops\">DevOps dla wszystkich<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/1\/getting-started-predictive-analytics-devops\">Wprowadzenie do analityki predykcyjnej w DevOps<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Mo\u017cna tak\u017ce integrowa\u0107 DevOps z otwartymi narz\u0119dziami dla agile:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/18\/10\/what-agile\">Czym jest agile?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/2\/steps-agile-developer\">4 kroki do opanowania agile<\/a><\/noindex><\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/451508\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 DevOps \u0437\u0430 \u043f\u044f\u0442\u044c \u0448\u0430\u0433\u043e\u0432 \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432. DevOps \u0441\u0442\u0430\u043b \u043f\u0430\u043d\u0430\u0446\u0435\u0435\u0439 \u0434\u043b\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445, \u0440\u0430\u0437\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041d\u043e \u043d\u0443\u0436\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u0432 DevOps. \u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f, \u043a\u0430\u043a \u0446\u0435\u043f\u043e\u0447\u043a\u0430 DevOps \u0438 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0435 \u0437\u0430 \u043f\u044f\u0442\u044c \u0448\u0430\u0433\u043e\u0432. \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u201c\u0440\u044b\u0431\u0430\u201d, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25204,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33504","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.1.1 - aioseo.com -->\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\/pl\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0447\u0430\u0439\u043d\u0438\u043a\u043e\u0432: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u0435\u043a DevOps \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom\" \/>\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:52:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:52:58+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\udd47Przewodnik dla opornych: tworzenie \u0142a\u0144cuch\u00f3w DevOps z wykorzystaniem narz\u0119dzi open source | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u0447\u0430\u0439\u043d\u0438\u043a\u043e\u0432: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u0435\u043a DevOps \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom","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:52:58+00:00","article:modified_time":"2019-10-31T18:52:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33504","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 15:33:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:39:23","updated":"2026-01-21 15:33:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/33504","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=33504"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/33504\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/25204"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=33504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=33504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=33504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}