{"id":52562,"date":"2019-11-11T00:00:00","date_gmt":"2019-11-10T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/stroim-sobstvennyj-serverless-na-osnove-fn"},"modified":"2020-02-18T14:00:19","modified_gmt":"2020-02-18T11:00:19","slug":"stroim-sobstvennyj-serverless-na-osnove-fn","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","title":{"rendered":"Po nd\u00ebrtojm\u00eb serverless tonin mbi baz\u00ebn e Fn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Po nd\u00ebrtojm\u00eb serverless tonin mbi baz\u00ebn e Fn\" src=\"\/wp-content\/uploads\/2019\/11\/e24cdf9b43a3323d617f33b2c1b44e51.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B5%D1%81%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F\">Llogaritjet pa server\u00eb<\/a><\/noindex> \u2014 \u00ebsht\u00eb nj\u00eb nga tendencat m\u00eb t\u00eb dukshme n\u00eb llogaritjet \u043e\u0431\u043b\u0430\u043a\u0443. Parimi themelor i funksionimit \u00ebsht\u00eb se infrastruktura \u00ebsht\u00eb nj\u00eb shqet\u00ebsim i ofruesit t\u00eb sh\u00ebrbimeve, jo i DevOps. Zgjerimi i burimeve automatizohet sipas ngarkes\u00ebs dhe ka nj\u00eb shpejt\u00ebsi t\u00eb lart\u00eb t\u00eb ndryshimit.<\/p>\n<p><\/p>\n<p>\u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &#171;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&#187; (FaaS).<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Historikisht, ofruesi i par\u00eb i sh\u00ebrbimeve \u043e\u0431\u043b\u0430\u043a\u0443 q\u00eb ofroi FaaS me AWS Lambda ishte Amazon, nga e cila rrjedh kjo em\u00ebr. Ofruesit e tjer\u00eb t\u00eb sh\u00ebrbimeve \u043e\u0431\u043b\u0430\u043a\u0443 gjithashtu ofrojn\u00eb analoge:<\/p>\n<p><\/p>\n<ul>\n<li>Cloud Functions nga Google<\/li>\n<li>Azure Functions nga Microsoft<\/li>\n<\/ul>\n<p><\/p>\n<p>T\u00eb gjitha k\u00ebto kompani ofrojn\u00eb llogaritje pa server\u00eb, zgjerim automatik dhe pages\u00eb vet\u00ebm p\u00ebr burimet e p\u00ebrdorura n\u00eb realitet, por ato i lidhen klient\u00ebt me produktin e tyre pronar. Megjithat\u00eb, ekzistojn\u00eb alternativa falas me burim t\u00eb hapur p\u00ebr organizimin e llogaritjeve pa server\u00eb. Duhet theksuar:<\/p>\n<p><\/p>\n<ul>\n<li>Platforma <noindex><a rel=\"nofollow\" href=\"https:\/\/openwhisk.apache.org\/\">Apache OpenWhisk<\/a><\/noindex>, e zhvilluar n\u00eb inkubatorin e IBM,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.spring.io\/spring-cloud-function\/\">Spring Cloud Functions<\/a><\/noindex>, si pjes\u00eb e nj\u00eb ekosistemi t\u00eb pasur t\u00eb Spring Framework, i cili gjithashtu mund t\u00eb p\u00ebrdoret si nj\u00eb fasad\u00eb p\u00ebr AWS Lambda, Azure Functions dhe OpenWhisk,<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/fnproject\">Projekti Fn<\/a><\/noindex>, i mb\u00ebshtetur nga kompania Oracle.<\/li>\n<\/ul>\n<p><\/p>\n<p>T\u00eb gjitha ato jan\u00eb plot\u00ebsisht t\u00eb pavarura nga re, dometh\u00ebn\u00eb ato mund t\u00eb instalohen n\u00eb \u00e7do re, p\u00ebrfshir\u00eb re tuajat private, publike ose natyrisht n\u00eb Exoscale.<\/p>\n<p><\/p>\n<h2 id=\"kak-proekt-fn-ustroen\">Si \u00ebsht\u00eb organizuar projekti Fn<\/h2>\n<p><\/p>\n<p>Fn \u00ebsht\u00eb plot\u00ebsisht i bazuar n\u00eb Docker, p\u00ebrb\u00ebhet nga dy komponent\u00eb kryesor\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>CLI programi, i projektuar p\u00ebr t\u00eb menaxhuar t\u00eb gjitha aspektet e infrastruktur\u00ebs Fn dhe p\u00ebr t\u00eb komunikuar me serverin Fn,<\/li>\n<li>Sakt\u00ebsisht serveri Fn, nj\u00eb aplikacion i zakonsh\u00ebm, i paketuar n\u00eb nj\u00eb kontejner p\u00ebr Docker.<\/li>\n<\/ul>\n<p><\/p>\n<p>Funksionet q\u00eb jan\u00eb shp\u00ebrndar\u00eb n\u00eb Fn, gjithashtu ekzekutohen n\u00eb kontejner\u00eb t\u00eb ve\u00e7ant\u00eb, duke lejuar mb\u00ebshtetje p\u00ebr shum\u00eb gjuh\u00eb programimi, si\u2026 Clojure!<\/p>\n<p><\/p>\n<p>Argumentet e funksioneve d\u00ebrgohen n\u00eb hyrjen standarde (STDIN), rezultatet shkruhen n\u00eb daljen standarde (STDOUT). N\u00ebse argumentet ose vlerat e kthyer nuk jan\u00eb vlera t\u00eb thjeshta (p.sh., nj\u00eb objekt JSON) \u2014 ato mund t\u00eb konvertohen p\u00ebrmes nj\u00eb shtrese abstraksioni, e cila \u00ebsht\u00eb e ofruar nga vet\u00eb Fn n\u00eb form\u00ebn e nj\u00eb kompleti p\u00ebr zhvillimin e funksioneve (FDK).<\/p>\n<p><\/p>\n<p>P\u00ebr leht\u00ebsi, ofrohen grupe t\u00eb paracaktuara q\u00eb leht\u00ebsojn\u00eb zbatimin e FaaS n\u00eb nj\u00eb list\u00eb t\u00eb gjer\u00eb gjuh\u00ebsh dhe versionesh t\u00eb tyre (Go, versione t\u00eb ndryshme t\u00eb Java, Python, etj.).<\/p>\n<p><\/p>\n<p>Krijimi i FaaS \u00ebsht\u00eb i thjesht\u00eb, duke ndjekur k\u00ebt\u00eb skem\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Zbatojm\u00eb funksionin p\u00ebrmes CLI Fn: krijohet nj\u00eb skedar konfigurimi p\u00ebr aplikacionin p\u00ebr Fn, i bazuar n\u00eb modelin e zgjedhur.<\/li>\n<li>Rriparimi i funksionit t\u00ebnd, gjithashtu me ndihm\u00ebn e CLI Fn: imazhi i kontejnerit vendoset n\u00eb nj\u00eb repository t\u00eb caktuar, pas s\u00eb cil\u00ebs serveri njoftohet p\u00ebr ekzistenc\u00ebn dhe vendndodhjen e k\u00ebtij imazhi.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Po nd\u00ebrtojm\u00eb serverless tonin mbi baz\u00ebn e Fn\" src=\"\/wp-content\/uploads\/2019\/11\/5add8b58c80e976cd61a156fdd0fba11.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Principi i shp\u00ebrndarjes s\u00eb funksioneve n\u00eb Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"lokalnaya-ustanovka-i-testirovanie-besservernyh-funkciy\">Instalimi dhe testimi lokal i funksioneve pa server<\/h2>\n<p><\/p>\n<p>Le t\u00eb fillojm\u00eb me instalimin e Fn n\u00eb makinen lokale. S\u00eb pari, instalohet Docker, si\u00e7 k\u00ebrkon Fn. Supozohet q\u00eb jemi n\u00eb Debian\/Ubuntu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get update\n$ sudo apt-get install docker.io<\/code><\/pre>\n<p><\/p>\n<p>Ose p\u00ebrdorni menaxherin e paketave\/nd\u00ebrtimin e Docker sipas sistemit tuaj. M\u00eb pas, mund t\u00eb kaloni drejtp\u00ebrdrejt n\u00eb instalimin e Fn CLI. P\u00ebr shembull, me ndihm\u00ebn e curl:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl -LSs https:\/\/raw.githubusercontent.com\/fnproject\/cli\/master\/install | sh<\/code><\/pre>\n<p><\/p>\n<p>N\u00ebse punoni n\u00eb OSX me Homebrew t\u00eb instaluar, mund t\u00eb ndiqni nj\u00eb rrug\u00eb tjet\u00ebr:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ brew install fn\n\n==&gt; Downloading https:\/\/homebrew.bintray.com\/bottles\/fn-0.5.8.high_sierra.bottle.tar.gz\n==&gt; Downloading from https:\/\/akamai.bintray.com\/b1\/b1767fb00e2e69fd9da73427d0926b1d1d0003622f7ddc0dd3a899b2894781ff?__gda__=exp=1538038849~hmac=c702c9335e7785fcbacad1f29afa61244d02f2eebb\n######################################################################## 100.0%\n==&gt; Pouring fn-0.5.8.high_sierra.bottle.tar.gz\n  \/usr\/local\/Cellar\/fn\/0.5.8: 5 files, 16.7MB<\/code><\/pre>\n<p><\/p>\n<p>Tani q\u00eb gjith\u00e7ka \u00ebsht\u00eb gati p\u00ebr vendosjen fillestare t\u00eb funksionit ton\u00eb me p\u00ebrdorimin e CLI. P\u00ebr leht\u00ebsi, ne do t\u00eb p\u00ebrdorim ambientin e integruar p\u00ebr ekzekutimin, p\u00ebr shembull Node:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn init --runtime node --trigger http hellonode\n\nKrijimi i funksionit n\u00eb: \/hellonode\nStruktura e funksionit \u00ebsht\u00eb gjeneruar.\nfunc.yaml \u00ebsht\u00eb krijuar.<\/code><\/pre>\n<p><\/p>\n<p>Do t\u00eb krijohet nj\u00eb katalog i ri <code>hellonode<\/code> p\u00ebr zhvillimin e m\u00ebtejsh\u00ebm t\u00eb funksionit ton\u00eb Fn me disa skedar\u00eb konfigurimi baz\u00eb. Brenda katalogut t\u00eb sapokrijuar, mund t\u00eb krijoni aplikacionin tuaj, duke ndjekur standardet e gjuh\u00ebs ose ambientit t\u00eb ekzekutimit q\u00eb keni zgjedhur:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># \u041a\u0430\u0442\u0430\u043b\u043e\u0433 \u0441 node \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\n\n   hellonode\n   \u251c\u2500\u2500 func.js\n   \u251c\u2500\u2500 func.yaml\n   \u2514\u2500\u2500 package.json\n\n# \u0421\u0432\u0435\u0436\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 Java11 \u0442\u0430\u043a\u043e\u0435:\n\n   hellojava11\n   \u251c\u2500\u2500 func.yaml\n   \u251c\u2500\u2500 pom.xml\n   \u2514\u2500\u2500 src\n       \u251c\u2500\u2500 main\n       \u2502   \u2514\u2500\u2500 java\n       \u2502       \u2514\u2500\u2500 com\n       \u2502           \u2514\u2500\u2500 example\n       \u2502               \u2514\u2500\u2500 fn\n       \u2502                   \u2514\u2500\u2500 HelloFunction.java\n       \u2514\u2500\u2500 test\n           \u2514\u2500\u2500 java\n               \u2514\u2500\u2500 com\n                   \u2514\u2500\u2500 example\n                       \u2514\u2500\u2500 fn\n                           \u2514\u2500\u2500 HelloFunctionTest.java<\/code><\/pre>\n<p><\/p>\n<p>Fn krijon struktur\u00ebn fillestare t\u00eb projektit, krijon skedarin <code>func.yaml<\/code>, q\u00eb p\u00ebrmban instalimet e nevojshme p\u00ebr Fn, dhe vendos nj\u00eb model p\u00ebr kodin n\u00eb gjuh\u00ebn q\u00eb keni zgjedhur.<\/p>\n<p><\/p>\n<p>N\u00eb rastin e ambientit t\u00eb ekzekutimit Node, kjo do t\u00eb thot\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cat hellonode\/func.js\n\nconst fdk=require('@fnproject\/fdk');\n\nfdk.handle(function(input){\n  let name = 'World';\n  if (input.name) {\n    name = input.name;\n  }\n  return {'message': 'Hello ' + name}\n})<\/code><\/pre>\n<p><\/p>\n<p>Tani, ne do t\u00eb verifikojm\u00eb shpejt funksionin ton\u00eb lokal p\u00ebr t\u00eb par\u00eb si funksionon gjith\u00e7ka.<\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb filluar, ne do t\u00eb startojm\u00eb serverin Fn. Si\u00e7 \u00ebsht\u00eb th\u00ebn\u00eb m\u00eb par\u00eb, serveri Fn \u00ebsht\u00eb nj\u00eb kontejner Docker, k\u00ebshtu q\u00eb pas nisjes do t\u00eb marr\u00eb imazhin nga regjistri Docker.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn start -d                    # startojm\u00eb serverin lokal n\u00eb sfond\n\nNuk mund t\u00eb gjendet imazhi 'fnproject\/fnserver:latest' lokalmente\nlatest: Duke t\u00ebrhequr nga fnproject\/fnserver\nff3a5c916c92: T\u00ebrheqja t\u00ebrhequr plot\u00ebsisht\n1a649ea86bca: T\u00ebrheqja t\u00ebrhequr plot\u00ebsisht\nce35f4d5f86a: T\u00ebrheqja t\u00ebrhequr plot\u00ebsisht\n\n...\n\nStatusi: E shkarkuar imazhi m\u00eb t\u00eb ri p\u00ebr fnproject\/fnserver:latest\n668ce9ac0ed8d7cd59da49228bda62464e01bff2c0c60079542d24ac6070f8e5<\/code><\/pre>\n<p><\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0435\u0435 \u043d\u0430\u0434\u043e &#171;\u0432\u044b\u043a\u0430\u0442\u0438\u0442\u044c&#187;. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <code>emri i aplikacionit<\/code>: n\u00eb Fn t\u00eb gjitha aplikacionet duhet t\u00eb jen\u00eb t\u00eb caktuara si hap\u00ebsira emrash p\u00ebr funksionet e lidhura.<\/p>\n<p><\/p>\n<p>Fn CLI do t\u00eb k\u00ebrkoj\u00eb skedarin <code>func.yaml<\/code> n\u00eb katalogun aktual, q\u00eb do t\u00eb p\u00ebrdoret p\u00ebr konfigurimin e funksionit. Pra, s\u00eb pari duhet t\u00eb kalojm\u00eb n\u00eb katalogun ton\u00eb. <code>hellonode<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ cd hellonode\n$ fn deploy --app fnexo --local  # pohojm\u00eb funksionin lokal, emri i aplikacionit - fnexo.\n                                 # parametri local nuk ngarkon imazhin n\u00eb regjistrin e larg\u00ebt,\n                                 # duke e ekzekutuar direkt\n\nPo deploy-oj hellonode n\u00eb aplikacionin: fnexo\nVersioni \u00ebsht\u00eb rritur n\u00eb 0.0.2\nDuke nd\u00ebrtuar imazhin nfrankel\/hellonode:0.0.3 .\nDuke p\u00ebrdit\u00ebsuar funksionin hellonode duke p\u00ebrdorur imazhin nfrankel\/hellonode:0.0.3...\nKrijimi i aplikacionit:  fnexo ka qen\u00eb me sukses\nKrijimi i funksionit: hellonode me nfrankel\/hellonode:0.0.3 ka qen\u00eb me sukses\nKrijimi i trigerrit: hellonode-trigger ka qen\u00eb me sukses<\/code><\/pre>\n<p><\/p>\n<p>Si\u00e7 mund t\u00eb shihni nga dalja e komand\u00ebs, krijohet nj\u00eb imazh i ri konteineri p\u00ebr Docker, q\u00eb p\u00ebrmban funksionin ton\u00eb. Funksioni \u00ebsht\u00eb gati p\u00ebr thirrje, dhe kemi dy m\u00ebnyra p\u00ebr ta b\u00ebr\u00eb k\u00ebt\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>duke p\u00ebrdorur komand\u00ebn Fn <code>invoke<\/code><\/li>\n<li>duke e thirrur direkt p\u00ebrmes <code>http<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Thirrja <code>invoke<\/code> p\u00ebrmes Fn thjesht imiton funksionimin HTTP p\u00ebr teste, q\u00eb \u00ebsht\u00eb e dobishme p\u00ebr verifikim t\u00eb shpejt\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn invoke fnexo hellonode      # th\u00ebrrasim funksionin hellonode t\u00eb aplikacionit fnexo\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>P\u00ebr t\u00eb thirrur funksionin direkt, nevojitet t\u00eb dim\u00eb URL-n\u00eb e plot\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/localhost:8080\/t\/fnexo\/hellonode-trigger\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>Serveri Fn ofron funksionet e tij p\u00ebrmes portit 8080, dhe, si\u00e7 duket, URL-ja e funksionit p\u00ebrputhet me skem\u00ebn <code>t\/app\/function<\/code>, \u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u0427\u0435\u0440\u0435\u0437 HTTP \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 trigger, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u0432\u043e\u0435\u043c\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e &#171;\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442&#187; \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0432 <code>`func.yml<\/code> projekti:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">schema_version: 20180708\nname: hellonode\nversion: 0.0.3\nruntime: node\nentrypoint: node func.js\nformat: json\ntriggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode-trigger    # URL e trigger-it<\/code><\/pre>\n<p><\/p>\n<p>Mund t\u00eb ndryshojm\u00eb emrin e trigger-it q\u00eb t\u00eb p\u00ebrputhet me emrin e funksionit, kjo do ta thjeshtoj\u00eb gjith\u00e7ka:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">triggers:\n- name: hellonode-trigger\n  type: http\n  source: \/hellonode    # p\u00ebrputhet me emrin e funksionit<\/code><\/pre>\n<p><\/p>\n<p>M\u00eb pas, e aktivizojm\u00eb p\u00ebrs\u00ebri shp\u00ebrndarjen e funksionit dhe e th\u00ebrrasim at\u00eb nga trigger-i i ri:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo hellonode --local\n$ curl http:\/\/localhost:8080\/t\/fnexo\/hellonode\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p>T\u00eb gjitha funksionon! Koha \u00ebsht\u00eb p\u00ebr eksperimente t\u00eb natyrshme dhe t\u00eb publikojm\u00eb FaaS-in ton\u00eb n\u00eb server!<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-servisov-besservernyh-funkciy-na-sobstvennoy-infrastrukture\">Instalimi i sh\u00ebrbimeve t\u00eb funksioneve pa server n\u00eb infrastruktur\u00ebn ton\u00eb<\/h2>\n<p><\/p>\n<p>Le t'i vendosim shpejt nj\u00eb makin\u00eb virtuale duke p\u00ebrdorur CLI Exoscale. N\u00ebse ende nuk e keni ndar\u00eb \u2014 mund t\u00eb p\u00ebrdorni <noindex><a rel=\"nofollow\" href=\"https:\/\/community.exoscale.com\/documentation\/tools\/exoscale-command-line-interface\/\">udh\u00ebzimin ton\u00eb p\u00ebr nisjen e shpejt\u00eb<\/a><\/noindex>. Ky \u00ebsht\u00eb nj\u00eb mjet i shk\u00eblqyer q\u00eb do ta rris\u00eb edhe m\u00eb shum\u00eb produktivitetin tuaj. <strong>Mos harroni t\u00eb configuroni nj\u00eb rregull p\u00ebr hapjen e portit 8080 n\u00eb Grupin e Siguris\u00eb!<\/strong> Komandat e m\u00ebposhtme do t\u00eb startojn\u00eb nj\u00eb makin\u00eb virtuale t\u00eb past\u00ebr, gati p\u00ebr t\u00eb hostuar funksionet tan\u00eb:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo firewall create fn-securitygroup\n$ exo firewall add fn-securitygroup ssh --my-ip\n$ exo firewall add fn-securitygroup -p tcp -P 8080-8080 -c 0.0.0.0\/0\n$ exo vm create fn-server -s fn-securitygroup<\/code><\/pre>\n<p><\/p>\n<p>Pastaj mund t\u00eb lidheni p\u00ebrmes ssh n\u00eb makin\u00ebn virtuale dhe t\u00eb instaloni serverin e larg\u00ebt Fn:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ exo ssh fn-server\n\nAutenticiteti i host-it '185.19.30.175 (185.19.30.175)' nuk mund t\u00eb v\u00ebrtetohet.\nP\u00ebrshkrimi i \u00e7el\u00ebsit ECDSA \u00ebsht\u00eb SHA256:uaCKRYeX4cvim+Gr8StdPvIQ7eQgPuOKdnj5WI3gI9Q.\nJeni t\u00eb sigurt q\u00eb doni t\u00eb vazhdoni lidhjen (po\/jo)? po\nKujdes: Shtuar p\u00ebrher\u00eb '185.19.30.175' (ECDSA) n\u00eb list\u00ebn e hosteve t\u00eb njohur.\nMir\u00ebsevini n\u00eb Ubuntu 18.04 LTS (GNU\/Linux 4.15.0-20-generic x86_64)<\/code><\/pre>\n<p><\/p>\n<p>Pastaj instalohet Docker dhe serveri Fn ashtu si\u00e7 \u00ebsht\u00eb b\u00ebr\u00eb edhe n\u00eb makin\u00ebn lokale, filloni serverin:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ sudo apt-get update\n$ sudo apt-get install docker.io\n$ sudo systemctl start docker\n$ curl -LSs https:\/\/raw.githubusercontent.com\/fnproject\/cli\/master\/install | sh\n$ sudo fn start\n\n...\n\n    ______\n   \/ ____\/___\n  \/ \/_  \/ __ \n \/ __\/ \/ \/ \/ \/\n\/_\/   \/_\/_\/_\/\n    v0.3.643<\/code><\/pre>\n<p><\/p>\n<p>Fn \u00ebsht\u00eb gati p\u00ebr t\u00eb pranuar funksionet! P\u00ebr ngarkimin e funksioneve n\u00eb serverin e larg\u00ebt do t\u00eb p\u00ebrdorim komand\u00ebn <code>deploy<\/code> nga kompjuteri lokal, duke anashkaluar flamurin <code>--local<\/code>.<\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, Fn k\u00ebrkon t\u00eb specifikoni vendndodhjen e serverit Fn dhe regjistrit Docker. K\u00ebto parametra mund t\u00eb vendosen p\u00ebrmes variablave t\u00eb ambientit <code>FN_API_URL<\/code> dhe <code>FN_REGISTRY<\/code> p\u00ebrkat\u00ebsisht, por ofrohet edhe nj\u00eb m\u00ebnyr\u00eb m\u00eb t\u00eb leht\u00eb p\u00ebr menaxhimin e krijimit dhe konfigurimeve p\u00ebr shp\u00ebrndarje.<\/p>\n<p><\/p>\n<p>N\u00eb terma t\u00eb Fn, konfigurimi p\u00ebr shp\u00ebrndarje quhet <code>context<\/code>. Komanda e m\u00ebposhtme do t\u00eb krijoj\u00eb nj\u00eb kontekst:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn create context exoscale --provider default --api-url http:\/\/185.19.30.175:8080 --registry nfrankel<\/code><\/pre>\n<p><\/p>\n<p>Mund t\u00eb shihni kontekstet e disponueshme k\u00ebshtu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn list contexts\n\nCURRENT NAME      PROVIDER      API URL                      REGISTRY\n    default       default       http:\/\/localhost:8080\/\n    exoscale      default       http:\/\/185.19.30.175:8080    nfrankel\n<\/code><\/pre>\n<p><\/p>\n<p>Dhe mund t\u00eb kaloni n\u00eb kontekstin q\u00eb sapo u krijua k\u00ebshtu:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"> $ fn use context exoscale\n\nTani po p\u00ebrdoret konteksti: exoscale<\/code><\/pre>\n<p><\/p>\n<p>Duke filluar nga ky moment, shp\u00ebrndarja e funksioneve Fn do t\u00eb ngarkoj\u00eb imazhe Docker, duke p\u00ebrdorur llogarin\u00eb tuaj t\u00eb zgjedhur n\u00eb DockerHub (n\u00eb rastin tim \u2014 <code>nfrankel<\/code>), pas s\u00eb cil\u00ebs do t\u00eb njoftoj\u00eb serverin e larg\u00ebt (n\u00eb k\u00ebt\u00eb shembull \u2014 <code>http:\/\/185.19.30.175:8080<\/code>) p\u00ebr vendndodhjen dhe versionin e imazhit m\u00eb t\u00eb fundit q\u00eb p\u00ebrmban funksionin tuaj.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ fn deploy --app fnexo .   # ekzekutohet n\u00eb makin\u00eb lokale nga katalogu hellonode\n\nDuke shp\u00ebrndar\u00eb funksionin n\u00eb: \/.\nDuke shp\u00ebrndar\u00eb hellonode n\u00eb aplikacionin: fnexo\nRritur n\u00eb version 0.0.5\nDuke nd\u00ebrtuar imazhin nfrankel\/hellonode:0.0.5 .<\/code><\/pre>\n<p><\/p>\n<p>S\u00eb fundi:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ curl http:\/\/185.19.30.175:8080\/t\/fnexo\/hellonode\n\n{\"message\":\"Hello World\"}<\/code><\/pre>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Po nd\u00ebrtojm\u00eb serverless tonin mbi baz\u00ebn e Fn\" src=\"\/wp-content\/uploads\/2019\/11\/51a7b88cd6bf4953740cfac937b0acc2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Cikliku i jet\u00ebs s\u00eb funksionit n\u00eb llogaritjet pa server\u00eb t\u00eb bazuara n\u00eb Fn<\/em><\/p>\n<p><\/p>\n<h2 id=\"preimuschestva-besservernyh-vychisleniy-na-svoih-moschnostyah\">P\u00ebrpar\u00ebsit\u00eb e llogaritjeve pa server\u00eb n\u00eb infrastruktur\u00ebn tuaj<\/h2>\n<p><\/p>\n<p>Llogaritjet pa server\u00eb jan\u00eb nj\u00eb zgjidhje e leht\u00eb p\u00ebr implementimin e shpejt\u00eb t\u00eb pjes\u00ebve t\u00eb pavarura t\u00eb aplikacioneve q\u00eb nd\u00ebrveprojn\u00eb me aplikacione m\u00eb komplekse ose mikro-sh\u00ebrbime.<\/p>\n<p><\/p>\n<p>Shpesh, kjo lidhet me koston e fshehur t\u00eb lidhjes me ofruesin e zgjedhur, e cila, var\u00ebsisht nga rastet specifike t\u00eb p\u00ebrdorimit dhe volumi, mund t\u00eb \u00e7oj\u00eb n\u00eb kosto m\u00eb t\u00eb larta dhe ulje t\u00eb fleksibilitetit n\u00eb t\u00eb ardhmen.<\/p>\n<p><\/p>\n<p>Arkitekturat multi-rete dhe hibrid\u00eb gjithashtu vuajn\u00eb n\u00eb k\u00ebt\u00eb rast, sepse mund t\u00eb ndodheni leht\u00ebsisht n\u00eb nj\u00eb situat\u00eb ku do t\u00eb d\u00ebshironit t\u00eb p\u00ebrdorni llogaritjet pa server\u00eb, por kjo mund t\u00eb jet\u00eb e pamundur p\u00ebr shkak t\u00eb politikave t\u00eb korporatave.<\/p>\n<p><\/p>\n<p>Fn \u00ebsht\u00eb mjaft i leht\u00eb p\u00ebr t'u p\u00ebrdorur, dhe mund t\u00eb ofroj\u00eb nj\u00eb nd\u00ebrfaqe t\u00eb ngjashme me FaaS, me shpenzime t\u00eb vogla. Ai do t'ju \u00e7oj\u00eb nga \u00e7do lidhje me ofruesin, mund ta instaloni lokal ose n\u00eb \u00e7do ofrues t\u00eb zgjidhjeve cloud q\u00eb preferoni. Gjithashtu, ka liri n\u00eb zgjedhjen e gjuh\u00ebs s\u00eb programimit.<\/p>\n<p><\/p>\n<p>Artikulli paraqet vet\u00ebm bazat e Fn, por krijimi i nj\u00eb mjedisi ekzekutimi t\u00eb vet \u00ebsht\u00eb mjaft i thjesht\u00eb, dhe arkitektura e p\u00ebrgjithshme mund t\u00eb zgjeroh\u00ebt m\u00eb gjer\u00eb duke p\u00ebrdorur nj\u00eb balancues ngarkese Fn, ose duke vendosur Fn pas nj\u00eb proxy p\u00ebr mbrojtje.<\/p>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/475044\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u0437\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 DevOps\u2019\u043e\u0432, \u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0443\u0441\u043b\u0443\u0433. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &#171;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&#187; [&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-52562","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u0437\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 DevOps\u2019\u043e\u0432, \u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0443\u0441\u043b\u0443\u0433. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;\" \/>\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\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\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\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 serverless \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Fn | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u0437\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 DevOps\u2019\u043e\u0432, \u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0443\u0441\u043b\u0443\u0433. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn\" \/>\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-11-10T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:19+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\udd47Ndertojme serverin ton\u00eb pa server n\u00eb baz\u00eb t\u00eb Fn | ProHoster","description":"Llogarit\u00eb pa server jan\u00eb nj\u00eb nga trendet m\u00eb t\u00eb dukshme n\u00eb llogarit\u00eb cloud. Parimi kryesor \u00ebsht\u00eb se infrastruktura nuk \u00ebsht\u00eb nj\u00eb shqet\u00ebsim p\u00ebr DevOps, por p\u00ebr ofruesin e sh\u00ebrbimeve. Burimet shkall\u00ebzohen automatikisht sipas ngarkes\u00ebs dhe kan\u00eb nj\u00eb shpejt\u00ebsi t\u00eb lart\u00eb ndryshimi. Nj\u00eb tjet\u00ebr karakteristik\u00eb e zakonshme \u00ebsht\u00eb tendenca p\u00ebr t\u00eb minimizuar dhe p\u00ebr t\u00eb p\u00ebrqendruar kodin, prandaj llogarit\u00eb pa server ndonj\u00ebher\u00eb quhen \"funksion si sh\u00ebrbim\".","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","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\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 serverless \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Fn | ProHoster","og:description":"\u0411\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u2014 \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0439 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u2014 \u0437\u0430\u0431\u043e\u0442\u0430 \u043d\u0435 DevOps\u2019\u043e\u0432, \u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0443\u0441\u043b\u0443\u0433. \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0414\u0440\u0443\u0433\u0430\u044f \u043e\u0431\u0449\u0430\u044f \u0447\u0435\u0440\u0442\u0430 \u2014 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044f \u043a \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 &quot;\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430&quot;","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/stroim-sobstvennyj-serverless-na-osnove-fn","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-11-10T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52562","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 04:03:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:41:24","updated":"2026-01-24 04:03:20"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/52562","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=52562"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/52562\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=52562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=52562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=52562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}