So hosten Sie leichtgewichtige Apps kostenlos

Wenn Sie nach Webhosting-Diensten suchen, stehen Ihnen viele kostenlose Optionen zur Verfügung. Es gibt jedoch nicht so viele Orte, an denen Sie Full-Stack-Webanwendungen mit APIs, CGI- oder AJAX-Backend-Abfragen hosten können - insbesondere, wenn Sie etwas anderes als PHP verwenden möchten.

Dieser Artikel ist eine einfache, aber aussagekräftige Anleitung, wie Sie mit dem Hosten Ihrer Skripte auf Cloud-Servern beginnen können.

Wann wird eine Cloud-Anwendungsplattform verwendet?

Cloud Application Platforms funktionieren gut in Szenarien, in denen Sie ein wenig Code benötigen, um auf einem Server ausgeführt zu werden. Viele dieser Plattformen bieten eine Reihe von Linux-basierten Anwendungscontainern (die wie virtuelle Maschinen aussehen), in denen Sie den auf Ihrem lokalen Computer entwickelten Code mit einer Reihe von Befehlszeilenschlüsselwörtern bereitstellen.

Heroku ist ein solcher Dienst, mit dem Sie Ihren Code (in verschiedenen Sprachen) relativ einfach hosten können. Es bietet ein Freemium-Modell, mit dem Sie etwa 500 Stunden Computer kostenlos nutzen können (die vollständigen Preise finden Sie hier).

Sobald Sie Ihren Code auf Ihrem lokalen Desktop geschrieben haben, können Sie Befehle ausführen, die den Code auf einem Arbeitsbereich in Heroku bereitstellen. Der Code wird dann abhängig von einem Trigger ausgeführt. Auslöser können ein geplanter Job sein, ein Webserver, der durch eine Webseitenanforderung ausgelöst wird, oder etwas, das ständig ausgeführt wird und Daten verarbeitet - was sehr teuer werden kann.

Was wirklich schön ist, ist, dass Sie sich keine Gedanken über das Betriebssystem (Speicher, Speicher, CPU, Sicherheitspatches) machen müssen, da dies alles für Sie verwaltet wird - aber gleichzeitig bedeutet dies, dass Sie nur eine begrenzte Flexibilität haben, da Sie dies nicht können Ressourcen direkt zuweisen.

Einige spezifische Beispiele, bei denen Heroku gut für Sie arbeiten kann:

  • Hosten Sie Ihre eigene Website, auf der Sie Ihren eigenen Webserver schreiben möchten
  • Regelmäßiges Scrapen von Daten von einer Website und anschließendes Speichern in einer Datenbank zur Analyse
  • Angebot eines API-Servers für eine bestimmte Aufgabe. Dinge wie das Anbieten von Wetterdaten, das Speichern von Sensordaten für das Internet der Dinge oder ein Webdienstaufruf für ein Modell für maschinelles Lernen
  • Ein Datenbankdienst (obwohl ein Dienst wie Firebase möglicherweise besser geeignet ist)

Heroku-Architektur

Heroku bietet eine leichte virtuelle Maschine (VM), mit der Sie Ihren Code bereitstellen können. Beachten Sie, dass Sie unter der kostenlosen Option bis zu 5 Anwendungen bereitstellen können, die als 5 Lightweight-VMs betrachtet werden. Für Ihre eigentliche Anwendung erhalten Sie unter Heroku eine separate URL-Subdomain. Ihre Projektnamen müssen also eindeutig sein.

Diese Arbeitsbereiche verfügen über einen eigenen Bereich für Komponenten wie Code- und Ressourcendateien (keine dynamischen Datendateien), Datenbankdateien (Postgres) und Protokolldateien.

Auf Ihrem lokalen Desktop verwendet Heroku Ihren Verzeichnisnamen, um Ihr Projekt zu definieren, und Heroku, um Ihren Kontext zu verstehen. Sie können also mehrere Projekte in verschiedenen Verzeichnissen haben und wenn Sie die Heroku-Befehle ausführen, stellen Sie einfach sicher, dass Sie dies im richtigen Ordner tun.

Das Wichtigste, das Sie beachten müssen (was ich durch stundenlanges Debuggen auf die harte Tour entdeckt habe - ich wünschte, ich hätte der Dokumentation mehr Aufmerksamkeit geschenkt), ist, dass alles aus dem Speicher ausgeführt wird. Es gibt keinen dauerhaften Speicher. Ich sage es noch einmal - Sie können keine Dateien auf dem Dateiserver speichern! Aus Gründen der Persistenz bietet Heroku eine Postgress-SQL-Datenbank an, in der Sie nach Bedarf Datensätze hinzufügen können.

Ein einfaches Beispiel - Erkennung von Website-Änderungen

Hier finden Sie eine Schritt-für-Schritt-Anleitung, um ein funktionierendes Beispiel für einen einfachen Dienst zu erhalten, der Sie per E-Mail benachrichtigt, wenn sich eine Website geändert hat - im Grunde ein Klon von www.changedetection.com. Hierfür wird es mehrere Schlüsselkomponenten geben:

  1. Eine Datenbank, in der Folgendes gespeichert wird: (a) die E-Mail-Adresse zur Benachrichtigung über eine geänderte Website; (b) die zu verfolgende Website; (c) die letzte "Kopie" der Website
  2. Ein Code, der eine bestimmte Website aus der Datenbank in # 1 überprüft (Python-Skript)
  3. Ein Job Scheduler, der das Programm in # 2 ausführt (entspricht einem Cron-Job)
  4. Eine Webbenutzeroberfläche, über die Sie Websites zur Überwachung in der unter Nummer 1 genannten Datenbank hinzufügen / löschen können
  5. Ein Mechanismus zum Versenden von E-Mails

Wenn Sie diese Komponenten verstehen, sind Sie in der Lage, bereits viele Dinge zu tun. Ich habe all diese Dinge aus mehreren Quellen gelernt, daher fungiert dies als konsolidierter Beitrag.

Annahmen

In der folgenden Anleitung werden folgende Annahmen getroffen:

  • Sie haben ein GitHub-Konto. Wenn nicht, erstellen Sie hier eines. Sie sollten auch diese einfache Anleitung lesen.
  • Sie haben bereits ein Heroku-Konto. Wenn Sie dies nicht tun, erstellen Sie hier eines.
  • Sie verwenden einen Windows-Computer. Wenn nicht, sind die Anweisungen in anderen Umgebungen ziemlich ähnlich
  • Sie haben Python bereits installiert. Wenn Sie dies nicht tun, klicken Sie hier, um es zu installieren
  • Sie können bereits in Python programmieren. Wenn nicht, sollten Sie zuerst einige der Grundlagen lernen. Einige Führer sind hier.
  • Sie kennen SQL - wenn nicht, gehen Sie bitte hier.

Übersicht der Schritte

Ich finde, dass es beim Lernprozess hilfreich ist, einen Spaziergang zu machen, bevor man laufen kann. Es dient auch als Dokumentation für Sie selbst, wie Sie jeden Teil des größeren Prozesses lösen können. Auf diese Weise haben Sie eine bessere Chance herauszufinden, wo etwas schief gelaufen ist, wenn etwas in Ihrem zukünftigen Unternehmen kaputt geht.

Schritt 1 : Entwickeln Sie die Webbenutzeroberfläche - erstellen Sie zuerst Hello World

Schritt 2 : Persistenz - Erstellen Sie eine Datenbank

Schritt 3 : Überprüfen Sie die Websites auf Änderungen

Schritt 4: Senden Sie eine E-Mail-Benachrichtigung über Änderungen

Schritt 5 : Listen Sie die Ausgabe auf der Webseite auf

Schritt 6: Bereitstellen

Schritt 1: Entwickeln Sie die Webbenutzeroberfläche - erstellen Sie zuerst Hello World

First, let’s get a simple program deployed onto Heroku to get things started. This program will be a precursor to the web user interface (item #4) in the components list above. In order to serve up a page, we could simply have an HTML page, but then we would need to have a web server to server that file. In other words, when you type in the URL of the website, a program would need to interpret the request, then provide the contents of the HTML file. You can create your own mini web server with the Flask Python library, which is what we’ll do.

  • Create a folder called webchecker and go into that directory (this directory name does not have to be the same as the Heroku application name)
  • Install the Flask library. Enter the command: npm Flask
  • Create the following Python program and name it showchecks.py:

Before you deploy to Heroku, test that it works on your local PC. You can test it with the following steps:

  • Run the program: python webchecker.com
  • Open up your browser on your local pc and open up the page: //localhost:5000/hello

Next, let’s deploy this to Heroku. Before you can deploy, there needs to be a few more files that need to be included to help Heroku know more about your application.

First, the requirements.txt

Second, the file to tell Heroku what to run when a webrequest is made:

Finally, the runtime version of Python to use (default is 2.7, but we want to specify the latest version of Python):

Hence, you should have four files:

  1. showchecker.py which is the code
  2. requirements.txt for the list of non-standard library dependencies. Whenever you have new libraries which are not part of the Python Standard Library — i.e. you need to install them using a tool such as “pip” — then add these here. You can find the version of an installed library such as Flask by running the command: pip show Flask in the command line
  3. Procfile which is the actual Python script to run when the website is called — make sure to update this if you change the Python file
  4. runtime.txt which is the actual version of python to use

You can deploy with the following steps from the command line:

  1. heroku create webchecker01 — buildpack heroku/python
  2. git add *.* *
  3. git status
  4. git commit -m “all files”
  5. git push heroku master

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

Original text


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 )