Přejít k navigační liště

Zdroják » Různé » App Engine: statický web za deset minut i s hostingem u Google zdarma

App Engine: statický web za deset minut i s hostingem u Google zdarma

Články Různé

Google App Engine je známá cloudová služba, která nabízí vývojářům zajímavou možnost provozování aplikací zdarma, pokud nároky nepřesáhnou určitou „rozumnou mez“. Nemáte-li tedy aplikaci náročnou na zdroje, přenosovou kapacitu nebo úložný prostor, můžete tuto platformu využívat zdarma, a to i pro statický web.

Před časem jsme si ukazovali, jak lze použít datové úložiště Amazon S3 pro hostování statického webu. Stejnou službu může odvést i Google App Engine – ačkoli ten je častěji spojovaný s během webových aplikací, lze jej použít i pro statický web.

Nejprve je potřeba mít účet pro službu Google App Engine. Postup je obdobný se zřizováním účtu v dalších službách od Google, nebudeme se mu tedy věnovat a budeme předpokládat, že účet už máte.

Trocha teorie

Google App Engine nabízí hostingové služby pro aplikace, napsané v Pythonu nebo v Javě. V případě potřeby lze použít např. i PHP, a to pomocí jeho interpretu, napsaného v Javě. Hlavní oblast využití spočívá ale právě ve výše jmenovaných jazycích.

Historicky starší podpora je pro Python (a pythonské verzi se budeme věnovat i v tomto článku). App Engine používá Python verze 2.5, novější verze nejsou podporovány, a budete-li pro App Engine vyvíjet, počítejte s tím. Nás se statickým webem nemusí verze Pythonu až tak dalece zajímat, přesto se jeho použití nevyhneme.

App Engine totiž nenabízí klasické „deployment“ metody, jako je FTP či „webové rozhraní“. Soubory se na server nahrávají pomocí speciálního nástroje appcfg (utilita pro příkazový řádek), nebo pomocí App Engine konzole (Launcher), která se o deploy stará za nás. Oba nástroje jsou součástí App Engine SDK, které si musíme nejprve stáhnout a nainstalovat. Pro App Engine existuje řada dalších užitečných nástrojů, které ale pro obyčejný statický web nepotřebujeme.

Krok za krokem

Vytvoříme si nejprve novou aplikaci ve webovém Dashboardu. Určíme jí možnost přihlašování uživatelů a zálohování (obojí můžeme nechat na výchozích hodnotách). Jméno aplikace musí být unikátní v rámci celého App Engine. Toto jméno je součástí adresy (xxx.appspot.com), pod níž bude web dostupný. Samozřejmostí je i možnost nastavení CNAME záznamů a přesměrování vlastní domény.

Aplikaci se stejným jménem si vytvoříme i v Launcheru na lokálním počítači. Musíme zadat adresář, v němž se budou nacházet soubory pro aplikaci.

Při prvním spuštění Launcheru bude zapotřebí nastavit cestu k interpretu Pythonu, k vlastnímu SDK a k textovému editoru.

Při vytváření aplikace jste si mohli všimnout políčka pro „port“. App Engine SDK má v sobě běhové prostředí, které funguje stejně jako samotný App Engine, takže jeho prostřednictvím je možné lokálně testovat napsané aplikace – slouží k tomu volba „Run“ v Launcheru, která spustí jednoduchý lokální webserver na zadaném čísle portu.

Konfigurace

Nejdůležitějším souborem u pythonské aplikace v App Engine je konfigurační soubor s názvem app.yaml (pro Javu je obdobou appengine-web.xml, ale javovským runtimem se v tomto článku zabývat nebudeme). Tento soubor je, jak už název naznačuje, ve formátu YAML. Obsahuje základní metainformace o projektu a pravidla pro routování URL. Ve výchozím nastavení vypadá nějak takto:

application: myapp
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
  script: main.py

V souboru je jméno aplikace, její verze, použitý runtime (podle jazyka) a verze API App Engine. Poslední položkou jsou handlers, tvořené seznamem URL a odpovídajících akcí. V základní podobě, která je uvedená výše, je nastavené routování všech požadavků ( url: .*) tak, že je zpracovává skript  main.py.

V app.yaml můžete použít velké množství voleb, pomocí kterých můžeme nastavit nejrůznější vlastnosti. Kromě routování statických souborů, které využijeme i v našem příkladu, můžeme nastavit např. přihlašování uživatelů, cestu k administrátorským skriptům, statistiky, propojení s XMPP a další.

Statické routování

U webových aplikací není zpracovávání skriptovacím jazykem žádoucí vždy a za všech okolností. Mnohé soubory (obrázky, kaskádové styly, JavaScriptové knihovny, soubory ke stažení, statické HTML stránky, …) mohou být posílány uživatelům tak, jak jsou; jejich zpracování pomocí skriptovacího jazyka je nejen zbytečné, ale také zpomaluje a přidělává práci. V takové situaci můžeme použít statické routování – tedy místo parametru script říct, že daný handler bude fungovat buď pro konkrétní soubor(y) nebo celý adresář.

Příklad:

application: myapp
version: 1
runtime: python
api_version: 1
default_expiration: "7d"
handlers:
- url: /img
  static_dir: img
- url: /css
  static_dir: css
- url: /js
  static_dir: js

Všechny požadavky, jejichž cesta v URL bude začínat /img (resp. /css či /js) budou brány jako požadavky na statické soubory, umístěné v patřičných adresářích. V handlerech, používajících static_dir, lze uvést i vlastnost mime_type, která nastaví souborům, jež budou daným handlerem odesílány, konkrétní MIME typ. Pokud mime_type neuvedeme, bude typ určován podle přípony.

Pomocí výše uvedeného zápisu jsme si nastavili routování statických souborů z adresářů img, css a js. Nemáme ale nastavené routování pro hlavní HTML soubor (či soubory). Hned to napravíme:

application: myapp
version: 1
runtime: python
api_version: 1
default_expiration: "7d"
handlers:
- url: /img
  static_dir: img
- url: /css
  static_dir: css
- url: /js
  static_dir: js
- url:  /(.*.html)
  static_files: 1
  mime_type: text/html
  upload: (.*.html)

Handler se static_files umožňuje určit mapování jednotlivých souborů, dokonce pomocí regulárních výrazů. Poslední handler tedy ovládá požadavky na všechny soubory s příponou .html, říká, že server má poslat ty se stejným názvem ( static_files: /1) a má je poslat s typem text/html. Poslední direktiva (upload) říká appcfg/Launcheru, které soubory z lokálního disku má na server nahrát – on totiž nedokáže sám určit statické soubory, které je potřeba uploadovat na server.

Touto úpravou jsme si zajistili, že se na server nahrají všechny soubory z kořenového adresáře aplikace, které mají příponu .html, plus kompletní obsah adresářů /img, /css a /js. Statický web už máme téměř připravený, zbývá jen poslední věc: zajistit správné poslání indexového souboru v případě, že uživatel zadá jen adresu domény bez cesty.

Na konec app.yaml přidáme poslední handler:

- url: /
  static_files: index.html
  upload: index.html

… a je to! Máme nastaveno.

Deploy

V tuto chvíli zbývá jen nahrát do pracovního adresáře patřičné soubory, soubor main.py můžeme smazat (vygeneroval ho Launcher) a zadáme Deploy. Launcher se nás zeptá na uživatelské jméno a heslo. Pak vše potřebné nahraje na server a otestuje, zda byla aplikace nahrána správně.

Pokud budeme se soubory experimentovat, brzy nás začne nutnost zadávat jméno a heslo obtěžovat. Můžeme se jí vyhnout tím, že použijeme řádkovou utilitu appcfg.py, která si dokáže přihlašovací údaje zapamatovat.

Pro snazší „deploy“ si můžete vytvořit např. podadresář scripts a do něj umístit dávkový soubor (.bat / .sh), který bude obsahovat jen:

appcfg.py update ../ -e vase.uzivatelske.jmeno@gmail.com

Při prvním spuštění se zeptá na heslo, při dalších se už neptá. Tento skript můžeme např. navázat jako obsluhu commitu ve verzovacím systému.

Statický web sice může vypadat jako degradace schopností App Engine, ale přesto nalezne, obzvlášť v kombinaci s HTML5, mnoho možností využití. Příkladem budiž web HTML5 Rocks, který je hostován právě v App Engine.

V článku jsme si ukázali, jak vytvořit projekt v systému Google App Engine, jak nastavit jednoduchá routovací pravidla pro statický web a jak nahrát soubory na server. V pokračování si ukážeme, jak statický web oživit a využít serverových možností pro obsluhu AJAXových požadavků.

Komentáře

Subscribe
Upozornit na
guest
31 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
LV

Ma nekdo prosim vyzkouseny v praxi ten Java PHP interpreter? Tim nemyslim nejaky Hello world, spis by me zajimalo jestli dochazi k nejakym omezenim, degradaci vykonu apod. Ergo jestli ma vyznam zvazovat Google App Engine jako hosting pro hodne zatizenou aplikaci psanou v PHP..

Opravdový odborník :-)

Nevím, jak u Googlu, ale než degradaci čekej spíš zlepšení — někde jsem viděl zajímavý test, kde srovnávali výkon Drupalu nad nativním PHP a nad javovskou implementací PHP — Java byla výrazně lepší.

v6ak

Nejsem si jist, ale mám pocit, že Querces má dvě verze – ta zdarma interpretuje a ta placená umí kompilovat.

Pepa

s PHP zkušenosti nemám, ale něco jsem četl o nasazení JRuby (interpret Ruby v Javě). Víceméně to funguje, hlavní problém ale byl, že jako ORM se může použít jen DataMapper a jako databáze jen Bigtable. Ale to by možná šlo řešit nějak pomocí Amazonu.

srigi

Pre PHP existuju nativne cloud riesenia, napr. Relbit alebo PhpFog.

Honza

Když se v jedné větě objeví „hodne zatizenou aplikaci“ a „PHP“, pak to zavání velkým průšvihem. Interpret jazyka PHP je pomalý a těžkopádný sám o sobě, a mělo kvůli němu zbytečné výkonnostní problémy tolik známých projektů, že o jeho nasazení pro zatěžovanou aplikaci dnes snad už nikdo ani neuvažuje…

v6ak

Teoreticky tomu může pomoci volba vhodné implementace. A ona to asi není utopie – vizte HipHop.

skrat

…ale to co tu opisujes je presne spomenute v dokumentacii, a pise sa tam aby to ludia nerobili. Takze tento clanok je nieco typu „Ako si spravit z skodovky gril“ (resp. z Ferrari). Pokial sa takych chytrakov ako ty a ti co budu ten clanok nasledovat, najde viac, tak jedine co sa logicky da od Google ocakavat je ze tam da dalsi kontrolny mechnizmus, aby takemuto zneuzivaniu zamedzil. Preco by si si hostoval staticky web na GAE, ked si ho mozes hosnut na Amazon S3, ktory je pre tieto ucely robeny?

Inkvizitor

Protože je to zadarmo? Proč by si měl šmudla domácí svůj dvoustránkový webík o pěstování bramboříků umisťovat na nějaký klasický free hosting, když to může mít zadarmo na cloudu a být tak free, cool a in? ;-)

skrat

Mozno preto lebo ked je niekde napisane „Zakaz koureni“ tak si nezapalim, aj ked viem ze ma nikdo neprichyti. Ked je v dokumentacii napisane aby ludia nehostovali staticky obsah na GAE, tak ho tam predsa hostovat nebudem. Najdes to v slovniku pod slovom respekt

Inkvizitor

Já jsem příliš líný na to, abych své příspěvky označoval tagem <i>ironie</i>, přestože jsem zjistil, že většina lidí mé nevážně míněné příspěvky nechápe a to ani v případě, že v nich použiju indicie typu „dvoustránkový webík o pěstování bramboříků“ a „šmudla domácí“. Neber si to osobně; když jsem napsal blog post s názvem O rohlíkových a chlebových lidech, taky prakticky nikomu nedocvaklo, že to fakt nemyslím vážně…

Michal

Vitej v klubu. Ja jsem taky desne vtipnej, akorat ze me nikdo nechape a vsichni si mysli ze jsem kokot…

Inkvizitor

;-).

Pepa

LOL dost dobrý :Df

Dodo

Zadarmo to sice je ale netreba zabudat na to ze domena je v tvare: meno-aplikacie.appspot­.com. A to neznie dost lakavo ani na takeho domaciho smudla :)…

Viktor

domena kterou vam GAE prideli je v tvaru jak pisete, ale nic vam nebrani priradid si vlastni domenu, v libovolnem poctu …. nepiste bludy

Pavel

a ty domeny jsou taky zadarmo? To spis ma smysl koupit domenu tam kde mi k tomu daji i kousek statickeho hostingu v cene nez toto….

Čelo

Cloud… to je oč tu běží….

Hmmm

Podla toho to vyzera ako bezny freehosting. Len s inym nazvom.

Viktor

jestli vám splívá freehosting u nějakého providera s jednou mašinou na které kromě vašeho webu beží 1000 dalších a cloudové řešní typu PaaS (to je to co nabízí google). Tak to znamená že o cloudu nevíte nic a pokud se nechcete dále ztrapňovat doplňte si vzdělání …

Opravdový odborník :-)

Trochu samoúčelné. Ale co, ono to lidi zase přejde a najdou si jinou hračku :-)

Dodo

No ale v tom pripade to uz nebude zadarmo ze ano…

Viktor

vlastních domén si můžete asociovat kolik chcete ZADARMO, já tyto reakce nechápu …

Bob

Šmudla domácí si může svůj dvoustránkový web dát na Google Sites, včetně mapování vlastní domény smludluvbrambo­rik.cz – zdarma (pokud to šmudla zvládne)

Starej anonym

kde to prosimte pisou?

pek

Nikde, podmínky to nezakazují.

shade

Ve skutečnosti začal nedávno Google App Engine podporovat Google Go:
https://code.google.com/appengine/docs/go/overview.html

Psalo se o tom i tady na rootu: http://www.root.cz/zpravicky/google-zaradil-go-do-app-engine/

O.

hnevkop

Ja vim ze ho nemate radi…
Ale GAE ma paradni plugin pro Eclipse, takze spolu s GWT se da hezky pro Javu ( ale i pro Python) dratovat v IDE. Umi jak lokani runtime depl. popsany v clanku tak samozrejme ostry deployment.

pali

nebudem chodit okolo horucej kase, ale skusal som to cez ten python ale po vsetkych tych nastaveniach som potvrdil deploy a vyhodilo mi to hlasku

NameError: global name ‚execfile‘ is not defined
2012-10-19 20:56:48 (Process exited with code 1)

neviete kde robim chybu.

Inak je to riadne komplikovane, ale dostal som sa zatial potialto a chcel by som to skusit, poradte kde je chybaongedesc 156.

Martin Hassman

Tipoval bych na nekompatibilní verzi Pythonu. Viz také http://stackoverflow.com/questions/10227142/nameerror-global-name-execfile-is-not-defined-trying-to-run-an-app-on-google kde ukazují, jak nastavit cestu ke správné (starší, 2.7.) verzi Pythonu (pokud si ji přiinstalujete)

palioli

diky idem to preinstalovat daval som tam najnovsiu verziu 3.3 tak to bude hadam v tom

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.