Jak hostovat lehké aplikace zdarma

S laskavým svolením Luise Llereny

Při hledání webhostingových služeb existuje mnoho bezplatných možností. Není však mnoho míst, kde můžete hostovat úplné webové aplikace, které zahrnují API, CGI nebo AJAX backendové dotazy - zejména pokud chcete použít něco jiného než PHP.

Tento článek je jednoduchým, ale smysluplným průvodcem „procházka před spuštěním“, jak začít s hostováním skriptů na cloudových serverech.

Kdy použít cloudovou aplikační platformu

Platformy cloudových aplikací fungují dobře ve scénářích, ve kterých potřebujete trochu kódu pro spuštění na serveru. Mnoho z těchto platforem nabízí řadu aplikačních kontejnerů založených na Linuxu (které se objevují jako virtuální stroje), kde implementujete kód vyvinutý na místním počítači pomocí sady klíčových slov příkazového řádku.

Heroku je jedna taková služba, kterou můžete relativně snadno použít k hostování kódu (v různých jazycích). Nabízí freemiový model, kde vám umožní zdarma využívat asi 500 hodin práce s počítačem (jejich plné ceny jsou zde).

Od května 2017 můžete programovací jazyky hostovat pod Heroku

Po napsání kódu na místní plochu můžete provádět příkazy, které kód nasadí na pracovní plochu v Heroku. Kód se potom spustí v závislosti na spouštěči. Spouštěči mohou být naplánovaná úloha, webový server, který se spouští prostřednictvím žádosti o webovou stránku, nebo něco, co neustále běží a zpracovává data - což by mohlo být docela drahé.

Opravdu příjemné je, že se nemusíte starat o operační systém (paměť, úložiště, CPU, bezpečnostní záplaty), protože to vše je spravováno za vás - ale zároveň to znamená, že máte omezenou flexibilitu, protože nemůžete alokovat zdroje přímo.

Některé konkrétní příklady, kde pro vás může Heroku dobře fungovat:

  • Hosting vlastního webu, na kterém chcete napsat svůj vlastní webový server
  • Pravidelně škrábat data z webové stránky a poté je ukládat do databáze pro analýzu
  • Nabídka serveru API pro konkrétní úkol. Věci, jako je nabízení dat o počasí, ukládání dat ze senzoru Internet of Things nebo webové služby, vyžadují model strojového učení
  • Databázová služba (ačkoli služba, jako je Firebase, je možná vhodnější)

Heroku Architecture

Heroku vám nabízí lehký virtuální stroj (VM) pro nasazení kódu. V rámci bezplatné možnosti můžete nasadit až 5 aplikací, které jsou považovány za 5 lehkých virtuálních počítačů. Pro vaši skutečnou aplikaci je v Heroku uvedena samostatná subdoména URL. Názvy projektů tedy musí být jedinečné.

Tyto pracovní prostory mají svůj vlastní prostor pro komponenty, jako jsou: kódové a zdrojové soubory (nikoli dynamické datové soubory), databáze (Postgres) a protokolové soubory.

Na vaší místní ploše používá Heroku název vašeho adresáře k definování vašeho projektu a také pro Heroku k pochopení vašeho kontextu. Můžete tedy mít více projektů v různých adresářích a při spuštění příkazů Heroku - ujistěte se, že tak učiníte ve správné složce.

Jednu klíčovou věc, kterou musíte znát (což jsem tvrdě odhalil během hodin ladění - přeji si, abych věnoval více pozornosti dokumentaci) je, že vše se spouští z paměti. Neexistuje žádné trvalé úložiště. Řeknu to znovu - na souborovém serveru nemůžete ukládat žádné soubory! Pro vytrvalost nabízí Heroku posloupnou databázi SQL, do které můžete podle potřeby přidávat záznamy.

Jednoduchý příklad - detekce změn webových stránek

Zde je podrobný průvodce, jak získat funkční příklad jednoduché služby, která vám pošle e-mail, pokud se web změní, v podstatě klon www.changedetection.com. Bude to mít několik klíčových komponent:

  1. Databáze, která bude ukládat: a) e-mailovou adresu pro oznámení o změně webové stránky; b) sledovanou webovou stránku; c) poslední „kopie“ webové stránky
  2. Kus kódu, který zkontroluje daný web z databáze v # 1 (skript Python)
  3. Plánovač úloh, který spustí program v # 2 (ekvivalent úlohy cron)
  4. Webové uživatelské rozhraní, kde můžete přidávat / mazat weby, které chcete sledovat, do databáze uvedené v bodě 1
  5. Mechanismus odesílání e-mailů

Pochopení těchto komponentů vás vyzbrojí dovednostmi, abyste již mohli dělat spoustu věcí. Všechny tyto věci jsem se naučil prostřednictvím několika zdrojů, takže to funguje jako konsolidovaný příspěvek.

Předpoklady

Následující průvodce uvádí následující předpoklady:

  • Máte účet GitHub - pokud jej nemáte, vytvořte jej zde. Měli byste si také přečíst tento jednoduchý průvodce.
  • Už máte účet Heroku - pokud jej zde prosím nevytvoříte.
  • Používáte počítač se systémem Windows - pokud ne, je to v pořádku, pokyny jsou v jiných prostředích docela podobné
  • Již máte nainstalovaný Python - pokud ho nemáte, nainstalujte jej prosím zde
  • V Pythonu již můžete programovat - pokud ne, navrhuji, abyste se nejprve naučili základy. Někteří průvodci jsou zde.
  • Znáte SQL - pokud tomu tak není, jděte sem.

Přehled kroků

Zjistil jsem, že projít přístupem „chůze dříve, než můžete spustit“, pomůže s procesem učení. Slouží také jako dokumentace pro sebe, jak vyřešit každý kus většího procesu. Pokud se tedy ve vašem budoucím úsilí něco zlomí, máte větší šanci přijít na to, kde se to pokazilo.

Krok 1: Vytvořte webové uživatelské rozhraní - nejprve vytvořte Hello World

Krok 2: Perzistence - vytvoření databáze

Krok 3: Zkontrolujte změny webových stránek

Krok 4: Pošlete e-mailové upozornění na změny

Krok 5: Seznam výstupů na webové stránce

Krok 6: Nasazení

Krok 1: Vytvořte webové uživatelské rozhraní - nejprve vytvořte Hello World

Nejprve si na Heroku nasaďte jednoduchý program, abychom mohli začít. Tento program bude předchůdcem webového uživatelského rozhraní (položka č. 4) ve výše uvedeném seznamu součástí. Abychom mohli stránku obsluhovat, mohli bychom jednoduše mít stránku HTML, ale pak bychom potřebovali webový server, který by tento soubor serveroval. Jinými slovy, pokud zadáte adresu URL webu, program bude muset požadavek interpretovat a poté poskytnout obsah souboru HTML. Můžete si vytvořit svůj vlastní mini webový server pomocí knihovny Flask Python, což uděláme.

  • Vytvořte složku s názvem webchecker a přejděte do tohoto adresáře (tento název adresáře nemusí být stejný jako název aplikace Heroku)
  • Nainstalujte knihovnu baňky. Zadejte příkaz: npm Baňka
  • Vytvořte následující program Python a pojmenujte ho showchecks.py:

Před nasazením na Heroku si vyzkoušejte, zda funguje na místním počítači. Můžete to vyzkoušet pomocí následujících kroků:

  • Spusťte program: python webchecker.com
  • Otevřete prohlížeč na místním počítači a otevřete stránku: http: // localhost: 5000 / hello
Spuštění skriptu vrátí statickou stránku s výstupem „ahoj svět“

Poté to nasaďte na Heroku. Před nasazením musí být k dispozici několik dalších souborů, které Heroku pomohou dozvědět se více o vaší aplikaci.

Za prvé, požadavky.txt

Za druhé, soubor, který řekne Heroku, co se má spustit, když se provede webová žádost:

Nakonec používáme runtime verzi Pythonu (výchozí je 2,7, ale chceme specifikovat nejnovější verzi Pythonu):

Proto byste měli mít čtyři soubory:

  1. showchecker.py, což je kód
  2. requirements.txt pro seznam nestandardních knihovních závislostí. Kdykoli máte nové knihovny, které nejsou součástí standardní knihovny Python - tj. Musíte je nainstalovat pomocí nástroje, jako je „pip“ - přidejte je sem. Verze nainstalované knihovny, jako je například baňka, najdete spuštěním příkazu: pip show Flask v příkazovém řádku
  3. Procfile, což je skutečný skript Pythonu, který se má spustit při vyvolání webové stránky - nezapomeňte to aktualizovat, pokud změníte soubor Python
  4. runtime.txt, což je skutečná verze pythonu, která se má použít

Můžete nasadit pomocí následujících kroků z příkazového řádku:

  1. heroku create webchecker01 - buildpack heroku / python
  2. git add *. * *
  3. stav git
  4. git commit -m „všechny soubory“
  5. git push heroku master
Po spuštění „git push heroku master“ se zobrazí protokoly nasazení včetně adresy URL, kde je nasazen

V případě příkazu č. 1 (vytvoření heroku…) je část „webechecker01“ jedinečným názvem, který budete muset zadat pro název aplikace.

Pro příkaz č. 3 (stav git) vám řekne, jaké soubory jsou připraveny k nasazení. Ujistěte se, že jsou tam všechny soubory, pokud je nepřidáte pomocí git add .

Nyní můžete zkontrolovat svůj web: .herokuapp.com / ahoj

Ahoj světový program běžící na webu

Ujistěte se také, že můžeme zobrazit protokoly, protože je to skvělý způsob, jak zjistit, co se děje s aplikačním serverem. Na počítači a v adresáři webového prohlížeče spusťte příkaz: heroku logs

„Heroku logs“ je zásadní příkaz ke spuštění, aby se zjistilo, co se děje na aplikačním serveru

Uvidíte poslední kroky provedení. Pokud věci nefungují podle očekávání, je to vaše první zastávka, kde se dozvíte více podrobností.

Svou spotřebu můžete také přejít na hlavní panel Heroku:

https://dashboard.heroku.com

Krok 2: Perzistence - vytvoření databáze

Chcete-li vytvořit užitečnější programy, budete potřebovat datový sklad nejrůznějších druhů. Zde přichází do hry databázová služba Postgres. Nejprve musíte nasadit databázovou službu Heroku, poté vytvořit tabulky a nakonec se k databázi připojit z vašeho kódu lokálně (pro testování).

Chcete-li nasadit databázovou službu, vytvořte ji nejprve pomocí následujícího příkazu:

Heroku addons: create heroku-postgresql: hobby-dev

Dále otevřete databázi z příkazového řádku a vytvořte tabulky. Databáze je vytvořena na cloudové službě Heroku a ne lokálně. Můžete jej však získat prostřednictvím příkazového řádku. Chcete-li se přihlásit k databázi pomocí konzoly, spusťte příkaz heroku pg: psql. Nezapomeňte, že to musíte udělat ve složce webcheckeru, aby Heroku věděl, že se jedná o databázi webového serveru webchecker.

Chcete-li zobrazit seznam tabulek, zadejte příkaz \ d

Chcete-li vytvořit tabulku, musíte použít normální příkazy SQL. V našem programu webchecker vytvoříme tabulku s následujícími sloupci:

  • ID - automaticky generované ID pro každou položku (bude to primární klíč). To se provádí pomocí typu „serial“
  • web - web, který chcete sledovat
  • emailaddress - emailová adresa, na kterou bude zasláno oznámení o změně
  • lasthashcode - neukládáme kopii celé webové stránky, namísto toho vygenerujeme hash založený na HTML stránky a potom ji porovnáme. Toto je efektivnější úložiště, ale neřekne nám, co se ve skutečnosti změnilo
  • lastchangedate - datum, kdy se web naposledy změnil. Proto dostaneme databázi do výchozího stavu s aktuálním datem

Chcete-li vytvořit tuto tabulku, zadejte do konzoly databáze Heroku Postgres následující příkaz:

CREATE TABLE webcheckerdb (id serial, web varchar (250), emailaddress varchar (250), lasthashcode varchar (32), lastchangedate timestamp DEFAULT current_date);

(Nezapomeňte na konec zahrnout středník!)

Vytvoření databáze, poté pomocí přepínače \ d zobrazíte seznam tabulek a poté „\ d webecheckerdb“ pro zobrazení sloupců

Dále vložíme do databáze jeden záznam, abychom se ujistili, že máme něco, s čím bychom měli pracovat, než zprovozníme naše webové uživatelské rozhraní (můžete použít svou vlastní e-mailovou adresu, aby v budoucnu fungovala):

VLOŽTE do hodnot webcheckerdb (DEFAULT, 'news.google.com', 'email@me.com', '', DEFAULT);

(Nezapomeňte na konec zahrnout středník!)

Poté můžete provést výběrový příkaz (včetně středníku na konci!) A zobrazit data

Můžete ukončit pomocí \ q.

Krok 3: Zkontrolujte změny webových stránek

Nejprve si získáme část kódu, abychom alespoň zkontrolovali, zda lze načíst pevně kódovaný web (v návaznosti na koncept chůze před spuštěním).

Prvním krokem je tedy zjistit, zda můžeme webovou stránku načíst, hashovat a poté ji porovnat s pevně zakódovaným hashem. Vytvořte nový soubor Python s názvem checkwebsite.py. Zde kód:

Spuštěním tohoto výstupu získáte následující výstupy:

Pokud máte nějaké chyby s chybějícími knihovnami, můžete je přidat pomocí: pip install z příkazového řádku.

Dále se připojíme k databázi pomocí následujícího kódu:

Při pokusu o spuštění tohoto kódu pravděpodobně dojde k chybě formuláře KeyError: „DATABASE_URL“. Je to proto, že váš kód Python se snaží najít webovou adresu databáze Postgres hostované na Heroku. To je automaticky aktualizováno na proměnnou prostředí DATABASE_URL na serveru Heroku. Na vašem místním počítači to však musíte udělat ručně:

  1. heroku config
  2. set DATABASE_URL =
Pokud se zobrazí chyba DATABASE_URL, nastavte proměnnou prostředí

Krok 4: Pošlete e-mailové upozornění na změny

Posledním krokem je odeslání e-mailu. Chcete-li to provést, budete muset nainstalovat doplněk, který dokáže odesílat e-maily - najdete je na trhu Heroku: https://elements.heroku.com/addons

Zde je doplněk s názvem SendGrid: https://elements.heroku.com/addons/sendgrid

SendGrid můžete přidat do aplikace na příkazovém řádku zadáním:

heroku addons: create sendgrid: starter

Když přejdete na hlavní panel, uvidíte nový addon v sekci Zdroje:

Doplněk SendGrid, který umožňuje odesílání e-mailů, bude dole

Před použitím je nutné vytvořit klíč API. Poklepejte na komponentu SendGrid výše a přejděte do Nastavení-> Klíč API-> Vytvořit klíč (modré tlačítko vpravo nahoře).

Klikněte na tlačítko Vytvořit klíč vpravo nahoře

Jakmile vytvoříte klíč, zkopírujte jej a vraťte se zpět do příkazového řádku a zadejte:

heroku config: set SENDGRID_API_KEY =

Tím se zaregistruje pouze na serveru, musíte jej přidat místně na plochu pomocí:

set SENDGRID_API_KEY =

Po dokončení můžete svůj kód vyzkoušet v novém skriptu Python s názvem sendmail.py. Nainstalujte knihovnu pomocí pip install sendgrid:

Chcete-li potvrdit, že e-mail byl odeslán a doručen, můžete se vrátit na hlavní panel SendGrid a zkontrolovat obrazovku Přehled statistik:

Při kontrole e-mailu nezapomeňte zkontrolovat spam.

Jakmile to funguje, existují pouze dva řádky kódu, které musíte přidat do hlavního skriptu checkwebsite.py. To je:

import sendmail #import výše uvedeného podprogramu pro odesílání e-mailů
...
# Vyvolejte podprogram po nalezení hashcode se změnil
sendmail.sendemail (webrecord ['emailaddress'], 'Web změněn', webrecord ['web'] + 'změněn')

Celý kód je zde:

Krok 5: Vypište výstup na webové stránce a naplánujte úlohu

Dalším krokem je výpis výstupu na webové stránce.

To zahrnuje dotazování databáze a poté procházení a zobrazování dat na obrazovce. Z toho vyplývá výše uvedený kód „Hello World“ a provede úpravy. Vytvořil jsem pro to také jinou cestu, takže si ji musíte vyzkoušet na adrese URL: http: // localhost: 5000 / list

A tady je výstup:

Krok 6: Nasazení

Posledním krokem je nasazení všeho na Heroku a naplánování úlohy tak, aby zkontrolovala e-mail.

Měli byste mít následující soubory:

  1. Procfile - soubor, který ukazuje na showchecker.py
  2. requirements.txt - soubor, který obsahuje závislosti knihovny
  3. runtime.txt - verze pythonu
  4. showchecker.py - pythonový kód, který zobrazuje výstup databáze na webu přes .herokuapp.com / list
  5. checkwebsite.py - pythonový kód, který kontroluje případné změny na webových stránkách

Pro požadavky.txt budete muset provést změny, abyste přidali nejnovější knihovny:

Nasadit je všechny na Heroku:

  1. git add *. * *
  2. git commit -m „nasazení“
  3. git push heroku master

Otestujte každou součást:

  1. Přejděte na .herokuapp.com / ahoj
  2. Přejděte na .herokuapp.com / seznam

Pokud se vyskytnou nějaké chyby, spusťte v příkazovém řádku protokoly heroku, abyste zjistili, co se děje.

Poté spusťte soubor checkwebsite.py přímo na Heroku, abyste se ujistili, že neexistují žádné problémy. Chcete-li to provést, můžete zadat:

heroku spusťte python checkwebsite.py

Je to skvělý způsob, jak zajistit, aby váš kód fungoval také na cloudu heroku, a to místně

Nakonec si můžete naplánovat svou práci. Znovu musíte přidat doplněk, abyste to mohli udělat.

addony heroku: vytvořit plánovač: standardní

A měli byste mít možnost vidět plánovač na stránce zdrojů:

Byl přidán plánovač addon, na který můžete dvakrát kliknout

Pro spuštění programu můžete jednoduše použít příkazový řádek, v našem případě je to: python checkwebsite.py (to je stejné jako to, co jsme testovali výše pomocí příkazu heroku run).

Můžete to naplánovat pomocí několika možností.

souhrn

A to je ... poprvé je to trochu složité, ale doufejme, že výše uvedené přírůstkové kroky vám pomohou pochopit, co se děje pod kapotou. Na Heroku je mnohem více zdrojů, stejně jako množství informací o Stack Overflow. Tyto prostředky by měly mít mnohem větší smysl poté, co prošel výše.

Hodně štěstí!

Děkuji za přečtení! Pokud se vám líbí to, co čtete, stiskněte tlačítko ❤ níže, aby to ostatní mohli najít (najdete mě také na Twitteru)