Sådan hostes letvægtsapps gratis

Med tilladelse fra Luis Llerena

Når du kigger efter webhostingtjenester, er der mange gratis muligheder tilgængelige. Men der er ikke så mange steder, hvor du kan være vært for komplette webapps, der involverer API'er, CGI eller AJAX backend-forespørgsler - især hvis du vil bruge noget andet end PHP.

Denne artikel er en enkel, men meningsfuld "gå før du kan køre" guide til, hvordan du kommer i gang med hosting af dine scripts på sky-servere.

Hvornår skal man bruge en Cloud Application Platform

Cloud-applikationsplatforme fungerer godt i scenarier, hvor du har brug for en smule kode for at køre på en server. Mange af disse platforme tilbyder en række Linux-baserede applikationscontainere (der vises som virtuelle maskiner), hvor du implementerer koden, du har udviklet på din lokale computer med et sæt kommandolinjens nøgleord.

Heroku er en sådan tjeneste, du kunne bruge til at være vært for din kode (på forskellige sprog) relativt let. Det tilbyder en freemium-model, hvor de giver dig mulighed for at bruge cirka 500 timers computing gratis (deres fulde pris er her).

Fra maj 2017 er de programmeringssprog, du kan være vært for under Heroku

Når du har skrevet din kode på dit lokale skrivebord, kan du udføre kommandoer, der distribuerer koden på et arbejdsområde i Heroku. Koden køres derefter afhængigt af en trigger. Udløsere kan være et planlagt job, en webserver, der udløses via en anmodning om webside, eller noget, der kører konstant og behandler data - hvilket kan blive ret dyrt.

Hvad der virkelig er rart er, at du ikke behøver at bekymre dig om operativsystemet (hukommelse, opbevaring, CPU, sikkerhedsrettelser), da det hele styres for dig - men på samme tid betyder det, at du har begrænset fleksibilitet, da du ikke kan allokerer ressourcer direkte.

Nogle specifikke eksempler, hvor Heroku kan fungere godt for dig:

  • Hosting af dit eget websted, hvor du vil skrive din egen webserver
  • Regelmæssigt skrabe data fra et websted og derefter gemme dem i en database til analyse
  • Tilbyder en API-server til en bestemt opgave. Ting som at tilbyde vejrdata, lagring af Internet of Things-sensordata eller et webservicesopkald til en maskinlæringsmodel
  • En databasetjeneste (selvom en service som Firebase muligvis er bedre egnet)

Heroku arkitektur

Heroku leverer en let virtuel maskine (VM), som du kan implementere din kode. Bemærk, at du under den gratis mulighed kan distribuere op til 5 applikationer, der betragtes som 5 lette VM'er. Til din faktiske applikation får du et separat URL-underdomæne under Heroku. Så dine projektnavne skal være unikke.

Disse arbejdsområder har deres egen plads til komponenter såsom: kode- og ressourcefiler (ikke dynamiske datafiler), database (Postgres) og logfiler.

På dit lokale skrivebord bruger Heroku dit katalognavn til at definere dit projekt, og også for at Heroku skal forstå din kontekst. Så du kan have flere projekter i forskellige mapper, og når du kører Heroku-kommandoerne - skal du bare sørge for at gøre det i den rigtige mappe.

Den eneste vigtige ting, du skal være opmærksom på (som jeg opdagede den hårde vej gennem timers debugging - jeg ville ønske, at jeg var mere opmærksom på dokumentationen) er, at alt køres fra hukommelsen. Der er ingen vedvarende opbevaring. Jeg siger det igen - du kan ikke gemme nogen filer på filserveren! For vedholdenhed tilbyder Heroku en SQL-database efter kongressen, hvor du kan tilføje poster efter behov.

Et simpelt eksempel - afsløring af webstedskift

Her er en trin-for-trin-guide til at få et fungerende eksempel på en simpel service, der e-mailer dig, hvis et websted er ændret - dybest set en klon af www.changedetection.com. Der vil være flere nøglekomponenter i dette:

  1. En database, der vil gemme: (a) e-mail-adressen for at underrette om et ændret websted; (b) webstedet, der skal spores; (c) den sidste 'kopi' af webstedet
  2. Et stykke kode, der kontrollerer et givet websted fra databasen i nr. 1 (Python-script)
  3. En jobplanlægning, der kører programmet i nr. 2 (svarende til et cron-job)
  4. En internetbrugergrænseflade, hvor du kan tilføje / slette websteder, der skal overvåges i databasen nævnt i nr. 1
  5. En mekanisme til at sende e-mails

At forstå disse komponenter vil bevæge dig evnerne til at gøre en masse ting allerede. Jeg lærte alle disse ting gennem flere kilder, så dette fungerer som en konsolideret post.

Forudsætninger

Følgende vejledning antager følgende antagelser:

  • Du har en GitHub-konto - hvis du ikke gør det, skal du oprette en her. Du skal også læse denne enkle vejledning.
  • Du har allerede en Heroku-konto - hvis du ikke bedes oprette en her.
  • Du kører en Windows-maskine - hvis ikke, er det fint, instruktionerne er ret ens i andre miljøer
  • Du har allerede installeret Python - hvis du ikke gør det, skal du gå her for at installere det
  • Du kan allerede programmere i Python - hvis ikke, så vil jeg foreslå, at du lærer nogle af de grundlæggende først. Nogle guider er her.
  • Du kender SQL - hvis du ikke gør det, skal du gå her.

Oversigt over trinnene

Jeg finder ud af, at det at gå gennem en "gåtur før du kan løbe" -metode hjælper med læringsprocessen. Det fungerer også som dokumentation for dig selv for, hvordan du løser hvert stykke af den større proces. På den måde, hvis der bryder noget i din fremtidige bestræbelse, har du en bedre chance for at finde ud af, hvor det gik galt.

Trin 1: Udvikl internetbrugergrænsefladen - bygg Hello World først

Trin 2: Persistens - opret en database

Trin 3: Tjek websteder for ændringer

Trin 4: Send en e-mail-meddelelse om ændringer

Trin 5: Vis output på websiden

Trin 6: Implementere

Trin 1: Udvikl internetbrugergrænsefladen - bygg Hello World først

Lad os først starte et simpelt program på Heroku for at få tingene i gang. Dette program vil være en forløber for web-brugergrænsefladen (element nr. 4) på ​​listen over komponenter ovenfor. For at servere en side kunne vi simpelthen have en HTML-side, men så skulle vi have en webserver til serveren for denne fil. Med andre ord, når du indtaster webadressen på webstedet, er et program nødt til at tolke anmodningen og derefter give indholdet af HTML-filen. Du kan oprette din egen mini-webserver med Flask Python-biblioteket, hvilket er, hvad vi skal gøre.

  • Opret en mappe kaldet webchecker og gå ind i det bibliotek (dette katalognavn behøver ikke at være det samme som Heroku-applikationsnavnet)
  • Installer kolbenbiblioteket. Indtast kommandoen: npm Flask
  • Opret følgende Python-program, og navngiv det showchecks.py:

Før du implementerer til Heroku, skal du teste, at det fungerer på din lokale pc. Du kan teste det med følgende trin:

  • Kør programmet: python webchecker.com
  • Åbn din browser på din lokale pc, og åbn siden: http: // localhost: 5000 / hej
Kørsel af scriptet returnerer en statisk side med 'hej verden' output

Lad os derefter implementere dette til Heroku. Inden du kan implementere, skal der være et par flere filer, der skal inkluderes for at hjælpe Heroku med at vide mere om din applikation.

For det første kravene.txt

For det andet filen til at fortælle Heroku, hvad de skal køre, når der oprettes en internetforespørgsel:

Endelig runtime-versionen af ​​Python, der skal bruges (standard er 2,7, men vi vil specificere den nyeste version af Python):

Derfor skal du have fire filer:

  1. showchecker.py som er koden
  2. krav.txt for listen over biblioteksafhængigheder, der ikke er standard. Hver gang du har nye biblioteker, som ikke er en del af Python Standard Library - dvs. du skal installere dem ved hjælp af et værktøj som "pip" - tilføj disse her. Du kan finde versionen af ​​et installeret bibliotek såsom Flask ved at køre kommandoen: pip viser Flask i kommandolinjen
  3. Procfile, som er det faktiske Python-script, der skal køres, når webstedet kaldes - sørg for at opdatere dette, hvis du ændrer Python-filen
  4. runtime.txt, som er den egentlige version af python, der skal bruges

Du kan implementere med følgende trin fra kommandolinjen:

  1. heroku create webchecker01 - buildpack heroku / python
  2. git tilføje *. * *
  3. git status
  4. git commit -m "alle filer"
  5. git push heroku master
Når du har kørt

For kommandoen nr. 1 (heroku oprettelse ...) er "webechecker01" -delen det unikke navn, du skal bruge til appens navn.

For kommando nr. 3 (git-status) fortæller dette dig, hvilke filer der er klar til at blive implementeret. Sørg for, at alle filer er der, hvis ikke tilføj dem ved hjælp af git add .

Nu kan du tjekke dit websted: .herokuapp.com / hej

Hej verdensprogrammet kører på nettet

Lad os også sørge for, at vi kan se logfilerne, da dette er en fantastisk måde at se, hvad der foregår med din appserver. Kør kommandoen: heroku-logfiler på din pc og i webchecker-biblioteket

Du ser de sidste udførelsestrin. Hvis tingene ikke fungerer som forventet, er dette dit første stop for at finde ud af mere detaljeret.

Du kan også gå til Heroku-instrumentbrættet for at se dit forbrug:

https://dashboard.heroku.com

Trin 2: Persistens - opret en database

For at gøre mere nyttige programmer skal du have en datalager med sortering. Det er her Postgres-databasetjenesten kommer i spil. Du skal først implementere Heroku-databasetjenesten, derefter oprette dine tabeller og til sidst være i stand til at oprette forbindelse til databasen fra din kode lokalt (til test).

For at distribuere en databasetjeneste skal du først oprette den ved hjælp af følgende kommando:

heroku addons: Opret heroku-postgresql: hobby-dev

Dernæst skal du få adgang til databasen fra kommandolinjen og oprette dine tabeller. Databasen oprettes på Heroku-skytjenesten og ikke lokalt. Du kan dog få adgang til det via kommandolinjen. For at logge på databasen via konsollen skal du køre kommandoen heroku pg: psql. Husk, at du skal gøre det i din webchecker-mappe, så Heroku ved, at det er databasen for webchecksiden.

For at se listen over tabeller skriver du kommandoen \ d

For at oprette en tabel skal du bruge normale SQL-sætninger. For vores webchecker-program, lad os oprette en tabel med følgende kolonner:

  • ID - automatisk genereret ID for hver post (dette vil være den primære nøgle). Dette gøres ved at bruge typen "seriel"
  • websted - det websted, der skal overvåges
  • e-mailadresse - e-mail-adressen, der skal sende meddelelsen om, at der er sket en ændring
  • lasthashcode - vi lagrer ikke en kopi af hele websiden, i stedet genererer vi en hash baseret på HTML-koden på siden og sammenligner dette derefter hver gang. Dette er mere effektivt oplagringsmæssigt, men vil ikke fortælle os, hvad der faktisk har ændret sig
  • udvekslet - den dato, hvor internettet ændrede sidste gang. Derfor får vi databasen til at standardisere dette med den aktuelle dato

For at oprette denne tabel skal du indtaste følgende kommando i Heroku Postgres-databasekonsol:

CREATE TABLE webcheckerdb (id seriel, website varchar (250), e-mailadresse varchar (250), lasthashcode varchar (32), sidste udskiftning tidsstempel DEFAULT current_date);

(Sørg for, at du inkluderer semikolonet i slutningen!)

Oprettelse af databasen, brug derefter \ d switch til at se listen over tabeller og derefter “\ d webecheckerdb” for at se kolonnerne

Lad os derefter indsætte en enkelt post i databasen for at sikre, at vi har noget at arbejde med, inden vi får vores web-UI i gang (du kan bruge din egen e-mail-adresse, så den fungerer i fremtiden):

INDSÆT ind i webcheckerdb-værdier (DEFAULT, 'news.google.com', 'email@me.com', '', DEFAULT);

(Sørg for, at du inkluderer semikolonet i slutningen!)

Du kan derefter foretage en markeret udsagn (inkluder semikolonet i slutningen!) For at se dataene

Du kan afslutte med \ q.

Trin 3: Tjek websteder for ændringer

Lad os først få et stykke kode for i det mindste at kontrollere, om et hardkodet websted kan hentes (følger konceptet med at gå, inden du kører).

Derfor er det første skridt at se, om vi kan hente en webside, hash den og derefter sammenligne den med en hardkodet hash. Opret en ny Python-fil kaldet checkwebsite.py. Kode her:

Hvis du kører dette, udsendes følgende:

Hvis du har nogen fejl med manglende biblioteker, kan du tilføje dem via: pip install fra kommandolinjen.

Lad os derefter oprette forbindelse til databasen med følgende kode:

Når du prøver at køre denne kode, får du sandsynligvis en fejl i formularen KeyError: 'DATABASE_URL'. Dette skyldes, at din Python-kode forsøger at finde webadressen til Postgres-databasen, der er vært på Heroku. Dette opdateres automatisk til miljøvariablen DATABASE_URL på Heroku-serveren. På din lokale pc skal du dog gøre dette manuelt:

  1. heroku config
  2. sæt DATABASE_URL =
Hvis du får fejlen DATABASE_URL, skal du indstille miljøvariablen

Trin 4: Send en e-mail-meddelelse om ændringer

Det sidste trin er at sende en e-mail. For at gøre dette skal du installere en Addon, der har muligheden for at sende e-mails - du kan finde disse via Heroku markedsplads: https://elements.heroku.com/addons

Herindeinde er der en Addon kaldet SendGrid: https://elements.heroku.com/addons/sendgrid

Du kan tilføje SendGrid til din app på kommandolinjen ved at skrive:

heroku addons: Opret sendgrid: starter

Når du går til dit instrumentbord kan du se det nye Addon i afsnittet Ressourcer:

SendGrid-tilføjelse, der kan aktivere afsendelse af e-mails, vil være i bunden

Inden du bruger den, skal du oprette en API-nøgle. Dobbeltklik på SendGrid-komponenten ovenfor og gå til Indstillinger-> API-nøgle-> Opret nøgle (blå knap øverst til højre).

Klik på knappen Opret nøgle øverst til højre

Når du har oprettet nøglen, skal du kopiere den og gå tilbage til kommandoprompten og indtaste:

heroku config: indstil SENDGRID_API_KEY =

Dette vil kun registrere det på serveren, du skal tilføje det lokalt til dit skrivebord med:

sæt SENDGRID_API_KEY =

Når det er gjort, kan du teste din kode i et nyt Python-script kaldet sendmail.py. Installer biblioteket via pip install sendgrid:

For at bekræfte, at e-mailen blev sendt og leveret, kan du gå tilbage til SendGrid-betjeningspanelet og kontrollere skærmen Statistikoversigt:

Husk at kontrollere din spam, når du kontrollerer din e-mail.

Når det fungerer, er der kun to kodelinjer, du har brug for at føje til dit vigtigste script på checkwebsite.py. Det er:

importer sendmail # importer den send e-mail-underprogram, du skrev ovenfor
...
#kald subroutinen, når find hashkoden er ændret
sendmail.sendemail (webrecord ['emailadresse'], 'Websted ændret', webrecord ['website'] + 'ændret')

Den fulde kode er her:

Trin 5: Liste output på websiden, og planlæg jobbet

Det næste trin er at liste output på websiden.

Dette indebærer forespørgsel om databasen og derefter cykle gennem og vise dataene på din skærm. Derfor tager den 'Hello World' koden ovenfor og foretager ændringen. Jeg oprettede også en anden sti til dette, så for at teste dette, skal du gå til URL: http: // localhost: 5000 / list

Og her er output:

Trin 6: Implementere

Det sidste trin er at distribuere alt til Heroku og derefter planlægge jobbet, så det kontrollerer e-mail.

Du skal have følgende filer:

  1. Procfile - filen, der peger på showchecker.py
  2. krav.txt - filen, der indeholder bibliotekets afhængigheder
  3. runtime.txt - versionen af ​​python
  4. showchecker.py - python-koden, der viser databaseproduktionen på nettet via .herokuapp.com / liste
  5. checkwebsite.py - python-koden, der kontrollerer for eventuelle ændringer på webstederne

Til kravene.txt skal du foretage ændringer for at tilføje de nyeste biblioteker:

Distribuer disse alt til Heroku:

  1. git tilføje *. * *
  2. git commit -m "implementering"
  3. git push heroku master

Test hver komponent:

  1. Gå til .herokuapp.com / hej
  2. Gå til .herokuapp.com / liste

Hvis der er nogen fejl, skal du køre heroku-logfiler på kommandolinjen for at se, hvad der foregår.

Kør derefter checkwebsite.py direkte på Heroku for at sikre dig, at der ikke er problemer. For at gøre dette kan du indtaste:

heroku kører python checkwebsite.py

Dette er en fantastisk måde at sikre, at din kode kører så godt på heroku-skyen som lokalt

Endelig kan du nu planlægge dit job. Igen, skal du medtage en Addon for at gøre dette.

heroku addons: Opret scheduler: standard

Og du skal være i stand til at se planlæggeren på din ressursside:

Planlæggerudvidelsen er også inkluderet, som du kan dobbeltklikke på

Du kan blot bruge kommandolinjen til at køre programmet, i vores tilfælde er det: python checkwebsite.py (dette er det samme som det, vi testede ovenfor med heroku-kommandoen).

Du kan planlægge dette med et par muligheder.

Resumé

Og det er det ... første gang er det lidt kompliceret, men forhåbentlig vil ovennævnte trinvise trin hjælpe dig med at forstå, hvad der foregår under hætten. Der er meget mere ressourcer på Heroku såvel som et væld af oplysninger om Stack Overflow. Disse ressourcer bør være meget mere fornuftige efter at have gennemgået ovenstående.

Held og lykke!

Tak for at have læst! Hvis du kan lide det, du læser, skal du trykke på knappen below nedenfor, så andre kan finde dette (du kan også finde mig på Twitter)