{"id":53611,"date":"2019-12-06T00:00:00","date_gmt":"2019-12-05T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1"},"modified":"2020-02-18T14:01:32","modified_gmt":"2020-02-18T11:01:32","slug":"legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","title":{"rendered":"Leht\u00eb dhe pa ndihm\u00eb nd\u00ebrtojm\u00eb aplikacione mbi Tarantool Cartridge (pjesa 1)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Leht\u00eb dhe pa ndihm\u00eb nd\u00ebrtojm\u00eb aplikacione mbi Tarantool Cartridge (pjesa 1)\" src=\"\/wp-content\/uploads\/2019\/12\/0493b6c8d60253352bc971b216e9b63e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kemi tashm\u00eb kemi folur p\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/465503\/\">Tarantool Cartridge<\/a><\/noindex>, e cila lejon zhvillimin e aplikacioneve t\u00eb shp\u00ebrndara dhe paketimin e tyre. Ka mbetur vet\u00ebm nj\u00eb hap: t\u00eb m\u00ebsojm\u00eb si t'i shp\u00ebrndajm\u00eb k\u00ebto aplikacione dhe t'i menaxhojm\u00eb ato. Mos u shqet\u00ebsoni, ne e kemi parashikuar gjith\u00e7ka! Kemi mbledhur praktikat m\u00eb t\u00eb mira p\u00ebr pun\u00ebn me Tarantool Cartridge dhe kemi shkruar <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/tarantool\/cartridge\">rolin ansible<\/a><\/noindex>, i cili do t\u00eb shp\u00ebrndaj\u00eb paket\u00ebn n\u00eb servera, do t\u00eb startoj\u00eb instancat, do t'i bashkoj\u00eb ato n\u00eb nj\u00eb kluster, do t\u00eb konfiguroj\u00eb autorizimin, do t\u00eb b\u00ebj\u00eb bootstrapping t\u00eb vshard, do t\u00eb aktivizoj\u00eb d\u00ebshtimin automatik dhe do t\u00eb patch\u00eb konfigurimin e klustrit.<\/p>\n<p><\/p>\n<p>Interesant? At\u00ebher\u00eb ju lutem, shikoni m\u00eb posht\u00eb, do t'ju tregojm\u00eb gjith\u00e7ka.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"nachnem-s-primera\">Le t\u00eb fillojm\u00eb me nj\u00eb shembull<\/h1>\n<p><\/p>\n<p>Ne do t\u00eb shqyrtojm\u00eb vet\u00ebm nj\u00eb pjes\u00eb t\u00eb funksionalitetit t\u00eb rolit ton\u00eb. P\u00ebrshkrimi i plot\u00eb i t\u00eb gjitha mund\u00ebsive dhe parametrave hyr\u00ebs mund t\u00eb gjendet gjithmon\u00eb n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">dokumentacionin<\/a><\/noindex>. Por \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb provosh nj\u00eb her\u00eb sesa t\u00eb shoh\u00ebsh nj\u00ebqind her\u00eb, prandaj le t\u00eb shp\u00ebrndajm\u00eb nj\u00eb aplikacion t\u00eb vog\u00ebl.<\/p>\n<p><\/p>\n<p>Tarantool Cartridge ka <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/cartridge-cli\/tree\/master\/examples\/getting-started-app#application-example-based-on-tarantool-cartridge\">tutorial<\/a><\/noindex> p\u00ebr krijimin e nj\u00eb aplikacioni t\u00eb vog\u00ebl Cartridge, i cili ruan informacionin rreth klient\u00ebve t\u00eb bank\u00ebs dhe llogarive t\u00eb tyre, si dhe ofron nj\u00eb API p\u00ebr menaxhimin e t\u00eb dh\u00ebnave p\u00ebrmes HTTP. P\u00ebr k\u00ebt\u00eb, n\u00eb aplikacion do t\u00eb p\u00ebrshkruhen dy role t\u00eb mundshme: <code>api<\/code> dhe <code>storage<\/code>, t\u00eb cilat mund t\u00eb caktohen instancave.<\/p>\n<p><\/p>\n<p>Cartridge vet\u00eb nuk thot\u00eb asgj\u00eb rreth m\u00ebnyr\u00ebs s\u00eb ekzekutimit t\u00eb proceseve, ai thjesht ofron mund\u00ebsin\u00eb p\u00ebr konfiguruar instancat q\u00eb jan\u00eb tashm\u00eb t\u00eb lan\u00e7uara. Pjesa tjet\u00ebr p\u00ebrdoruesi duhet ta b\u00ebj\u00eb vet\u00eb: t\u00eb shp\u00ebrndaj\u00eb skedar\u00ebt e konfigurimit, t\u00eb startoj\u00eb sh\u00ebrbimet dhe t\u00eb konfiguroj\u00eb topologjin\u00eb. Por ne nuk do t\u00eb merremi me k\u00ebto, Ansible do ta b\u00ebj\u00eb k\u00ebt\u00eb p\u00ebr ne.<\/p>\n<p><\/p>\n<h3 id=\"ot-slov-k-delu\">Nga fjal\u00ebt n\u00eb vep\u00ebr<\/h3>\n<p><\/p>\n<p>Pra, do t\u00eb shp\u00ebrndajm\u00eb aplikacionin ton\u00eb n\u00eb dy makineri virtuale dhe do t\u00eb konfigurojm\u00eb nj\u00eb topologji t\u00eb thjesht\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Replicaset <code>app-1<\/code> do t\u00eb realizoj\u00eb rolin <code>api<\/code>, i cili p\u00ebrfshin rolin <code>vshard-router<\/code>. K\u00ebtu do t\u00eb ket\u00eb vet\u00ebm nj\u00eb instanc\u00eb.<\/li>\n<li>Replicaset <code>storage-1<\/code> realizon rolin <code>storage<\/code> (dhe nj\u00ebkoh\u00ebsisht <code>vshard-storage<\/code>), k\u00ebtu do t\u00eb shtojm\u00eb dy instanca nga makina t\u00eb ndryshme.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Leht\u00eb dhe pa ndihm\u00eb nd\u00ebrtojm\u00eb aplikacione mbi Tarantool Cartridge (pjesa 1)\" src=\"\/wp-content\/uploads\/2019\/12\/62d20050e2d7a6358002ecd758222f1f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb startuar shembullin, do t\u00eb na duhen <noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex> dhe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\">Ansible<\/a><\/noindex> (versioni 2.8 ose m\u00eb i vjet\u00ebr).<\/p>\n<p><\/p>\n<p>Roli vet\u00eb ndodhet n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/galaxy.ansible.com\/docs\/\">Ansible Galaxy<\/a><\/noindex>. Ky \u00ebsht\u00eb nj\u00eb depo q\u00eb lejon ndarjen e zhvillimeve dhe p\u00ebrdorimin e roleve t\u00eb gatshme.<\/p>\n<p><\/p>\n<p>Do t\u00eb klonojm\u00eb depot me shembullin:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ git clone https:\/\/github.com\/dokshina\/deploy-tarantool-cartridge-app.git\n$ cd deploy-tarantool-cartridge-app &amp;&amp; git checkout 1.0.0<\/code><\/pre>\n<p><\/p>\n<p>Do t\u00eb ngrem\u00eb makinat virtuale:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ vagrant up<\/code><\/pre>\n<p><\/p>\n<p>Do t\u00eb instalojm\u00eb rolin ansible Tarantool Cartridge:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-galaxy install tarantool.cartridge,1.0.1<\/code><\/pre>\n<p><\/p>\n<p>Do t\u00eb ekzekutojm\u00eb rolin e instaluar:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebrfundojm\u00eb ekzekutimin e playbook-ut, kalojm\u00eb n\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> dhe shijojm\u00eb rezultatin:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Leht\u00eb dhe pa ndihm\u00eb nd\u00ebrtojm\u00eb aplikacione mbi Tarantool Cartridge (pjesa 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6563ddf2f2bfc85714f327c8d6b2d1c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mund t\u00eb ngarkojm\u00eb t\u00eb dh\u00ebnat. E mrekullueshme, apo jo?<\/p>\n<p><\/p>\n<p>Tani le t\u00eb kuptojm\u00eb si t\u00eb punojm\u00eb me k\u00ebt\u00eb dhe p\u00ebr nj\u00eb her\u00eb t\u00eb shtojm\u00eb nj\u00eb replikaset tjet\u00ebr n\u00eb topologji.<\/p>\n<p><\/p>\n<h3 id=\"nachinaem-razbiratsya\">Fillojm\u00eb t\u00eb kuptojm\u00eb<\/h3>\n<p><\/p>\n<p>Pra, \u00e7far\u00eb ndodhi?<\/p>\n<p><\/p>\n<p>Ngrit\u00ebm dy makina virtuale dhe ekzekutuam playbook-un ansible, i cili konfiguronte klasterin ton\u00eb. Le t\u00eb shohim p\u00ebrmbajtjen e skedarit <code>playbook.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\n- name: Deploy my Tarantool Cartridge app\n  hosts: all\n  become: true\n  become_user: root\n  tasks:\n  - name: Import Tarantool Cartridge role\n    import_role:\n      name: tarantool.cartridge<\/code><\/pre>\n<p><\/p>\n<p>K\u00ebtu nuk po ndodh asgj\u00eb interesante, po ekzekutojm\u00eb rolin ansible, i cili quhet <code>tarantool.cartridge<\/code>.<\/p>\n<p><\/p>\n<p>Gjith\u00e7ka m\u00eb e r\u00ebnd\u00ebsishme (pra, konfigurimi i klasterit) ndodhet n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/intro_inventory.html\">inventory<\/a><\/noindex>-skedarin <code>hosts.yml<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    # variablat e zakonshme t\u00eb klasterit\n    cartridge_app_name: getting-started-app\n    cartridge_package_path: .\\\/getting-started-app-1.0.0-0.rpm  # rruga p\u00ebr paket\u00ebn\n\n    cartridge_cluster_cookie: app-default-cookie  # biskota e klasterit\n\n    # opsionet e zakonshme ssh\n    ansible_ssh_private_key_file: ~\\\/\\.vagrant.d\\\/insecure_private_key\n    ansible_ssh_common_args: '-o IdentitiesOnly=yes -o UserKnownHostsFile=\\\/dev\\\/null -o StrictHostKeyChecking=no'\n\n  # INSTANCAT\n  hosts:\n    storage-1:\n      config:\n        advertise_uri: '172.19.0.2:3301'\n        http_port: 8181\n\n    app-1:\n      config:\n        advertise_uri: '172.19.0.3:3301'\n        http_port: 8182\n\n    storage-1-replica:\n      config:\n        advertise_uri: '172.19.0.3:3302'\n        http_port: 8183\n\n  children:\n    # GRUPO KLASAT P\u00cbRGATITJE P\u00cbR MAKINA\n    host1:\n      vars:\n        # opsionet e lidhjes p\u00ebr makin\u00ebn e par\u00eb\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n\n      hosts:  # instancat q\u00eb do t\u00eb fillojn\u00eb n\u00eb makin\u00ebn e par\u00eb\n        storage-1:\n\n    host2:\n      vars:\n        # opsionet e lidhjes p\u00ebr makin\u00ebn e dyt\u00eb\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n\n      hosts:  # instancat q\u00eb do t\u00eb fillojn\u00eb n\u00eb makin\u00ebn e dyt\u00eb\n        app-1:\n        storage-1-replica:\n\n    # GRUPO KLASAT P\u00cbRGATITJE P\u00cbR REPLIKAT\n    replicaset_app_1:\n      vars:  # konfigurimi i setit t\u00eb replikave\n        replicaset_alias: app-1\n        failover_priority:\n          - app-1  # lider\n        roles:\n          - 'api'\n\n      hosts:  # instancat e setit t\u00eb replikave\n        app-1:\n\n    replicaset_storage_1:\n      vars:  # konfigurimi i setit t\u00eb replikave\n        replicaset_alias: storage-1\n        weight: 3\n        failover_priority:\n          - storage-1  # lider\n          - storage-1-replica\n        roles:\n          - 'storage'\n\n      hosts:   # instancat e setit t\u00eb replikave\n        storage-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>Gjith\u00e7ka q\u00eb na duhet \u00ebsht\u00eb t\u00eb m\u00ebsojm\u00eb t\u00eb menaxhojm\u00eb instancat dhe replikat, duke modifikuar p\u00ebrmbajtjen e k\u00ebtij skedari. M\u00eb pas do t\u00eb shtojm\u00eb seksione t\u00eb reja k\u00ebtu. P\u00ebr t\u00eb mos u ngat\u00ebrruar, mund t\u00eb shikoni versionin p\u00ebrfundimtar t\u00eb k\u00ebtij skedari, <code>hosts.updated.yml<\/code>, i cili ndodhet n\u00eb depo me shembuj.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-instansami\">Menaxhimi i instancave<\/h3>\n<p><\/p>\n<p>N\u00eb terminologjin\u00eb Ansible, \u00e7do instanc\u00eb \u00ebsht\u00eb nj\u00eb host (mos e ngat\u00ebrroni me serverin fizik), pra, nj\u00eb nyje infrastrukture q\u00eb Ansible do t\u00eb menaxhoj\u00eb. P\u00ebr secil\u00ebn host, mund t\u00eb p\u00ebrcaktojm\u00eb parametrat e lidhjes (si\u00e7 jan\u00eb <code>ansible_host<\/code> dhe <code>ansible_user<\/code>), si dhe konfigurimin e instanc\u00ebs. P\u00ebrshkrimi i instancave ndodhet n\u00eb seksionin <code>hosts<\/code>.<\/p>\n<p><\/p>\n<p>Le t\u00eb shqyrtojm\u00eb konfigurimin e instanc\u00ebs <code>storage-1<\/code>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # INSTANCAT\n  hosts:\n    storage-1:\n      config:\n        advertise_uri: '172.19.0.2:3301'\n        http_port: 8181\n\n  ...<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb variablin <code>config<\/code> kemi p\u00ebrcaktuar parametrat e instanc\u00ebs \u2014 <code>advertise URI<\/code> dhe <code>HTTP port<\/code>.<br \/>\nM\u00eb posht\u00eb jan\u00eb parametrat e instancave <code>app-1<\/code> dhe <code>storage-1-replica<\/code>.<\/p>\n<p><\/p>\n<p>Na nevojitet t\u00eb tregojm\u00eb Ansible parametrat e lidhjes p\u00ebr secil\u00ebn instanc\u00eb. Duket e arsyeshme t\u00eb grupojm\u00eb instancat sipas makinerive virtuale. P\u00ebr k\u00ebt\u00eb, instancat jan\u00eb t\u00eb grupuara n\u00eb grupe <code>host1<\/code> dhe <code>host2<\/code>, dhe n\u00eb secil\u00ebn grup n\u00eb seksionin <code>vars<\/code> jan\u00eb p\u00ebrcaktuar vlerat <code>ansible_host<\/code> dhe <code>ansible_user<\/code> p\u00ebr nj\u00eb makin\u00eb virtuale. Dhe n\u00eb seksionin <code>hosts<\/code> \u2014 hostet (t\u00eb nj\u00ebjtat jan\u00eb instancat), q\u00eb jan\u00eb pjes\u00eb e k\u00ebtij grupi:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    # GRUPONI INSTANCAT SIPAS MAKINAVE\n    host1:\n      vars:\n        # opsionet e lidhjes p\u00ebr makin\u00ebn e par\u00eb\n        ansible_host: 172.19.0.2\n        ansible_user: vagrant\n       hosts:  # instancat q\u00eb do t\u00eb nisen n\u00eb makin\u00ebn e par\u00eb\n        storage-1:\n\n     host2:\n      vars:\n        # opsionet e lidhjes p\u00ebr makin\u00ebn e dyt\u00eb\n        ansible_host: 172.19.0.3\n        ansible_user: vagrant\n       hosts:  # instancat q\u00eb do t\u00eb nisen n\u00eb makin\u00ebn e dyt\u00eb\n        app-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>T\u00eb fillojm\u00eb t\u00eb nd\u00ebrronim <code>hosts.yml<\/code>. T\u00eb shtojm\u00eb edhe dy instanca, <code>storage-2-replica<\/code> n\u00eb makin\u00ebn e par\u00eb dhe <code>storage-2<\/code> n\u00eb t\u00eb dyt\u00ebn:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n\n  # INSTANCAT\n  hosts:\n    ...\n    storage-2:  # &lt;==\n      config:\n        advertise_uri: '172.19.0.3:3303'\n        http_port: 8184\n\n    storage-2-replica:  # &lt;==\n      config:\n        advertise_uri: '172.19.0.2:3302'\n        http_port: 8185\n\n  children:\n    # GRUPONI INSTANCAT SIPAS MAKINAVE\n    host1:\n      vars:\n        ...\n      hosts:  # instancat q\u00eb do t\u00eb nisen n\u00eb makin\u00ebn e par\u00eb\n        storage-1:\n        storage-2-replica:  # &lt;==\n\n    host2:\n      vars:\n        ...\n      hosts:  # instancat q\u00eb do t\u00eb nisen n\u00eb makin\u00ebn e dyt\u00eb\n        app-1:\n        storage-1-replica:\n        storage-2:  # &lt;==\n  ...<\/code><\/pre>\n<p><\/p>\n<p>Po ekzekutojm\u00eb ansible-playbook:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml \n                   --limit storage-2,storage-2-replica \n                   playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>Kujtoni opsionin <code>--limit<\/code>. Pavar\u00ebsisht se \u00e7do instanc\u00eb e klasterit \u00ebsht\u00eb nj\u00eb host n\u00eb terminologjin\u00eb Ansible, ne mund t\u00eb specifikojm\u00eb konkretisht cilat instanca duhet t\u00eb konfigurohen gjat\u00eb ekzekutimit t\u00eb playbook-ut.<\/p>\n<p><\/p>\n<p>P\u00ebrs\u00ebri hyjm\u00eb n\u00eb Web UI <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex> dhe shohim instancat tona t\u00eb reja:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Leht\u00eb dhe pa ndihm\u00eb nd\u00ebrtojm\u00eb aplikacione mbi Tarantool Cartridge (pjesa 1)\" src=\"\/wp-content\/uploads\/2019\/12\/6181c359e4e5ec4adaee8737600a27e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nuk do t\u00eb ndalemi k\u00ebtu dhe do t\u00eb m\u00ebsojm\u00eb menaxhimin e topologjis\u00eb.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-topologiey\">Menaxhimi i topologjis\u00eb<\/h3>\n<p><\/p>\n<p>Do t\u00eb bashkojm\u00eb instancat tona t\u00eb reja n\u00eb nj\u00eb replicaset <code>storage-2<\/code>. T\u00eb shtojm\u00eb nj\u00eb grup t\u00eb ri <code>replicaset_storage_2<\/code> dhe t\u00eb p\u00ebrshkruajm\u00eb n\u00eb variabl\u00ebt e saj parametrat e replicaset-it n\u00eb baz\u00eb t\u00eb <code>replicaset_storage_1<\/code>. N\u00eb seksionin <code>hosts<\/code> do t\u00eb tregojm\u00eb se cil\u00ebt instanca do t\u00eb p\u00ebrfshihen n\u00eb k\u00ebt\u00eb grup (pra, seti yn\u00eb i replikimit):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    ...\n    # GRUPI INSTANCAVE SIPAS SETEVE T\u00cb REPLIKIMIT\n    ...\n    replicaset_storage_2:  # &lt;==\n      vars:  # konfigrimi i setit t\u00eb replikimit\n        replicaset_alias: storage-2\n        weight: 2\n        failover_priority:\n          - storage-2\n          - storage-2-replica\n        roles:\n          - 'storage'\n\n      hosts:   # instancat e setit t\u00eb replikimit\n        storage-2:\n        storage-2-replica:<\/code><\/pre>\n<p><\/p>\n<p>S\u00ebrish po e fillojm\u00eb playbook-un:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ ansible-playbook -i hosts.yml \n                   --limit replicaset_storage_2 \n                   --tags cartridge-replicasets \n                   playbook.yml<\/code><\/pre>\n<p><\/p>\n<p>N\u00eb parametrin <code>--limit<\/code> k\u00ebt\u00eb her\u00eb kaluam emrin e grupit q\u00eb i p\u00ebrgjigjet setit ton\u00eb t\u00eb replikimit.<\/p>\n<p><\/p>\n<p>Le t\u00eb shqyrtojm\u00eb opsionin <code>: ngarkes\u00eb. Mund t\u00eb p\u00ebrdoren etika t\u00eb tjera kuptimplote. Ato caktohen<\/code>.<\/p>\n<p><\/p>\n<p>Roli yn\u00eb p\u00ebrfundimisht kryen detyra t\u00eb ndryshme, t\u00eb cilat jan\u00eb sh\u00ebnuar me etiketat e m\u00ebposhtme:<\/p>\n<p><\/p>\n<ul>\n<li><code>cartridge-instances<\/code>: menaxhimi i instancave (konfigurimi, lidhja me an\u00ebtar\u00ebsin\u00eb);<\/li>\n<li><code>cartridge-replicasets<\/code>: menaxhimi i topologjis\u00eb (menaxhimi i seteve t\u00eb replikimit dhe heqja e pakthyeshme (expel) e instancave nga klasteri);<\/li>\n<li><code>cartridge-config<\/code>: menaxhimi i parametrave t\u00eb tjer\u00eb t\u00eb klasterit (vshard bootstrapping, sistemi automatik i failover-it, parametrat e autorizimit dhe konfigurimi i aplikacionit).<\/li>\n<\/ul>\n<p><\/p>\n<p>Mund t\u00eb tregojm\u00eb qart\u00eb se \u00e7far\u00eb pune duam t\u00eb b\u00ebjm\u00eb, at\u00ebher\u00eb roli do t\u00eb anashkaloj\u00eb kryerjen e detyrave t\u00eb tjera. N\u00eb rastin ton\u00eb duam t\u00eb punojm\u00eb vet\u00ebm me topologjin\u00eb, prandaj specifikuam <code>cartridge-replicasets<\/code>.<\/p>\n<p><\/p>\n<p>Le t\u00eb vler\u00ebsojm\u00eb rezultatin e p\u00ebrpjekjeve tona. Gjejm\u00eb setin e ri t\u00eb replikimit n\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/localhost:8181\/admin\/cluster\/dashboard\">http:\/\/localhost:8181\/admin\/cluster\/dashboard<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Leht\u00eb dhe pa ndihm\u00eb nd\u00ebrtojm\u00eb aplikacione mbi Tarantool Cartridge (pjesa 1)\" src=\"\/wp-content\/uploads\/2019\/12\/20da99480df519b1ee239cd81f67b786.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hurra!<\/p>\n<p><\/p>\n<p>Eksperimentoni me ndryshimin e konfigurimit t\u00eb instancave dhe seteve t\u00eb replikimit dhe shikoni si ndryshon topologjia e klasterit. Mund t\u00eb provoni skenar\u00eb t\u00eb ndrysh\u00ebm operativ\u00eb, p\u00ebr shembull, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_delegation.html#rolling-update-batch-size\">rolling update<\/a><\/noindex> ose rritjen e <code>memtx_memory<\/code>. Roli do t\u00eb p\u00ebrpiqet ta b\u00ebj\u00eb k\u00ebt\u00eb pa rinisjen e instanc\u00ebs, p\u00ebr t\u00eb minimizuar mund\u00ebsin\u00eb e downtime-it t\u00eb aplikacionit tuaj.<\/p>\n<p><\/p>\n<p>Mos harroni t\u00eb ekzekutoni <code>vagrant halt<\/code>, p\u00ebr t\u00eb ndaluar makinat virtuale, kur t\u00eb keni p\u00ebrfunduar me to.<\/p>\n<p><\/p>\n<h1 id=\"a-chto-pod-kapotom\">Dhe \u00e7far\u00eb ndodh n\u00ebn kapak?<\/h1>\n<p><\/p>\n<p>K\u00ebtu do t\u00eb flas m\u00eb shum\u00eb p\u00ebr at\u00eb q\u00eb ndodhte n\u00ebn kapak gjat\u00eb rolin ansible gjat\u00eb eksperimenteve tona.<\/p>\n<p><\/p>\n<p>Le t\u00eb shqyrtojm\u00eb hapat e instaluar t\u00eb aplikacioneve Cartridge.<\/p>\n<p><\/p>\n<h3 id=\"ustanovka-paketa-i-start-instansov\">Instalimi i paket\u00ebs dhe fillimi i instancave<\/h3>\n<p><\/p>\n<p>S\u00eb pari, duhet t\u00eb d\u00ebrgoni paket\u00ebn n\u00eb server dhe ta instaloni at\u00eb. Tani roli di t\u00eb punoj\u00eb me paketat RPM dhe DEB.<\/p>\n<p><\/p>\n<p>M\u00eb pas, nisim instancat. K\u00ebtu gjith\u00e7ka \u00ebsht\u00eb shum\u00eb e thjesht\u00eb: \u00e7do instanc\u00eb \u00ebsht\u00eb nj\u00eb sh\u00ebrbim i ve\u00e7ant\u00eb. <code>systemd<\/code>E tregoj si shembull:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ systemctl start myapp@storage-1<\/code><\/pre>\n<p><\/p>\n<p>Kjo komand\u00eb do t\u00eb nis\u00eb instanc\u00ebn <code>storage-1<\/code> aplikacione <code>myapp<\/code>. Instanca e nisur do t\u00eb k\u00ebrkoj\u00eb konfigurimin e saj <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/doc\/2.2\/book\/cartridge\/cartridge_dev\/#configuring-instances\">konfiguracionit<\/a><\/noindex> n\u00eb <code>\/etc\/tarantool\/conf.d\/<\/code>. Ju do t\u2019i shihni log-et e instanc\u00ebs p\u00ebrmes <code>journald<\/code>.<\/p>\n<p><\/p>\n<p>Nj\u00ebsi e skedarit <code>\/etc\/systemd\/system\/myapp@.sevice<\/code> p\u00ebr sh\u00ebrbimin systemd do t\u00eb d\u00ebrgohet s\u00eb bashku me paket\u00ebn.<\/p>\n<p><\/p>\n<p>N\u00eb Ansible ka m\u00f3dulo t\u00eb integruara p\u00ebr instalimin e Paketimeve dhe menaxhimin e sh\u00ebrbimeve systemd, k\u00ebtu nuk kemi shpikur asgj\u00eb t\u00eb re.<\/p>\n<p><\/p>\n<h3 id=\"nastroyka-topologii-klastera\">Konfigurimi i topologjis\u00eb s\u00eb klastrit<\/h3>\n<p><\/p>\n<p>K\u00ebtu fillon m\u00eb interesante. Pajtohuni, do t\u00eb ishte \u00e7udir\u00eb t\u00eb merreshim me nj\u00eb rol ansible t\u00eb ve\u00e7ant\u00eb p\u00ebr instalimin e Paketimeve dhe nisjen <code>systemd<\/code>-sh\u00ebrbimeve.<\/p>\n<p><\/p>\n<p>Klastri mund t\u00eb konfigurohet manualisht:<\/p>\n<p><\/p>\n<ul>\n<li>Opsioni i par\u00eb: hapim UI-n\u00eb n\u00eb internet dhe klikojm\u00eb butonat. P\u00ebr nj\u00eb nisje t\u00eb vetme t\u00eb disa instancave, \u00ebsht\u00eb mjaft i p\u00ebrshtatsh\u00ebm.<\/li>\n<li>Opsioni i dyt\u00eb: mund t\u00eb p\u00ebrdorim GraphQl API. K\u00ebtu mund t\u00eb automatizojm\u00eb di\u00e7ka, p\u00ebr shembull, t\u00eb shkruajm\u00eb nj\u00eb skritp n\u00eb Python.<\/li>\n<li>Opsioni i tret\u00eb (p\u00ebr ata me guxim): hyjm\u00eb n\u00eb server, lidhim me nj\u00eb nga instancat p\u00ebrmes <code>tarantoolctl connect<\/code> dhe realizojm\u00eb t\u00eb gjitha manipulimet e nevojshme me modul <code>cartridge<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Detyra kryesore e shpikjes son\u00eb \u00ebsht\u00eb t\u00eb b\u00ebjm\u00eb p\u00ebr ju pik\u00ebrisht k\u00ebt\u00eb, pjes\u00ebn m\u00eb t\u00eb v\u00ebshtir\u00eb t\u00eb pun\u00ebs.<\/p>\n<p><\/p>\n<p>Ansible lejon t\u00eb shkruani modul tuaj dhe ta p\u00ebrdorni n\u00eb rol. Roli yn\u00eb p\u00ebrdor k\u00ebto module p\u00ebr menaxhimin e komponenteve t\u00eb ndryshme t\u00eb klastrit.<\/p>\n<p><\/p>\n<p>Si funksionon? Ju p\u00ebrshkruani gjendjen e d\u00ebshiruar t\u00eb klastrit n\u00eb nj\u00eb konfiguraim deklarativ, dhe roli i jep secilit modul seksionin e tij t\u00eb konfigurimit. Moduli merr gjendjen aktuale t\u00eb klastrit dhe e krahason at\u00eb me ato q\u00eb ka marr\u00eb si input. M\u00eb pas, p\u00ebrmes socket-it t\u00eb nj\u00ebrit nga instancat ndizet kodi q\u00eb e sjell klastrin n\u00eb gjendjen e d\u00ebshiruar.<\/p>\n<p><\/p>\n<h1 id=\"itogi\">P\u00ebrfundime<\/h1>\n<p><\/p>\n<p>Sot ne treguam dhe demonstruam se si t\u00eb deployoni aplikacionin tuaj n\u00eb Tarantool Cartridge dhe t\u00eb konfiguroni nj\u00eb topologji t\u00eb thjesht\u00eb. P\u00ebr k\u00ebt\u00eb ne p\u00ebrdor\u00ebm Ansible \u2014 nj\u00eb mjet t\u00eb fuqish\u00ebm, q\u00eb p\u00ebrnga i dallon leht\u00ebsia n\u00eb p\u00ebrdorim dhe lejon konfigurimin e shum\u00eb nod-\u00ebve t\u00eb infrastruktur\u00ebs nj\u00ebkoh\u00ebsisht (n\u00eb rastin ton\u00eb, k\u00ebto jan\u00eb instancat e klastrit).<\/p>\n<p><\/p>\n<p>M\u00eb sip\u00ebr ne shqyrtuam nj\u00eb nga shum\u00eb m\u00ebnyrat p\u00ebr t\u00eb p\u00ebrshkruar konfigurimin e klastrit me an\u00eb t\u00eb Ansible. Sa her\u00eb q\u00eb t\u00eb kuptoni se jeni gati t\u00eb shkelni m\u00eb tej, shqyrtoni <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_best_practices.html\">praktikat m\u00eb t\u00eb mira<\/a><\/noindex> p\u00ebr shkruarjen e playbooks. Ndoshta do ju jet\u00eb m\u00eb e leht\u00eb t\u00eb menaxhoni topologjin\u00eb p\u00ebrmes <code>group_vars<\/code> dhe <code>host_vars<\/code>.<\/p>\n<p><\/p>\n<p>Shum\u00eb shpejt ne do t'ju tregojm\u00eb se si t\u00eb fshini p\u00ebrsosm\u00ebrish (expel) instancat nga topologjia, t\u00eb bootstroni vshard, t\u00eb menaxhoni modin automatik t\u00eb d\u00ebshtimit, t\u00eb konfiguroni autorizimin dhe t\u00eb patchoni konfigurimin e grumbullit. Nd\u00ebrkoh\u00eb, mund t\u00eb hulumtoni <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">dokumentacion<\/a><\/noindex> dhe t\u00eb eksperimentoni me ndryshimin e parametrave t\u00eb grumbullit.<\/p>\n<p><\/p>\n<p>N\u00ebse di\u00e7ka nuk funksionon, sigurisht <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge\/issues\/new\">na njoftoni<\/a><\/noindex> p\u00ebr problemin. Ne do ta zgjidhim gjith\u00e7ka me shpejt\u00ebsi!<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/478710\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043f\u0440\u043e Tarantool Cartridge, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e: \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438. \u041d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c, \u043c\u044b \u0432\u0441\u0451 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438! \u041c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0432\u0441\u0435 best practices \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Tarantool Cartridge \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 ansible-\u0440\u043e\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b, \u0441\u0442\u0430\u0440\u0442\u0430\u043d\u0435\u0442 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442 \u0438\u0445 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53611","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0443\u0436\u0435.\" \/>\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\/sq\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\u041b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Tarantool Cartridge (\u0447\u0430\u0441\u0442\u044c 1) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0443\u0436\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1\" \/>\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-12-05T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:32+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 Leht\u00ebsisht dhe pa stres, deploy aplikacione n\u00eb Tarantool Cartridge (pjesa 1) | ProHoster","description":"Ne tashm\u00eb jemi.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\u041b\u0435\u0433\u043a\u043e \u0438 \u043d\u0435\u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0435\u043d\u043d\u043e \u0434\u0435\u043f\u043b\u043e\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Tarantool Cartridge (\u0447\u0430\u0441\u0442\u044c 1) | ProHoster","og:description":"\u041c\u044b \u0443\u0436\u0435.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/legko-i-neprinuzhdenno-deploim-prilozheniya-na-tarantool-cartridge-chast-1","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-12-05T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53611","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-24 08:06:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:22:49","updated":"2026-01-24 08:06:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/53611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=53611"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/53611\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=53611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=53611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=53611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}