{"id":133,"date":"2007-08-20T00:11:40","date_gmt":"2007-08-19T23:11:40","guid":{"rendered":"http:\/\/eriz.pcinside.pl\/weblog\/jabber-we-wlasnej-domenie-uruchamiamy-serwer-133.html"},"modified":"2007-10-31T09:32:51","modified_gmt":"2007-10-31T08:32:51","slug":"jabber-we-wlasnej-domenie-uruchamiamy-serwer","status":"publish","type":"post","link":"https:\/\/eriz.pcinside.pl\/weblog\/jabber-we-wlasnej-domenie-uruchamiamy-serwer-133.html","title":{"rendered":"Jabber we w\u0142asnej domenie &#8211; uruchamiamy serwer"},"content":{"rendered":"<p>Jako\u015b uczepi\u0142em si\u0119 ostatnio Jabbera i JID sta\u0142 si\u0119 chyba dla mnie najwa\u017cniejszym identyfikatorem. Z tego powodu, i\u017c bardzo chcia\u0142em go mie\u0107 we w\u0142asnej domenie, <a href=\"\/weblog\/google-apps-for-your-domain-i-jid-we-wlasnej-domenie-102.html\">spr\u00f3bowa\u0142em wcze\u015bniej z Google Apps<\/a>, ale do pe\u0142nej funkcjonalno\u015bci mu czego\u015b brakuje. Nie pami\u0119tam, co konkretnie by\u0142o, ale chyba co\u015b z autoryzacj\u0105.<\/p>\n<p>Wi\u0119c, zabieramy si\u0119 do roboty.<\/p>\n<p><!--more--><\/p>\n<h3>Wyb\u00f3r serwera<\/h3>\n<p>Do wyboru mamy kilka demon\u00f3w, m. in: Jabberd1.4, Jabber2 (to nie s\u0105 po prostu r\u00f3\u017cne wersje; to dwa osobne projekty), OpenFire, Ejabberd. Skupi\u0119 si\u0119 na Ejabberd ze wzgl\u0119du na prostot\u0119 instalacji. Nie wiem, jak to jest w przypadku OpenFire (oparty na Javie), ale ze wzgl\u0119du na ograniczone zasoby sprz\u0119towe komputera, na kt\u00f3rym zainstalowa\u0142em demona, potrzebowa\u0142em czego\u015b l\u017cejszego. Poszpera\u0142em nieco w necie i okaza\u0142o si\u0119, \u017ce wszystkie moje wymagania doskonale spe\u0142nia Ejabberd. Pono\u0107 jest jednym z bardziej rozbudowanych serwer\u00f3w Jabbera dost\u0119pnych w wersji darmowej.<\/p>\n<h3>Przygotowania<\/h3>\n<p>Musimy teraz wybra\u0107 pewn\u0105 drog\u0119: je\u015bli chcemy korzysta\u0107 z wewn\u0119trznej bazy danych u\u017cytkownik\u00f3w, to pomijamy ten krok. W przeciwnym razie, instalujemy jak\u0105\u015b baz\u0119 danych, np. MySQL czy PostgreSQL. Wyb\u00f3r nale\u017cy do nas. Ka\u017cd\u0105 z baz instaluje si\u0119 wr\u0119cz \u0142opatologicznie (za pomoc\u0105 mened\u017cera pakiet\u00f3w), a konfiguracja\/utworzenie bazy nie jest chyba zadaniem a\u017c tak trudnym, \u017ce trzeba by by\u0142o dodatkowo si\u0119 rozpisywa\u0107. Poza tym, po co powiela\u0107 co\u015b, o czym ju\u017c napisano pewnie tysi\u0105ce razy&#8230;<\/p>\n<p>Jakie s\u0105 <strong>zalety<\/strong> trzymania danych w SQL? Jest to pewna skalowalno\u015b\u0107, poniewa\u017c zarz\u0105dzanie kontami u\u017cytkownik\u00f3w mo\u017cemy zintegrowa\u0107 z w\u0142asnym front-endem czy systemem kont na naszej stronie. Bardzo przydatne rozwi\u0105zanie je\u015bli chodzi te\u017c o przeno\u015bno\u015b\u0107 czy rozpraszanie us\u0142ug.<\/p>\n<p>A jakie <strong>wady<\/strong>? C\u00f3\u017c, b\u0119dzie to wydajno\u015b\u0107. Je\u015bli wszystko stoi na jednej maszynie i mamy wielu u\u017cytkownik\u00f3w, to na pewno b\u0119dzie to wolniejsze rozwi\u0105zanie od korzystania z wewn\u0119trznej bazy demona.<\/p>\n<h3>Instalacja Ejabberd<\/h3>\n<p>Zainstalowa\u0107 mo\u017cemy na trzy sposoby: kompiluj\u0105c, instaluj\u0105c z repozytori\u00f3w oraz&#8230; przy pomocy instalatora. Rzadko (IMHO) spotykany spos\u00f3b, ale wed\u0142ug mnie &#8211; stanowi\u0105cy konsensus pomi\u0119dzy oboma wcze\u015bniejszymi. Dlaczego? \u0141atwo\u015b\u0107 instalacji+porz\u0105dek. Pod Ubuntu, instaluj\u0105c z repozytori\u00f3w, wszystko mamy porozrzucane po ca\u0142ym systemie i nie mo\u017cemy okre\u015bli\u0107 prefiksu. Instaluj\u0105c za pomoc\u0105 binarki mamy mo\u017cliwo\u015bc wyboru katalogu i wst\u0119pnej konfiguracji serwera. Dodatkow\u0105 przewag\u0105 nad wersj\u0105 kompilowan\u0105 jest fakt, i\u017c paczka zawiera wszystkie niezb\u0119dne do dzia\u0142ania biblioteki.<\/p>\n<p><a href=\"http:\/\/www.process-one.net\/en\/ejabberd\/downloads\/\">\u015aci\u0105gamy<\/a> instalatora (<em>Linux x86 Installer<\/em>) i nadajemy mu prawa do wykonania (<em>chmod ago+x ejabberd&#8230;<\/em>), po czym uruchamiamy. Instalacja jest dosy\u0107 banalna; sprowadza si\u0119 do wybrania j\u0119zyka, katalogu przeznaczonego na instalacj\u0119, wcze\u015bniej &#8211; do zaakceptowania umowy licencyjnej. R\u00f3wnie\u017c podczas instalacji podajemy domen\u0119, w kt\u00f3rej b\u0119d\u0105 dzia\u0142a\u0142y nasze JID-y oraz login administratora, ale mo\u017cna to r\u00f3wnie\u017c zrobi\u0107 p\u00f3\u017aniej. Niemniej jednak, lepiej jest zrobi\u0107 to teraz i unikn\u0105\u0107 niepotrzebnego grzebania. ;]<\/p>\n<p>W\u0142a\u015bciwie, to mo\u017cna ju\u017c uruchomi\u0107 serwer.<\/p>\n<h3>Konfiguracja<\/h3>\n<p>&#8230;ale lepiej po\u015bwi\u0119ci\u0107 par\u0119 minut na skonfigurowanie demona. Zaczniemy od w\u0142\u0105czenia obs\u0142ugi po\u0142\u0105cze\u0144 szyfrowanych. Poniewa\u017c SSL wychodzi ju\u017c z u\u017cycia, skupimy si\u0119 na TLS-ie. Je\u017celi jednak komu\u015b naprawd\u0119 zale\u017cy na obs\u0142udze SSL, to te\u017c si\u0119 nie zawiedzie.<\/p>\n<p>Otw\u00f3rz sobie w ulubionym edytorze (za du\u017co czytania manuali :D)(vi, emacs, pico, czy czym\u015b innym; osobi\u015bcie, preferuj\u0119 ostatni ;]) plik konfiguracyjny Ejabberd. Znajduje si\u0119 on w <em>&lt;katalog ejabberd&gt;\/conf\/ejabberd.cfg<\/em>. Struktura mo\u017ce wydawa\u0107 si\u0119 troszk\u0119 dziwna, ale po kr\u00f3tkim rozczytaniu w\u0105tpliwo\u015bci znikaj\u0105.<\/p>\n<h4>Szyfrowanie po\u0142\u0105cze\u0144<\/h4>\n<p>Szczerze m\u00f3wi\u0105c, to siedzia\u0142em nad tym prawie trzy dni i na <a href=\"http:\/\/forum.jabberpl.org\">Polskim Forum Jabbera<\/a> wreszcie <a href=\"http:\/\/forum.jabberpl.org\/index.php?showtopic=6700\">kto\u015b pom\u00f3g\u0142<\/a> przy uruchomieniu TLS-a. Pocz\u0105tkowo pope\u0142nia\u0142em b\u0142\u0105d, kt\u00f3ry skutkowa\u0142 pr\u00f3b\u0105 dwukrotnego nas\u0142uchiwania na tym samym porcie&#8230; Ale wszystko ju\u017c wiemy, dzi\u0119ki <strong>Kolargolowi<\/strong>. ;]<\/p>\n<p>Przechodzimy teraz do interesuj\u0105cej nas sekcji:<\/p>\n<p><code lang=\"text\">% Listened ports:<br \/>\n{listen, [<br \/>\n      {5222, ejabberd_c2s, [{access, c2s}, {max_stanza_size, 65536}, {shaper, c2s_shaper}]},<br \/>\n\t  %% Use this line to enable SSL:<br \/>\n\t  %%{5223, ejabberd_c2s,     [{access, c2s}, {max_stanza_size, 65536}, tls, {certfile, \"\/usr\/local\/ejabberd\/conf\/server.pem\"}]},<br \/>\n\t  %%<br \/>\n\t  %% Use those lines instead for TLS support:<br \/>\n\t  %% {5222, ejabberd_c2s,     [{access, c2s}, {shaper, c2s_shaper}, starttls, {certfile, \"\/usr\/local\/ejabberd\/conf\/server.pem\"}]},<br \/>\n\t  %%{5223, ejabberd_c2s,     [{access, c2s}, tls, {certfile, \"\/usr\/local\/ejabberd\/conf\/server.pem\"}]},<\/p>\n<p>\t  %% Remove this line if you want to prevent s2s connections:<br \/>\n      {5269, ejabberd_s2s_in,  [{shaper, s2s_shaper}, {max_stanza_size, 131072}]},<\/p>\n<p>\t  %% remove http_poll to remove support for http polling<br \/>\n\t  %% remove web_admin to disable admin interface:<br \/>\n\t  {5280, ejabberd_http,    [http_poll]}<br \/>\n\t  %% This is an example on how to define an external service\/transport:<br \/>\n\t  %%{8888, ejabberd_service, [{access, all},<br \/>\n\t  %%        {hosts, [\"icq.domena.pl\", \"sms.domena.pl\"],<br \/>\n\t  %%        [{password, \"secret\"}]}]}<br \/>\n         ]}. <\/code><\/p>\n<p><strong>Aby w\u0142\u0105czy\u0107 obs\u0142ug\u0119 TLS<\/strong>, wystarczy skomentowa\u0107 3. linijk\u0119 (za pomoc\u0105 znaku <em>%<\/em>) i odkomentowa\u0107 8. Pami\u0119taj, aby nie powt\u00f3rzy\u0107 mojego b\u0142\u0119du jakim by\u0142o nie skomentowanie 3. wiersza. ;]<\/p>\n<p>W ten oto spos\u00f3b w\u0142\u0105czyli\u015bmy TLS w Ejabberd. Mo\u017cna r\u00f3wnie\u017c <strong>wymusi\u0107 logowanie z u\u017cyciem szyfrowania<\/strong>. W\u00f3wczas, musimy zamieni\u0107 <em>starttls<\/em> na <em>starttls_required<\/em> w 8. linijce.<\/p>\n<p>Mo\u017cna r\u00f3wnie\u017c <strong>zabezpieczy\u0107 po\u0142\u0105czenia s2s<\/strong> (server-to-server). Zamiast 8. linijki wpisujemy:<\/p>\n<p><code lang=\"text\">5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper}, starttls_required, {certfile, \"\/usr\/local\/ejabberd\/conf\/server.pem\"}]},<br \/>\n{s2s_use_starttls, true}.<\/code><\/p>\n<p>Je\u015bli kto\u015b si\u0119 jednak upiera, aby <strong>w\u0142\u0105czy\u0107 obs\u0142ug\u0119 SSL<\/strong>, to r\u00f3wnie\u017c nie ma problemu. Wystarczy odkomentowa\u0107 9. linijk\u0119. Aby pozostawi\u0107 <strong>wy\u0142\u0105cznie mo\u017cliwo\u015b\u0107 \u0142\u0105czenia poprzez SSL<\/strong> musimy skomentowa\u0107 wszystkie pozosta\u0142e wiersze.<\/p>\n<h4>Zmiana bazy danych<\/h4>\n<p>Wspomnia\u0142em o przeniesieniu danych u\u017cytkownik\u00f3w do bazy. No problem, om\u00f3wi\u0119 MySQL. Wspomn\u0119 tylko, \u017ce potrzebujemy wersji <strong>co najmniej<\/strong> 4.1, poniewa\u017c wymagana jest obs\u0142uga silnika InnoDB. Tworzymy pust\u0105 baz\u0119 danych i za pomoc\u0105 np. phpMyAdmina, importujemy <a href=\"http:\/\/svn.process-one.net\/ejabberd\/trunk\/src\/odbc\/mysql.sql\">struktur\u0119 bazy<\/a> dla Ejabberd.<\/p>\n<p>Teraz, powracamy do edycji konfiguracji. Szukamy:<\/p>\n<p><code lang=\"text\">{auth_method, internal}.<\/code><\/p>\n<p>i &#8222;traktujemy&#8221; komentarzem.<\/p>\n<p>Wypada\u0142oby &#8222;powiedzie\u0107&#8221; demonowi, \u017ce ma u\u017cywa\u0107 SQL jako miejsca przechowywania danych. W tym celu, dopisujemy:<\/p>\n<p><code lang=\"text\">{odbc_server, {mysql, \"host\", \"baza\", \"user\", \"haslo\"}}.<br \/>\n{host_config, \"domena.pl\", [{auth_method, [odbc]}]}. <\/code><\/p>\n<p>To spowoduje przechowywanie danych o kontach u\u017cytkownik\u00f3w (JID i has\u0142o) w bazie. Ale przyda\u0142oby si\u0119, aby i inne dane, np. rostery czy wiadomo\u015bci offline tam w\u0119drowa\u0142y. Szukamy sekcji<\/p>\n<p><code lang=\"text\">% Used modules:<br \/>\n{modules,<\/code><\/p>\n<p>I s nazwach modu\u0142\u00f3w:<\/p>\n<ul>\n<li>mod_roster<\/li>\n<li>mod_vcard<\/li>\n<li>mod_last<\/li>\n<li>mod_offline<\/li>\n<\/ul>\n<p>na ko\u0144cu dopisujemy <em>_odbc<\/em>.<\/p>\n<p>Korzystaj\u0105c ze SQL, mo\u017cemy dodatkowo <strong>zablokowa\u0107 rejestracj\u0119 poprzez klienty Jabbera<\/strong>. Przydatne, je\u015bli chcemy udost\u0119pni\u0107 konta wybranej grupie u\u017cytkownik\u00f3w, np. po uprzedniej rejestracji w naszym serwisie. Blokad\u0119 nak\u0142adamy zamieniaj\u0105c <em>{access, register, [{allow, all}]}.<\/em> na <em>{access, register, [{deny, all}]}.<\/em>.<\/p>\n<h4>Tuning<\/h4>\n<p><strong>Do zarz\u0105dzania serwerem<\/strong>, otrzymujemy w miar\u0119 wygodny panel administracyjny, do kt\u00f3rego dost\u0119p mamy pod adresem <em>http:\/\/domena:5280\/admin<\/em>. W wi\u0119kszo\u015bci przypadk\u00f3w, oka\u017ce si\u0119 wystarczaj\u0105cy, cho\u0107 nie wszystko da si\u0119 w nim zmienia\u0107.<\/p>\n<p>Mo\u017cemy r\u00f3wnie\u017c <strong>przegl\u0105da\u0107 stan serwera za pomoc\u0105 Przegl\u0105darki Us\u0142ug<\/strong> klienta Jabberowego. Warunek jest jeden: nasz JID musi posiada\u0107 uprawnienia administracyjne, kt\u00f3re nadajemy za pomoc\u0105 dyrektywy <em>{acl, admin, {user, &#8222;u\u017cyszkodnik&#8221;}}. <\/em>.<\/p>\n<p>Aby Ejabberd <strong>startowa\u0142 przy bootowaniu OS-u<\/strong>, wystarczy doda\u0107 do wpis\u00f3w rc.d Twojego Pingwina skrypt <em>ejabberd.init<\/em>, kt\u00f3ry znajduje si\u0119 w podfolderze <em>bin<\/em> katalogu demona. W Ubuntu wystarczy skopiowa\u0107 plik do <em>\/etc\/init.d<\/em> i skorzysta\u0107 z polecenia <em>update-rc.d<\/em>.<\/p>\n<p>Zapomnia\u0142em wspomnie\u0107 w\u0142a\u015bciwie o najwa\u017cniejszej rzeczy &#8211; jak startowa\u0107 i zatrzymywa\u0107 demona (:D). Mo\u017cemy to zrobi\u0107 poprzez skrypt w <em>init.d<\/em>, o kt\u00f3rym wspomnia\u0142em wy\u017cej oraz przy pomocy dw\u00f3ch polece\u0144: <em>start<\/em> i <em>stop<\/em> w tym samym katalogu, co <em>ejabberd.init<\/em>.<\/p>\n<p>To by by\u0142o na tyle, je\u015bli chodzi o konfiguracj\u0119 pozwalaj\u0105c\u0105 na pogaduszki poprzez \u017bar\u00f3wk\u0119.<\/p>\n<h3>A w\u0142asna domena?<\/h3>\n<p>Kolejny etap. Trzeba uwzgl\u0119dni\u0107 dwie r\u00f3\u017cne sytuacje:<\/p>\n<ol>\n<li>na jednym serwerze mamy uruchomione inne us\u0142ugi i wszystkie dost\u0119pne s\u0105 pod jedn\u0105 domen\u0105<\/li>\n<li>Jabber stoi na innym serwerze, na kt\u00f3ry nie wskazuje domena<\/li>\n<\/ol>\n<h4>All-in-one<\/h4>\n<p>No, tu nie ma praktycznie nic do roboty &#8211; je\u015bli reszta us\u0142ug dzia\u0142a, to do klienta mo\u017cemy wpisa\u0107 <em>user@domenta.pl<\/em> jako JID i zacz\u0105\u0107 rozmawia\u0107.<\/p>\n<h4>Jabber osobno &#8211; rekordy SRV<\/h4>\n<p>Do niedawna, trzeba by\u0142o korzysta\u0107 z subdomen typu <em>jabber.domena.pl<\/em>, aby m\u00f3c si\u0119 porozumiewa\u0107 w sytuacjach, gdy serwer \u017bar\u00f3wki by\u0142 na innej maszynie ni\u017c serwis dost\u0119pny pod g\u0142\u00f3wn\u0105 domen\u0105. Obecnie, wiele serwis\u00f3w wci\u0105\u017c wykorzystuje subdomene jako wskazanie na serwer Jabbera. Mo\u017cemy jednak korzysta\u0107 z g\u0142\u00f3wnej domeny w JID-zie, a demona uruchamia\u0107 na innym serwerze. W tym celu, tworzymy sobie now\u0105 subdomen\u0119, np. <em>jabber.domena.pl<\/em>, kt\u00f3ra b\u0119dzie wskazywa\u0142a na maszyn\u0119 z us\u0142ug\u0105. Ale przecie\u017c wspomnia\u0142em, \u017ce skorzystamy z innej metody. Tak, ale b\u0119dziemy musieli si\u0119 jako\u015b po\u0142\u0105czy\u0107&#8230;<\/p>\n<p>Ju\u017c wyja\u015bniam. Musimy doda\u0107 do swojej g\u0142\u00f3wnej domeny rekordy SRV:<\/p>\n<p><code lang=\"text\">_jabber._tcp.domena.pl. 86400 IN SRV 5 0 5269 jabber.domena.pl.<br \/>\n_xmpp-server._tcp.domena.pl. 86400 IN SRV 5 0 5269 jabber.domena.pl.<br \/>\n_xmpp-client._tcp.domena.pl. 86400 IN SRV 5 0 5222 jabber.domena.pl.<\/code><\/p>\n<p>Niestety, nie spotka\u0142em si\u0119 jeszcze z \u017cadnym panelem administracyjnym, kt\u00f3ry umo\u017cliwi\u0142by samodzielne zarz\u0105dzanie rekordami SRV (nie dotyczy osobnych serwer\u00f3w DNS). Pozostaje nam tylko pro\u015bba do administratora serwera, kt\u00f3ry najcz\u0119\u015bciej dodaje odpowiednie wpisy. Zdarza si\u0119 jednak, \u017ce admin jest dosy\u0107 oporny i nie chce doda\u0107 rekord\u00f3w. W\u00f3wczas, polecam przeprowadzk\u0119 na jaki\u015b <a href=\"http:\/\/www.google.com\/search?client=opera&#038;rls=en&#038;q=freedns&#038;sourceid=opera&#038;ie=utf-8&#038;oe=utf-8\">darmowy DNS<\/a> lub zmian\u0119 hostingu\/registrara.<\/p>\n<p>Po odczekaniu pewnego czasu (max 24h; w praktyce jest to zazwyczaj kilka godzin), serwery przeprowadz\u0105 synchronizacj\u0119 i us\u0142uga b\u0119dzie ju\u017c dost\u0119pna dla \u015awiata.<\/p>\n<p>Teraz wr\u00f3c\u0119 do dodanej wcze\u015bniej subdomeny. Skorzystamy z niej, aby si\u0119 po\u0142\u0105czy\u0107 z naszym serwerem. W tym celu, aktywujemy opcj\u0119 podobn\u0105 do <em>podaj hosta r\u0119cznie<\/em> i wpisujemy utworzon\u0105 wcze\u015bniej subdomen\u0119.<\/p>\n<p><strong>Uwaga<\/strong>, je\u015bli z jakich\u015b powod\u00f3w nie mo\u017cemy\/nie chcemy tworzy\u0107 nowej subdomeny, to mo\u017cna zamiast niej poda\u0107 adres IP serwera z zainstalowanym serwerem Jabbera. Jednak polecam stworzenie subdomeny z powod\u00f3w czysto praktycznych (zmiana IP serwera, itp.).<\/p>\n<p>I tak mamy dzia\u0142aj\u0105cy serwer Jabbera. ;]<\/p>\n<p>Na podstawie <a href=\"http:\/\/www.process-one.net\/docs\/ejabberd\/guide_en.html\">Dokumentacji Ejabberd<\/a>, <a href=\"http:\/\/forum.jabberpl.org\/index.php?showtopic=6700&#038;st=0&#038;gopid=41999&#038;\">rad Kolargola<\/a> i do\u015bwiadcze\u0144.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jako\u015b uczepi\u0142em si\u0119 ostatnio Jabbera i JID sta\u0142 si\u0119 chyba dla mnie najwa\u017cniejszym identyfikatorem. Z tego powodu, i\u017c bardzo chcia\u0142em go mie\u0107 we w\u0142asnej domenie, spr\u00f3bowa\u0142em wcze\u015bniej z Google Apps, ale do pe\u0142nej funkcjonalno\u015bci mu czego\u015b brakuje. Nie pami\u0119tam, co konkretnie by\u0142o, ale chyba co\u015b z autoryzacj\u0105. Wi\u0119c, zabieramy si\u0119 do roboty.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,7],"tags":[114,113,37,50],"_links":{"self":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/133"}],"collection":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/comments?post=133"}],"version-history":[{"count":0,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/133\/revisions"}],"wp:attachment":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/media?parent=133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/categories?post=133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/tags?post=133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}