Sådan er du vært for lette apps gratis

Når du leder efter webhostingtjenester, er der mange gratis tilgængelige muligheder. Men der er ikke så mange steder, hvor du kan være vært for web-apps med fuld stak, der involverer API'er, CGI eller AJAX-backendforespørgsler - især hvis du vil bruge noget andet end PHP.

Denne artikel er en enkel, men meningsfuld guide "gå inden du kan køre" om, hvordan du kommer i gang med at hoste dine scripts på cloud-servere.

Hvornår skal man bruge en Cloud Application Platform

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

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

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 udføres derefter afhængigt af en trigger. Udløsere kan være et planlagt job, en webserver, der udløses via en webside-anmodning eller noget, der kører konstant og behandler data - hvilket kan blive ret dyrt.

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

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

  • Hosting dit eget websted, hvor du vil skrive din egen webserver
  • Periodisk skrabning af data fra et websted og derefter lagring af dem i en database til analyse
  • Tilbyder en API-server til en bestemt opgave. Ting som at tilbyde vejrdata, lagring af tingenes internet-sensordata eller en webservice kræver en maskinlæringsmodel
  • En databasetjeneste (selvom en tjeneste 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 aktuelle applikation får du et separat URL-underdomæne under Heroku. Så dine projektnavne skal være unikke.

Disse arbejdsområder har deres eget rum 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 kan forstå din kontekst. Så du kan have flere projekter i forskellige kataloger, 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, som du har brug for at være opmærksom på (som jeg opdagede på den hårde måde gennem timevis af fejlretning - 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 persistens tilbyder Heroku en postgress SQL-database, hvor du kan tilføje poster efter behov.

Et simpelt eksempel - registrering af ændringer af websteder

Her er en trinvis vejledning for at få et fungerende eksempel på en simpel tjeneste, der sender dig en e-mail, 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 gemmer: (a) e-mail-adressen, der skal underrettes om et ændret websted; (b) webstedet, der skal spores (c) den sidste 'kopi' af hjemmesiden
  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 webbrugergrænseflade, hvor du kan tilføje / slette websteder, der skal overvåges, til den database, der er nævnt i nr. 1
  5. En mekanisme til at sende e-mails

At forstå disse komponenter vil bevæbne dig med færdighederne til at gøre mange ting allerede. Jeg lærte alle disse ting gennem flere kilder, så dette fungerer som et konsolideret indlæg.

Antagelser

Følgende vejledning antager følgende antagelser:

  • Du har en GitHub-konto - hvis du ikke har det, skal du oprette en her. Du bør 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 ikke, skal du gå her for at installere det
  • Du kan allerede programmere i Python - hvis ikke, vil jeg foreslå, at du først lærer nogle af de grundlæggende. Nogle guider er her.
  • Du kender SQL - hvis du ikke gør det, skal du gå her.

Oversigt over trinene

Jeg finder ud af, at det at gå igennem en 'gåtur, før du kan løbe' - hjælp 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 noget går i stykker i din fremtidige indsats, har du en bedre chance for at finde ud af, hvor det gik galt.

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

Trin 2 : Persistens - Opret en database

Trin 3 : Kontroller websteder for ændringer

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

Trin 5 : Liste output på websiden

Trin 6: Implementering

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

Lad os først få et simpelt program implementeret på Heroku for at få tingene i gang. Dette program vil være en forløber for internetbrugergrænsefladen (punkt 4) i komponentlisten ovenfor. For at kunne betjene en side kunne vi simpelthen have en HTML-side, men så skulle vi have en webserver til at servere den fil. Med andre ord, når du indtaster webadressens websted, skal et program fortolke anmodningen og derefter give indholdet af HTML-filen. Du kan oprette din egen mini-webserver med Flask Python-biblioteket, hvilket vi skal gøre.

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

Inden du distribuerer 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: // localhost: 5000 / hej

Lad os derefter implementere dette på Heroku. Før 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 man skal køre, når der foretages en webanmodning:

Endelig den runtime-version 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 ikke-standardiserede biblioteksafhængigheder. Hver gang du har nye biblioteker, der ikke er en del af Python Standard Library - dvs. du skal installere dem ved hjælp af et værktøj som f.eks. “Pip” - så tilføj disse her. Du kan finde versionen af ​​et installeret bibliotek som f.eks. Flask ved at køre kommandoen: pip show Flaski kommandolinjen
  3. Procfile, som er det egentlige 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 aktuelle version af python, der skal bruges

Du kan implementere med følgende trin fra kommandolinjen:

  1. heroku oprette webchecker01 - buildpack heroku / python
  2. git tilføj *. * *
  3. git-status
  4. git commit -m “alle filer”
  5. git skub heroku mester

For the command #1 (heroku create…), the “webechecker01” part is the unique name you’ll need to provide for the name of the app.

For command #3 (git status) this will tell you what files are ready to be deployed. Make sure all files are there, if not add them using git add me>.

Now you can check your website: .herokuapp.com/hello

Let’s also make sure we can see the logs since this is a great way to see what’s going on with your app server. On your PC and in the webchecker directory, run the command: heroku logs

You’ll see the last execution steps. If things aren’t working as expected, this is your first stop to find out more detail.

You can also go to the Heroku dashboard to see your consumption:

//dashboard.heroku.com

Step 2: Persistence — create a database

In order to make more useful programs, you’ll need to have a data store of sorts. This is where the Postgres database service comes into play. You first need to deploy the Heroku database service, then create your tables, and finally be able to connect to the database from your code locally (for testing).

To deploy a database service, first create it using the following command:

heroku addons:create heroku-postgresql:hobby-dev

Next, access the database from the command line and create your tables. The database is created on the Heroku cloud service and not locally. However, you can access it through the command line. To log on to the database via the console, run the command heroku pg:psql. Remember, you have to do it in your webchecker folder so that Heroku knows that it is the database for the webchecker site.

To see the list of tables type the command \d

To create a table, you need to use normal SQL statements. For our webchecker program, let’s create a table with the following columns:

  • ID — automatically generated ID for each entry (this will be the primary key). This is done by using the type “serial”
  • website — the website to monitor
  • emailaddress — the email address to send the notification that a change has occurred
  • lasthashcode — we won’t store a copy of the whole webpage, instead we will generate a hash based on the HTML of the page, and then compare this each time. This is more efficient storage-wise, but will not tell us what actually changed
  • lastchangedate — the date that the web changed last time. Hence we will get the database to default this with the current date

To create this table, enter the following command in the Heroku Postgres database console:

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

(Make sure you include the semicolon at the end!)

Next, let’s insert a single record in the database to ensure we have something to work with prior to getting our web UI up and running (you can use your own email address so it works in the future):

INSERT into webcheckerdb values(DEFAULT, 'news.google.com', '[email protected]', '', DEFAULT);

(Make sure you include the semicolon at the end!)

You can quit with \q.

Step 3: Check websites for changes

First, let’s get a piece of code to at least check if a hardcoded site can be retrieved (following on the concept of walking before running).

Hence, first step is to see if we can retrieve a webpage, hash it, and then compare it to a hardcoded hash. Create a new Python file called checkwebsite.py. Code here:

Running this will output the following:

If you have any errors with missing libraries, you can add them via: pip install ry> from the command line.

Next, let’s connect to the database with the following code:

When you try to run this code, you are likely going to get an error of the form KeyError: ‘DATABASE_URL’. This is because your Python code is trying to locate the web address of the Postgres database hosted on Heroku. This is automatically updated to the environment variable DATABASE_URL in the Heroku server. However, on your local PC you will have to do this manually:

  1. heroku config
  2. set DATABASE_URL=

Step 4: Send an email notification on changes

Final step is to send an email. To do this, you’ll need to install an Addon that has the ability to send emails — you can find these via the Heroku marketplace: //elements.heroku.com/addons

In here, there is an Addon called SendGrid: //elements.heroku.com/addons/sendgrid

You can add SendGrid to your app in the command line by typing:

heroku addons:create sendgrid:starter

When you go to your dashboard you can see the new Addon in the Resources section:

Before using it, you’ll need to create an API key. Double click the SendGrid component above and go into Settings->API Key->Create Key (blue button on top right).

Once you create the key, copy it and go back to the command prompt and enter:

heroku config:set SENDGRID_API_KEY= ve>

This will only register it on the server, you need to add it locally to your desktop with:

set SENDGRID_API_KEY= in>

Once done, you can test your code in a new Python script called sendmail.py. Install the library via pip install sendgrid:

To confirm the email was sent and delivered, you can go back to the SendGrid dashboard and checking the Statistics Overview screen:

When checking your email, remember to check your spam.

Once it is working, there are only two lines of code you need to add to your main checkwebsite.py script. It is:

import sendmail #import the send email subroutine you wrote above
...
#call the subroutine after find the hashcode has changedsendmail.sendemail(webrecord['emailaddress'], 'Website changed', webrecord['website'] + ' changed')

The full code is here:

Step 5: List the output on the web page and schedule the job

The next step is to list the output on the webpage.

This involves querying the database, and then cycling through and showing the data on your screen. Hence, it takes the ‘Hello World’ code above, and makes the modification. I also created a different path for this, so to test this out you’ll need to go to the URL: //localhost:5000/list

And here’s the output:

Step 6: Deploy

The final step is to deploy everything to Heroku and then schedule the job so that it checks email.

You should have the following files:

  1. Procfile — the file which points to showchecker.py
  2. requirements.txt — the file which contains the library dependencies
  3. runtime.txt — the version of python
  4. showchecker.py — the python code which shows the database output on the web via .herokuapp.com/list
  5. checkwebsite.py — the python code that checks for any changes on the websites

For the requirements.txt, you will need to make amendments to add the latest libraries:

Deploy these all to Heroku:

  1. git add *.* *
  2. git commit -m “deployment”
  3. git push heroku master

Test each component:

  1. Go to .herokuapp.com/hello
  2. Go to .herokuapp.com/list

If there are any errors, then run heroku logs in the command line to see what is going on.

Next, run the checkwebsite.py directly on Heroku to make sure there are no issues. To do this, you can type:

heroku run python checkwebsite.py

Finally, you can now schedule your job. Again, you need to include an Addon to do this.

heroku addons:create scheduler:standard

And you should be able to see the scheduler in your resources page:

You can simply use the command line to run the program, in our case it is: python checkwebsite.py (this is the same as what we tested above with the heroku run command).

Summary

And that’s it… the first time it is a little complex, but hopefully the above incremental steps will help you understand what’s going on under the hood. There are a lot more resources on Heroku as well as a wealth of information on Stack Overflow. These resources should make a lot more sense after going through the above.

Good Luck!

Thanks for reading! If you like what you read, hit the❤ button below so that others may find this (you can also find me on Twitter )