{"id":121,"date":"2025-10-02T00:00:00","date_gmt":"2025-10-01T22:00:00","guid":{"rendered":"https:\/\/helloblog.io\/pl\/wdrozenia-wordpress-bez-przestojow-dzieki-trellis\/"},"modified":"2026-01-20T06:32:50","modified_gmt":"2026-01-20T05:32:50","slug":"wdrozenia-wordpress-bez-przestojow-dzieki-trellis","status":"publish","type":"post","link":"https:\/\/helloblog.io\/pl\/wdrozenia-wordpress-bez-przestojow-dzieki-trellis\/","title":{"rendered":"Wdro\u017cenia WordPress bez przestoj\u00f3w dzi\u0119ki Trellis: atomic deploy w praktyce"},"content":{"rendered":"\n<p>W ekosystemie WordPressa wci\u0105\u017c zaskakuj\u0105co cz\u0119sto wdro\u017cenie oznacza nadpisywanie plik\u00f3w na produkcji: przez FTP, przez <code>rsync<\/code> albo przez mechanizmy hostingu dzia\u0142aj\u0105ce podobnie \u201ew miejscu\u201d. To dzia\u0142a\u2026 dop\u00f3ki nie trafisz na moment, w kt\u00f3rym u\u017cytkownik dostanie mieszank\u0119 starych i nowych plik\u00f3w, a Ty ogl\u0105dasz b\u0142\u0119dy w logach.<\/p>\n\n\n\n<p>Trellis (projekt od Roots) podchodzi do tematu jak nowoczesne aplikacje webowe: wdro\u017cenie ma by\u0107 <strong>bez przestoju (zero downtime)<\/strong>, a prze\u0142\u0105czenie wersji ma zaj\u015b\u0107 atomowo. Co wa\u017cne, nie musisz migrowa\u0107 ca\u0142ego workflow do Trellisa. Sporo zespo\u0142\u00f3w u\u017cywa go wy\u0142\u0105cznie jako narz\u0119dzia do wdro\u017ce\u0144 (szczeg\u00f3lnie dla projekt\u00f3w opartych o Bedrock), a lokalnie pracuje w Valet, Lando, DDEV czy czymkolwiek innym.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co w praktyce znaczy \u201ezero downtime\u201d przy deployu?<\/h2>\n\n\n\n<p>Zero downtime deployments to taki spos\u00f3b publikacji nowej wersji, w kt\u00f3rym serwis pozostaje dost\u0119pny i funkcjonalny przez ca\u0142y proces. Klucz jest prosty: nie podmieniasz plik\u00f3w w katalogu, z kt\u00f3rego serwuje web server. Zamiast tego przygotowujesz kompletn\u0105, now\u0105 wersj\u0119 w izolacji i dopiero na ko\u0144cu prze\u0142\u0105czasz ruch na nowy release.<\/p>\n\n\n\n<p>Dzi\u0119ki temu nie ma \u201eokna\u201d, w kt\u00f3rym WordPress pr\u00f3buje \u0142adowa\u0107 np. nowy plik PHP i stary plik z funkcjami, albo now\u0105 wersj\u0119 tematu i star\u0105 wersj\u0119 zale\u017cno\u015bci z <code>vendor\/<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dlaczego tradycyjne wdro\u017cenia WordPressa s\u0105 ryzykowne?<\/h2>\n\n\n\n<p>Najpopularniejsze podej\u015bcia maj\u0105 wsp\u00f3lny problem: aktualizuj\u0105 pliki <strong>w miejscu<\/strong>, gdy strona ju\u017c dzia\u0142a.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>FTP: r\u0119czne wrzucanie zmian i nadpisywanie plik\u00f3w. Wolne, podatne na pomy\u0142ki, a w trakcie uploadu u\u017cytkownicy mog\u0105 widzie\u0107 b\u0142\u0119dy.<\/li>\n\n\n<li>Synchronizacja plik\u00f3w (np. <code>rsync<\/code>): szybciej ni\u017c FTP, ale zasada ta sama \u2014 podmieniasz cz\u0119\u015b\u0107 plik\u00f3w, gdy reszta jeszcze jest stara.<\/li>\n\n\n<li>Deploy \u201ewtyczk\u0105\u201d od hostingu: wygodne, ale cz\u0119sto bez realnego rollbacku i nadal z aktualizacj\u0105 in-place.<\/li>\n\n<\/ul>\n\n\n\n<p>W ka\u017cdym z tych wariant\u00f3w konsekwencje s\u0105 podobne: chwilowe b\u0142\u0119dy 500, \u201eznikaj\u0105ce\u201d assety, niedopasowane klasy\/autoload, a w razie wpadki \u2014 stresuj\u0105cy powr\u00f3t do poprzedniego stanu, zwykle r\u0119czny.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak Trellis robi atomic deploy: katalogi wyda\u0144 i jeden symlink<\/h2>\n\n\n\n<p>Trellis stosuje <strong>atomic deployment<\/strong> (wdro\u017cenie atomowe): nowa wersja jest budowana jako kompletne, oddzielne wydanie, a prze\u0142\u0105czenie odbywa si\u0119 przez aktualizacj\u0119 jednego dowi\u0105zania symbolicznego. Dodatkowo wdro\u017cenia s\u0105 <strong>immutable<\/strong> (niezmienne): raz opublikowany release nie jest modyfikowany w miejscu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Struktura katalog\u00f3w po deployu<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/srv\/www\/example.com\/\n\u251c\u2500\u2500 current\/             # symlink do aktywnego wydania\n\u251c\u2500\u2500 releases\/            # wszystkie wdro\u017cone wydania\n\u2502   \u251c\u2500\u2500 20250930124530\/\n\u2502   \u251c\u2500\u2500 20250930083045\/\n\u2502   \u2514\u2500\u2500 20250930141622\/  # najnowsze\n\u251c\u2500\u2500 shared\/              # wsp\u00f3\u0142dzielone zasoby mi\u0119dzy wydaniami\n\u2502   \u2514\u2500\u2500 uploads\/\n\u2514\u2500\u2500 logs\/\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">\/srv\/www\/example.com\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> current\/<\/span><span style=\"color:#6A737D\">             # symlink do aktywnego wydania<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> releases\/<\/span><span style=\"color:#6A737D\">            # wszystkie wdro\u017cone wydania<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930124530\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930083045\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> 20250930141622\/<\/span><span style=\"color:#6A737D\">  # najnowsze<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u251c\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> shared\/<\/span><span style=\"color:#6A737D\">              # wsp\u00f3\u0142dzielone zasoby mi\u0119dzy wydaniami<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2502<\/span><span style=\"color:#9ECBFF\">   \u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> uploads\/<\/span><\/span>\n<span class=\"line\"><span style=\"color:#B392F0\">\u2514\u2500\u2500<\/span><span style=\"color:#9ECBFF\"> logs\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Web server (np. Nginx) ca\u0142y czas wskazuje na <code>current\/<\/code>. A <code>current\/<\/code> to tylko symlink do konkretnego katalogu w <code>releases\/<\/code>. Dzi\u0119ki temu zmiana wersji sprowadza si\u0119 do natychmiastowego prze\u0142\u0105czenia symlinka.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Co dzieje si\u0119 podczas <code>trellis deploy production<\/code><\/h3>\n\n\n\n<p>Pod spodem Trellis wykonuje seri\u0119 krok\u00f3w, kt\u00f3re razem tworz\u0105 nowe wydanie bez dotykania dzia\u0142aj\u0105cej wersji a\u017c do fina\u0142u:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>Initialize: przygotowanie struktury katalog\u00f3w i utworzenie nowego katalogu release (znacznik czasu).<\/li>\n\n\n<li>Update: pobranie najnowszego kodu z repozytorium Git do tymczasowego katalogu \u017ar\u00f3de\u0142, poza \u201e\u017cyw\u0105\u201d stron\u0105.<\/li>\n\n\n<li>Prepare: skopiowanie plik\u00f3w ze \u017ar\u00f3de\u0142 do nowego katalogu release.<\/li>\n\n\n<li>Build: uruchomienie <code>composer install<\/code> i pobranie zale\u017cno\u015bci PHP.<\/li>\n\n\n<li>Share: podlinkowanie wsp\u00f3\u0142dzielonych zasob\u00f3w (np. <code>uploads<\/code>) z <code>shared\/<\/code> do nowego release.<\/li>\n\n\n<li>Finalize: prze\u0142\u0105czenie <code>current<\/code> na nowy katalog release.<\/li>\n\n<\/ol>\n\n\n\n<p>Najwa\u017cniejszy efekt: w jednej chwili serwis dzia\u0142a na starym release, a w kolejnej \u2014 na nowym. Nie ma etapu po\u015bredniego, w kt\u00f3rym cz\u0119\u015b\u0107 plik\u00f3w jest \u201epo update\u201d, a cz\u0119\u015b\u0107 jeszcze nie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Baza danych: zero downtime dla kodu \u2260 automatyczne migracje<\/h2>\n\n\n\n<p>Atomic deploy \u015bwietnie rozwi\u0105zuje problem plik\u00f3w i zale\u017cno\u015bci, ale baza danych to osobny temat. Zgodnie z dokumentacj\u0105 Trellis: migracje schematu bazy nie s\u0105 cz\u0119\u015bci\u0105 standardowego deploya.<\/p>\n\n\n\n<p>Je\u017celi w projekcie u\u017cywasz Acorn, mo\u017cesz podej\u015b\u0107 do tego \u201epo laravelowemu\u201d i tworzy\u0107 migracje (Laravel migrations) dla WordPressa oraz uruchamia\u0107 je w ramach procesu wdro\u017cenia. To pozwala uporz\u0105dkowa\u0107 zmiany w DB, ale nadal wymaga \u015bwiadomego planowania kompatybilno\u015bci wstecznej (np. etapowego wprowadzania kolumn\/indeks\u00f3w).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rollback w Trellis: powr\u00f3t do poprzedniej wersji w sekund\u0119<\/h2>\n\n\n\n<p>Przy wdro\u017ceniach atomowych rollback przestaje by\u0107 dramatem. Poniewa\u017c ka\u017cdy release to kompletny, niezmienny zestaw plik\u00f3w, powr\u00f3t polega na prze\u0142\u0105czeniu <code>current<\/code> na wcze\u015bniejszy katalog.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#24292e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>trellis rollback production\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color:#24292e;color:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#B392F0\">trellis<\/span><span style=\"color:#9ECBFF\"> rollback<\/span><span style=\"color:#9ECBFF\"> production<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Domy\u015blnie na serwerze zostaje kilka ostatnich wyda\u0144 (Trellis trzyma pi\u0119\u0107 najnowszych), wi\u0119c zwykle masz pod r\u0119k\u0105 bezpieczn\u0105 wersj\u0119, do kt\u00f3rej mo\u017cna wr\u00f3ci\u0107 natychmiast.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hooki wdro\u017ceniowe: jak dopasowa\u0107 deploy do reali\u00f3w projektu<\/h2>\n\n\n\n<p>Trellis udost\u0119pnia hooki (punkty zaczepienia w procesie wdro\u017cenia), kt\u00f3re pozwalaj\u0105 dopi\u0105\u0107 zadania przed i po kluczowych etapach. Przyk\u0142adowo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li><code>deploy_build_before<\/code> \/ <code>deploy_build_after<\/code> \u2013 w\u0142asne kroki builda.<\/li>\n\n\n<li><code>deploy_finalize_before<\/code> \/ <code>deploy_finalize_after<\/code> \u2013 zadania tu\u017c przed prze\u0142\u0105czeniem i zaraz po nim.<\/li>\n\n\n<li>Hooki dla etap\u00f3w: initialize, update, prepare, build, share, finalize.<\/li>\n\n<\/ul>\n\n\n\n<p>To otwiera drog\u0119 do sensownych praktyk DevOpsowych nawet w klasycznych projektach WordPress: backup bazy przed wdro\u017ceniem, czyszczenie cache po prze\u0142\u0105czeniu release, powiadomienia, czy szybkie smoke testy (sprawdzenie, czy serwis odpowiada poprawnie po wdro\u017ceniu).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak zacz\u0105\u0107: minimalna \u015bcie\u017cka do deployu bez przestoj\u00f3w<\/h2>\n\n\n\n<p>Najprostszy scenariusz wygl\u0105da tak:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n\n<li>U\u0142\u00f3\u017c projekt w oparciu o <a href=\"https:\/\/roots.io\/bedrock\/\">Bedrock<\/a> (czytelniejsza struktura i zarz\u0105dzanie zale\u017cno\u015bciami).<\/li>\n\n\n<li>Dodaj <a href=\"https:\/\/roots.io\/trellis\/\">Trellis<\/a> i ustaw konfiguracj\u0119 wdro\u017ce\u0144.<\/li>\n\n\n<li>W <code>wordpress_sites.yml<\/code> wska\u017c repozytorium Git dla \u015brodowiska (np. production).<\/li>\n\n\n<li>Uruchom deploy poleceniem <code>trellis deploy production<\/code>.<\/li>\n\n<\/ol>\n\n\n\n<p>Pierwsze wdro\u017cenie trwa d\u0142u\u017cej, bo Trellis tworzy struktur\u0119 katalog\u00f3w i instaluje zale\u017cno\u015bci. Kolejne s\u0105 szybsze \u2014 i przede wszystkim nie powoduj\u0105 przerw ani stan\u00f3w po\u015brednich.<\/p>\n\n\n\n<div class=\"wp-block-group callout callout-info is-style-info is-layout-flow wp-block-group-is-layout-flow\" style=\"border-width:1px;border-radius:8px;padding-top:1rem;padding-right:1.5rem;padding-bottom:1rem;padding-left:1.5rem\">\n\n<h4 class=\"wp-block-heading callout-title\">Warto zapami\u0119ta\u0107<\/h4>\n\n\n<p>Trellis mo\u017cna u\u017cywa\u0107 wy\u0142\u0105cznie do wdro\u017ce\u0144 Bedrockowych projekt\u00f3w \u2014 bez zmiany lokalnego \u015brodowiska. To cz\u0119sty model, gdy zesp\u00f3\u0142 ma ju\u017c u\u0142o\u017cony development, a chce \u201etylko\u201d bezpieczniejszych deploy\u00f3w i rollback\u00f3w.<\/p>\n\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie: co realnie zyskujesz z Trellisowego atomic deploy?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n\n<li>Brak przestoj\u00f3w i brak \u201emieszanki\u201d plik\u00f3w podczas wdro\u017cenia.<\/li>\n\n\n<li>Powtarzalny proces wdro\u017ceniowy oparty o Git i budowanie release w izolacji.<\/li>\n\n\n<li>Rollback jako prze\u0142\u0105czenie symlinka, a nie r\u0119czne odkr\u0119canie zmian.<\/li>\n\n\n<li>Hooki do dopi\u0119cia backup\u00f3w, cache purge, test\u00f3w i innych krok\u00f3w operacyjnych.<\/li>\n\n<\/ul>\n\n\n<div class=\"references-section\">\n                <h2>Odniesienia \/ \u0179r\u00f3d\u0142a<\/h2>\n                <ul class=\"references-list\"><li><a href=\"https:\/\/roots.io\/zero-downtime-wordpress-deployments-with-trellis\/\" target=\"_blank\" rel=\"noopener noreferrer\">Zero Downtime WordPress Deployments with Trellis<\/a><\/li><li><a href=\"https:\/\/roots.io\/trellis\/docs\/deployments\/\" target=\"_blank\" rel=\"noopener noreferrer\">Trellis Deployments Documentation<\/a><\/li><li><a href=\"https:\/\/roots.io\/bedrock\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bedrock<\/a><\/li><li><a href=\"https:\/\/roots.io\/trellis\/\" target=\"_blank\" rel=\"noopener noreferrer\">Trellis<\/a><\/li><li><a href=\"https:\/\/roots.io\/acorn\/docs\/creating-and-running-laravel-migrations\/\" target=\"_blank\" rel=\"noopener noreferrer\">Creating and running Laravel migrations (Acorn docs)<\/a><\/li><\/ul>\n            <\/div>","protected":false},"excerpt":{"rendered":"<p>Klasyczne deploye WordPressa potrafi\u0105 \u201erozsypa\u0107\u201d stron\u0119 na kilka minut, bo nadpisujesz pliki na \u017cywo. Trellis rozwi\u0105zuje to atomic deploymentem: nowa wersja powstaje obok, a prze\u0142\u0105czenie jest natychmiastowe.<\/p>\n","protected":false},"author":25,"featured_media":120,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75],"tags":[73,77,78,76,10],"class_list":["post-121","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-bedrock","tag-deploy","tag-devops","tag-trellis","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/comments?post=121"}],"version-history":[{"count":1,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/121\/revisions"}],"predecessor-version":[{"id":133,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/posts\/121\/revisions\/133"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media\/120"}],"wp:attachment":[{"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/media?parent=121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/categories?post=121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/helloblog.io\/pl\/wp-json\/wp\/v2\/tags?post=121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}