{"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 qet\u00ebsisht n\u00eb deploy aplikacione n\u00eb Tarantool Cartridge (pjesa 1)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Leht\u00eb dhe qet\u00ebsisht n\u00eb deploy aplikacione n\u00eb Tarantool Cartridge (pjesa 1)\" src=\"\/wp-content\/uploads\/2019\/12\/0493b6c8d60253352bc971b216e9b63e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne kemi folur tashm\u00eb p\u00ebr <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/465503\/\">Tarantool Cartridge<\/a><\/noindex>, i cili lejon zhvillimin e aplikacioneve t\u00eb shp\u00ebrndara dhe paketimin e tyre. Ka mbetur vet\u00ebm nj\u00eb hap: t\u00eb m\u00ebsoni si t\u00eb depozitoni k\u00ebto aplikacione dhe t'i menaxhoni ato. Mos u shqet\u00ebsoni, ne e kemi parashikuar gjith\u00e7ka! Kemi mbledhur s\u00eb bashku t\u00eb gjitha 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\">ansible-rolin<\/a><\/noindex>, i cili do t\u00eb shp\u00ebrndaj\u00eb paket\u00ebn n\u00eb servera, do t\u00eb nxis\u00eb instancat, do t'i bashkoj\u00eb ato n\u00eb nj\u00eb klaster, do t\u00eb konfiguroj\u00eb autorizimin, do t\u00eb zbatoj\u00eb vshard, do t\u00eb aktivizoj\u00eb automatizmin e d\u00ebshtimit dhe do t\u00eb p\u00ebrdit\u00ebsoj\u00eb konfigurimin e klasterit.<\/p>\n<p><\/p>\n<p>Interesant? At\u00ebher\u00eb ju lutem vijoni posht\u00eb, ne 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>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 t\u00eb tij 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\">dokumentacion<\/a><\/noindex>. Por \u00ebsht\u00eb m\u00eb mir\u00eb ta provoni nj\u00eb her\u00eb sesa ta shihni nj\u00ebqind her\u00eb, prandaj le t\u00eb depozojm\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\">tutorialin<\/a><\/noindex> p\u00ebr krijimin e nj\u00eb aplikacioni t\u00eb vog\u00ebl Cartridge, i cili ruan informacion n\u00eb lidhje me klient\u00ebt e bank\u00ebs dhe llogarit\u00eb e tyre, si dhe ofron API p\u00ebr menaxhimin e t\u00eb dh\u00ebnave p\u00ebrmes HTTP. P\u00ebr k\u00ebt\u00eb, aplikacioni p\u00ebrshkruan dy role t\u00eb mundshme: <code>api<\/code> dhe <code>storage<\/code>, t\u00eb cilat mund t\u00eb caktohen p\u00ebr instancat.<\/p>\n<p><\/p>\n<p>Cartridge nuk nuk thot\u00eb se si t\u00eb nisin proceset, ai thjesht ofron mund\u00ebsin\u00eb p\u00ebr t\u00eb konfigurimin e instancave t\u00eb tashme. Pjesa tjet\u00ebr p\u00ebrdoruesi duhet ta b\u00ebj\u00eb vet\u00eb: t\u00eb vendos\u00eb skedar\u00ebt e konfigurimit, t\u00eb nisin sh\u00ebrbimet dhe t\u00eb konfiguroj\u00eb topologjin\u00eb. Por ne nuk do t\u00eb angazhohemi n\u00eb k\u00ebt\u00eb, do ta b\u00ebj\u00eb Ansible p\u00ebr ne.<\/p>\n<p><\/p>\n<h3 id=\"ot-slov-k-delu\">Nga fjal\u00ebt n\u00eb veprim<\/h3>\n<p><\/p>\n<p>Tani, do ta vendosim aplikacionin ton\u00eb n\u00eb dy 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>, q\u00eb 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 qet\u00ebsisht n\u00eb deploy aplikacione n\u00eb 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 filluar 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> (versionet 2.8 ose m\u00eb t\u00eb vjetra).<\/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 pun\u00ebve t\u00eb tua dhe p\u00ebrdorimin e rol\u00ebve t\u00eb gatshme.<\/p>\n<p><\/p>\n<p>Klonojm\u00eb depozitat 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>Nisim virtualet:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ vagrant up<\/code><\/pre>\n<p><\/p>\n<p>Instalojm\u00eb ansible-rolin 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>Nisim 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>Presim t\u00eb p\u00ebrfundoj\u00eb ekzekutimi i 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 qet\u00ebsisht n\u00eb deploy aplikacione n\u00eb 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 fillojm\u00eb t\u00eb d\u00ebrgojm\u00eb t\u00eb dh\u00ebna. Super, apo jo?<\/p>\n<p><\/p>\n<p>Tani le t\u00eb kuptojm\u00eb si t\u00eb punojm\u00eb me k\u00ebt\u00eb dhe nj\u00ebkoh\u00ebsisht t\u00eb shtojm\u00eb nj\u00eb replikaset n\u00eb topologji.<\/p>\n<p><\/p>\n<h3 id=\"nachinaem-razbiratsya\">Nisim t\u00eb kuptojm\u00eb<\/h3>\n<p><\/p>\n<p>Pra, \u00e7far\u00eb ndodhi?<\/p>\n<p><\/p>\n<p>Ne ngrit\u00ebm dy makina virtuale dhe e \u00e7eluam playbook-un ansible, i cili konfiguronte klasterin ton\u00eb. Le t\u00eb shikojm\u00eb 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 ndodh asgj\u00eb interesante, nisim rolin ansible, i cili quhet <code>tarantool.cartridge<\/code>.<\/p>\n<p><\/p>\n<p>T\u00eb gjitha gj\u00ebrat m\u00eb t\u00eb r\u00ebnd\u00ebsishme (n\u00eb ve\u00e7anti, konfigurimi i klasterit) ndodhen 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 klastrit\n    cartridge_app_name: getting-started-app\n    cartridge_package_path: .\/getting-started-app-1.0.0-0.rpm  # rruga drejt paket\u00ebs\n\n    cartridge_cluster_cookie: app-default-cookie  # cookies e klastrit\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  # INSTANCET\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    # GRUPONI INSTANCET SIPAS MASHINAVE\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    # GRUPONI INSTANCET SIPAS SETEVE TE REPLIKAVE\n    replicaset_app_1:\n      vars:  # konfigurimi i grupit t\u00eb replikave\n        replicaset_alias: app-1\n        failover_priority:\n          - app-1  # lideri\n        roles:\n          - 'api'\n\n      hosts:  # instancat e grupit t\u00eb replikave\n        app-1:\n\n    replicaset_storage_1:\n      vars:  # konfigurimi i grupit t\u00eb replikave\n        replicaset_alias: storage-1\n        weight: 3\n        failover_priority:\n          - storage-1  # lideri\n          - storage-1-replica\n        roles:\n          - 'storage'\n\n      hosts:   # instancat e grupit t\u00eb replikave\n        storage-1:\n        storage-1-replica:<\/code><\/pre>\n<p><\/p>\n<p>E gjith\u00eb \u00e7ka q\u00eb na nevojitet \u00ebsht\u00eb t\u00eb m\u00ebsojm\u00eb si t\u00eb menaxhojm\u00eb instancat dhe replikaset, duke ndryshuar p\u00ebrmbajtjen e k\u00ebtij skedari. M\u00eb pas do t\u00eb shtojm\u00eb seksione t\u00eb reja n\u00eb t\u00eb. P\u00ebr t\u00eb mos u confuzuar se ku t'i shtojm\u00eb, mund t\u00eb shikoni n\u00eb versionin p\u00ebrfundimtar t\u00eb k\u00ebtij skedari, <code>hosts.updated.yml<\/code>, i cili ndodhet n\u00eb depozitat e shembujve.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-instansami\">Menaxhimi i instancave<\/h3>\n<p><\/p>\n<p>N\u00eb terminologjin\u00eb e Ansible, \u00e7do instanc\u00eb \u00ebsht\u00eb nj\u00eb host (mos e ngat\u00ebrroni me serverin fizik), dmth. nj\u00eb nyje infrastrukturore, t\u00eb cilin Ansible do ta menaxhoj\u00eb. P\u00ebr \u00e7do host, ne mund t\u00eb specifikojm\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 variabl\u00ebn <code>config<\/code> ne kemi specifikuar parametrat e instanc\u00ebs \u2014 <code>advertise URI<\/code> dhe <code>HTTP port<\/code>.<br \/>\nM\u00eb posht\u00eb ndodhen parametrat e instancave <code>app-1<\/code> dhe <code>storage-1-replica<\/code>.<\/p>\n<p><\/p>\n<p>Na nevojitet t\u00eb njoftojm\u00eb Ansible parametrat e lidhjes p\u00ebr secil\u00ebn instanc\u00eb. Duket logjike t\u00eb grupojm\u00eb instancat sipas makinerive virtuale. P\u00ebr k\u00ebt\u00eb, instancat jan\u00eb bashkuar n\u00eb grupe <code>host1<\/code> dhe <code>host2<\/code>, dhe n\u00eb \u00e7do grup n\u00eb seksionin <code>vars<\/code> jan\u00eb specifikuar vlerat <code>ansible_host<\/code> dhe <code>ansible_user<\/code> p\u00ebr nj\u00eb virtuale. Dhe n\u00eb seksionin <code>hosts<\/code> \u2014 hostet (ato jan\u00eb instanca) q\u00eb p\u00ebrfshihen n\u00eb k\u00ebt\u00eb grup:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">all:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    # GRUPONI INSTANCAT SIPAS MASHINAVE\n    host1:\n      vars:\n        # mund\u00ebsit\u00eb 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 nisin n\u00eb makin\u00ebn e par\u00eb\n        storage-1:\n\n     host2:\n      vars:\n        # mund\u00ebsit\u00eb 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 nisin 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 ndryshojm\u00eb <code>hosts.yml<\/code>. Le t\u00eb shtojm\u00eb edhe dy instanca, <code>storage-2-replica<\/code> n\u00eb virtualen 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 MASHINAVE\n    host1:\n      vars:\n        ...\n      hosts:  # instancat q\u00eb do t\u00eb nisin 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 nisin 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 nisim 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>Kujdesi p\u00ebr opsionin <code>--limit<\/code>. Duke \u00e7do instanc\u00eb e grupit \u00ebsht\u00eb nj\u00eb host n\u00eb kuptimin e Ansible, ne mund ta spesifikojm\u00eb me qart\u00eb se 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 v\u00ebzhgojm\u00eb instancat tona t\u00eb reja:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Leht\u00eb dhe qet\u00ebsisht n\u00eb deploy aplikacione n\u00eb 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 si t\u00eb menaxhojm\u00eb topologjin\u00eb.<\/p>\n<p><\/p>\n<h3 id=\"upravlenie-topologiey\">Menaxhimi i topologjis\u00eb<\/h3>\n<p><\/p>\n<p>T\u00eb bashkojm\u00eb instancat tona t\u00eb reja n\u00eb nj\u00eb replicas\u00ebt <code>storage-2<\/code>. T\u00eb shtojm\u00eb nj\u00eb grup t\u00eb ri <code>replicaset_storage_2<\/code> dhe ta p\u00ebrshkruajm\u00eb n\u00eb variablat e saj parametrat e replicas\u00ebt n\u00eb m\u00ebnyr\u00eb t\u00eb ngjashme me <code>replicaset_storage_1<\/code>. N\u00eb seksionin <code>hosts<\/code> t\u00eb tregojm\u00eb se cilat instanca do t\u00eb p\u00ebrfshihen n\u00eb k\u00ebt\u00eb grup (dmth replicas\u00ebt ton\u00eb):<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">---\nall:\n  vars:\n    ...\n  hosts:\n    ...\n  children:\n    ...\n    # GRUPONI INSTANCAT SIPAS REPLICA SETS\n    ...\n    replicaset_storage_2:  # &lt;==\n      vars:  # konfigurimi i replicas\u00ebt\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 replicas\u00ebt\n        storage-2:\n        storage-2-replica:<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebrs\u00ebri e nis\u00ebm 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 kemi kaluar emrin e grupit q\u00eb korrespondon me replicas\u00ebt ton\u00eb.<\/p>\n<p><\/p>\n<p>Le t\u00eb shqyrtojm\u00eb opsionin <code>tags<\/code>.<\/p>\n<p><\/p>\n<p>Roli yn\u00eb p\u00ebrmbush vazhdimisht detyra t\u00eb ndryshme q\u00eb sh\u00ebnohen me etiketat e m\u00ebposhtme:<\/p>\n<p><\/p>\n<ul>\n<li><code>cartridge-instances<\/code>: menaxhimi i instancave (konfigurimi, lidha me an\u00ebtar\u00ebsimin);<\/li>\n<li><code>cartridge-replicasets<\/code>: menaxhimi i topologjis\u00eb (menaxhimi i replika grupeve 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, moda e automatik t\u00eb d\u00ebshtimit, parametrat e autorizimit dhe konfigurimi i aplikacionit).<\/li>\n<\/ul>\n<p><\/p>\n<p>Mund t\u00eb specifikojm\u00eb qart\u00eb se cil\u00ebn pjes\u00eb t\u00eb pun\u00ebs d\u00ebshirojm\u00eb t\u00eb b\u00ebjm\u00eb, at\u00ebher\u00eb roli do t\u00eb kaloj\u00eb p\u00ebrpara n\u00eb realizimin e detyrave t\u00eb tjera. N\u00eb rastin ton\u00eb, duam t\u00eb punojm\u00eb vet\u00ebm me topologjin\u00eb, prandaj kemi sh\u00ebnuar <code>cartridge-replicasets<\/code>.<\/p>\n<p><\/p>\n<p>Le t\u00eb vler\u00ebsojm\u00eb rezultatin e p\u00ebrpjekjeve tona. Gjejm\u00eb nj\u00eb grup t\u00eb ri replika 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 qet\u00ebsisht n\u00eb deploy aplikacione n\u00eb Tarantool Cartridge (pjesa 1)\" src=\"\/wp-content\/uploads\/2019\/12\/20da99480df519b1ee239cd81f67b786.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hurrah!<\/p>\n<p><\/p>\n<p>Eksperimentoni me ndryshimin e konfigurimeve t\u00eb instancave dhe grupeve replika dhe shihni se si ndryshon topologjia e klasterit. Mund t\u00eb provoni skenar\u00eb t\u00eb ndrysh\u00ebm operativ\u00eb, si p.sh. <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_delegation.html#rolling-update-batch-size\">p\u00ebrdit\u00ebsim t\u00eb vazhduesh\u00ebm<\/a><\/noindex> ose rritje <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 zvog\u00ebluar mund\u00ebsin\u00eb e downtime-it t\u00eb aplikacionit tuaj.<\/p>\n<p><\/p>\n<p>Mos harroni t\u00eb filloni <code>vagrant halt<\/code>, p\u00ebr t\u00eb ndaluar virtualet kur p\u00ebrfundoni me to.<\/p>\n<p><\/p>\n<h1 id=\"a-chto-pod-kapotom\">\u00c7far\u00eb ndodhet n\u00ebn kapak?<\/h1>\n<p><\/p>\n<p>K\u00ebtu do t\u00eb flas m\u00eb shum\u00eb rreth asaj q\u00eb ndodhte n\u00ebn kapak gjat\u00eb eksperimenteve tona me rolin ansible.<\/p>\n<p><\/p>\n<p>Le t\u00eb shqyrtojm\u00eb hapat e zhvillimit t\u00eb aplikacionit 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>Pastaj, fillojm\u00eb instancat. K\u00ebtu gj\u00ebrat jan\u00eb shum\u00eb t\u00eb thjeshta: \u00e7do instanc\u00eb \u00ebsht\u00eb nj\u00eb <code>systemd<\/code>-sh\u00ebrbim. Po jap nj\u00eb 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 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.tarantool.io\/ru\/doc\/2.2\/book\/cartridge\/cartridge_dev\/#configuring-instances\">konfigurimit<\/a><\/noindex> n\u00eb <code>\/etc\/tarantool\/conf.d\/<\/code>. Logs e instanc\u00ebs mund t\u00eb shihen p\u00ebrmes <code>journald<\/code>.<\/p>\n<p><\/p>\n<p>Skedari i nj\u00ebsis\u00eb <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>Ansible ka module t\u00eb nd\u00ebrtuara p\u00ebr instalimin e paketave 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 klasterit<\/h3>\n<p><\/p>\n<p>K\u00ebtu fillon e gjith\u00eb arg\u00ebtimi. Priteni, do t\u00eb ishte \u00e7uditshme t\u00eb keni nj\u00eb rol t\u00eb ve\u00e7ant\u00eb ansible p\u00ebr instalimin e paketave dhe fillimin e <code>systemd<\/code>-sh\u00ebrbimeve.<\/p>\n<p><\/p>\n<p>Klasterin mund ta konfiguroni manualisht:<\/p>\n<p><\/p>\n<ul>\n<li>Opsioni i par\u00eb: hapim Web UI dhe shtypim butonat. P\u00ebr nj\u00eb fillim t\u00eb vet\u00ebm t\u00eb disa instancave, \u00ebsht\u00eb plot\u00ebsisht 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 skript n\u00eb Python.<\/li>\n<li>Opsioni i tret\u00eb (p\u00ebr ata m\u00eb t\u00eb fort\u00ebt): hyjm\u00eb n\u00eb server, lidhemi me nj\u00eb nga instancat p\u00ebrmes <code>tarantoolctl connect<\/code> dhe b\u00ebjm\u00eb t\u00eb gjitha manipulimet e nevojshme me modulin Lua <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 k\u00ebt\u00eb pjes\u00eb t\u00eb pun\u00ebs, m\u00eb t\u00eb v\u00ebshtir\u00ebn.<\/p>\n<p><\/p>\n<p>Ansible lejon t\u00eb shkruhet moduli juaj dhe ta p\u00ebrdorni at\u00eb n\u00eb rolin tuaj. Roli yn\u00eb p\u00ebrdor k\u00ebta module p\u00ebr t\u00eb menaxhuar komponent\u00ebt e ndrysh\u00ebm t\u00eb klasterit.<\/p>\n<p><\/p>\n<p>Si funksionon kjo? Ju p\u00ebrshkruani gjendjen e d\u00ebshiruar t\u00eb klasterit n\u00eb nj\u00eb konfigurim deklarativ, dhe roli u jep secilit moduli seksionin e tij t\u00eb konfigurimit. Moduli merr gjendjen aktuale t\u00eb klasterit dhe e krahasohet me at\u00eb q\u00eb ka ardhur n\u00eb input. Pastaj, p\u00ebrmes socket-it t\u00eb nj\u00ebrit prej instancave, fillohet kodi q\u00eb e \u00e7on klasterin n\u00eb gjendjen e d\u00ebshiruar.<\/p>\n<p><\/p>\n<h1 id=\"itogi\">P\u00ebrfundimet<\/h1>\n<p><\/p>\n<p>Sot treguam dhe treguam se si t\u00eb vendosni aplikacionin tuaj n\u00eb Tarantool Cartridge dhe t\u00eb konfiguroni nj\u00eb topologji t\u00eb thjesht\u00eb. P\u00ebr k\u00ebt\u00eb, p\u00ebrdor\u00ebm Ansible \u2014 nj\u00eb mjet t\u00eb fuqish\u00ebm, i njohur p\u00ebr thjesht\u00ebsin\u00eb e tij t\u00eb p\u00ebrdorimit dhe lejon konfigurimin e shum\u00eb nyjeve t\u00eb infrastruktur\u00ebs n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb (n\u00eb rastin ton\u00eb, k\u00ebto jan\u00eb instancat e klas\u00ebs).<\/p>\n<p><\/p>\n<p>M\u00eb sip\u00ebr, e shqyrtuam nj\u00eb nga shum\u00eb m\u00ebnyrat e p\u00ebrshkrimit t\u00eb konfiguracionit t\u00eb klas\u00ebs p\u00ebrmes Ansible. Sa her\u00eb q\u00eb t\u00eb kuptoni se jeni gati t\u00eb shkoni p\u00ebrpara, 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 t\u00eb shkruar playbooks. Ndoshta do t'ju jet\u00eb m\u00eb leht\u00eb t\u00eb menaxhoni topologjin\u00eb me an\u00eb t\u00eb <code>group_vars<\/code> dhe <code>host_vars<\/code>.<\/p>\n<p><\/p>\n<p>Shum\u00eb shpejt do t'ju tregojm\u00eb se si t\u00eb fshini pa kthim (expel) instancat nga topologjia, si t\u00eb bootstroni vshard, si t\u00eb menaxhoni modalitetin e automatik t\u00eb failover-it, t\u00eb konfiguroni autorizimin dhe t\u00eb patch-oni konfigurimin e klas\u00ebs. Nd\u00ebrkoh\u00eb, mund t\u00eb eksploroni dhe t\u00eb eksperimentoni me ndryshimin e parameter\u00ebve t\u00eb klas\u00ebs. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge#ansible-role-tarantool-cartridge\">dokumentacioni<\/a><\/noindex> dhe p\u00ebr t\u00eb eksperimentuar me ndryshimin e parametrave t\u00eb klasterit.<\/p>\n<p><\/p>\n<p>N\u00ebse di\u00e7ka nuk funksionon, sigurohuni q\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/ansible-cartridge\/issues\/new\">t\u00eb na njoftoni<\/a><\/noindex> p\u00ebr problem. Ne do ta zgjidhim shpejt!<\/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.0.1 - 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.0.1\" \/>\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 mundim implantojm\u00eb aplikacione n\u00eb Tarantool Cartridge (cakto 1) | ProHoster","description":"Ne 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}]}}