Wie man einen Apache, MySQL und Python (LAMP) Server ohne Frameworks auf Ubuntu 14.04 einrichtet
Einführung
Dieser Artikel wird Sie Schritt für Schritt durch die Einrichtung eines Servers mit Python 3, MySQL und Apache2 führen, ohne die Hilfe eines Frameworks. Am Ende dieses Tutorials werden Sie in der Lage sein, ein einfaches System in die Produktion zu bringen.
Django ist oft die All-in-One-Lösung für alles rund um Python; es ist mit fast allen Versionen von Python kompatibel, kommt mit einem benutzerdefinierten Server vorinstalliert und bietet sogar eine Datenbank-Installation mit einem Klick. Die Einrichtung eines einfachen Systems ohne dieses leistungsstarke Tool kann knifflig sein, bringt jedoch unschätzbare Einblicke in die Serverstruktur von Grund auf.
Dieses Tutorial verwendet nur Paketmanager, nämlich apt-get und Pip. Paketmanager sind einfach kleine Programme, die die Installation von Code viel bequemer und übersichtlicher machen. Ohne sie kann die Verwaltung von Bibliotheken, Modulen und anderen Codebestandteilen eine äußerst chaotische Angelegenheit werden.
Voraussetzungen
Um dieses Tutorial zu folgen, benötigen Sie:
- Ein Ubuntu 14.04 Droplet.
- Ein sudo-Nutzer ohne Root-Rechte, den Sie einrichten können, indem Sie diesem Tutorial folgen.
Schritt 1 — Python 3 als Standard festlegen
In diesem Schritt werden wir Python 3 als Standard für unseren python Befehl festlegen.
Überprüfen Sie zuerst Ihre aktuelle Python-Version.
- python --version
Auf einem frischen Ubuntu 14.04-Server wird dies ausgegeben:
Python 2.7.6
Wir möchten, dass python Python 3 ausführt. Entfernen wir also zuerst die alte 2.7-Binärdatei.
- sudo rm /usr/bin/python
Als nächstes erstellen Sie einen symbolischen Link zur Python 3-Binärdatei an dessen Stelle.
- sudo ln -s /usr/bin/python3 /usr/bin/python
Wenn Sie python --version erneut ausführen, werden Sie jetzt Python 3.4.0 sehen.
Schritt 2 — Pip installieren
In diesem Abschnitt werden wir Pip installieren, den empfohlenen Paketmanager für Python.
Zuerst aktualisieren Sie den Paketindex des Systems. Dies stellt sicher, dass alte oder veraltete Pakete die Installation nicht beeinträchtigen.
- sudo apt-get update
Pip ermöglicht es uns, jedes Python 3-Paket, das wir haben möchten, einfach zu verwalten. Um es zu installieren, führen Sie einfach Folgendes aus:
- sudo apt-get install python3-pip
Für einen Überblick über Pip können Sie dieses Tutorial lesen.
Schritt 3 — MySQL installieren
In diesem Abschnitt werden wir MySQL installieren und konfigurieren.
Die Installation von SQL ist einfach:
- sudo apt-get install mysql-server
Geben Sie ein starkes Passwort für den MySQL-Root-Benutzer ein, wenn Sie dazu aufgefordert werden, und merken Sie es sich, denn wir werden es später benötigen.
Der MySQL-Server wird gestartet, sobald die Installation abgeschlossen ist. Nach der Installation führen Sie aus:
- mysql_secure_installation
Dieses Setup führt Sie durch eine Reihe von selbsterklärenden Schritten. Zuerst müssen Sie das Root-Passwort eingeben, das Sie vor kurzem gewählt haben. Die erste Frage wird Sie fragen, ob Sie das Root-Passwort ändern möchten, aber da Sie es gerade festgelegt haben, geben Sie n ein. Für alle anderen Fragen drücken Sie ENTER, um die Standardantwort zu akzeptieren.
Python 3 benötigt jedoch eine Möglichkeit, sich mit MySQL zu verbinden. Es gibt eine Reihe von Optionen, wie MySQLclient, aber aufgrund der Einfachheit des Moduls wird dieses Tutorial pymysql verwenden. Installieren Sie es mit Pip:
- sudo pip3 install pymysql
Schritt 4 — Apache 2 installieren
In diesem Abschnitt installieren wir Apache 2 und stellen sicher, dass es Python-Dateien als ausführbare Dateien erkennt.
Installiere Apache mit apt-get:
- sudo apt-get install apache2
Wie MySQL wird der Apache-Server gestartet, sobald die Installation abgeschlossen ist.
Hinweis: Nach der Installation sind mehrere Ports für das Internet geöffnet. Stellen Sie sicher, dass Sie den Schluss dieses Tutorials für Ressourcen zur Sicherheit einsehen.
Wir möchten das Stammverzeichnis unserer Website an einem sicheren Ort platzieren. Der Server befindet sich standardmäßig unter /var/www/html. Um der Konvention zu folgen, werden wir ein neues Verzeichnis für Testzwecke erstellen, das test genannt wird, an demselben Ort.
- sudo mkdir /var/www/test
Schließlich müssen wir Python bei Apache registrieren. Zuerst deaktivieren wir die Multithreading-Prozesse.
- sudo a2dismod mpm_event
Dann geben wir Apache ausdrücklich die Erlaubnis, Skripte auszuführen.
- sudo a2enmod mpm_prefork cgi
Als nächstes ändern wir die tatsächliche Apache-Konfiguration, um Python-Dateien ausdrücklich als ausführbare Dateien zu deklarieren und solche ausführbaren Dateien zuzulassen. Öffnen Sie die Konfigurationsdatei mit nano oder Ihrem bevorzugten Texteditor.
- sudo nano /etc/apache2/sites-enabled/000-default.conf
Fügen Sie das Folgende direkt nach der ersten Zeile hinzu, die <VirtualHost *:80\> lautet.
<Directory /var/www/test>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
Stelle sicher, dass dein <Directory>-Block im <VirtualHost>-Block geschachtelt ist, so wie hier. Achte auch darauf, korrekt mit Tabulatoren einzurücken.
<VirtualHost *:80>
<Directory /var/www/test>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
...
Dieser Verzeichnisblock ermöglicht es uns, festzulegen, wie Apache mit diesem Verzeichnis umgeht. Er sagt Apache, dass das Verzeichnis /var/www/test ausführbare Dateien enthält, betrachtet index.py als die Standarddatei und definiert dann die ausführbaren Dateien.
Wir möchten auch ausführbare Dateien in unserem Webverzeichnis erlauben, daher müssen wir den Pfad für DocumentRoot ebenfalls ändern. Suchen Sie nach der Zeile, die DocumentRoot /var/www/html lautet, einige Zeilen unter dem langen Kommentar am Anfang der Datei, und ändern Sie sie in /var/www/test.
DocumentRoot /var/www/test
Ihre Datei sollte jetzt wie folgt aussehen.
<VirtualHost *:80>
<Directory /var/www/test>
Options +ExecCGI
DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py
...
DocumentRoot /var/www/test
...
Speichern Sie die Datei und schließen Sie sie. Um diese Änderungen wirksam zu machen, starten Sie Apache neu.
- sudo service apache2 restart
Hinweis: Apache 2 kann eine Warnung ausgeben, die sich auf den vollqualifizierten Domainnamen des Servers bezieht; dies kann ignoriert werden, da die ServerName-Direktive momentan wenig Anwendung findet. Sie werden letztendlich verwendet, um das Hosting von Subdomains zu bestimmen, nachdem die erforderlichen Einträge erstellt wurden.
Wenn die letzte Zeile der Ausgabe [ OK ] lautet, wurde Apache erfolgreich neu gestartet.
Schritt 5 — Testen des Endprodukts
In diesem Abschnitt werden wir bestätigen, dass einzelne Komponenten (Python, MySQL und Apache) miteinander interagieren können, indem wir eine Beispielwebseite und eine Datenbank erstellen.
Zuerst erstellen wir eine Datenbank. Melden Sie sich bei MySQL an. Sie müssen das MySQL-Root-Passwort eingeben, das Sie zuvor festgelegt haben.
- mysql -u root -p
Fügen Sie eine Beispieldatenbank mit dem Namen example hinzu.
- CREATE DATABASE example;
Wechseln Sie zur neuen Datenbank.
- USE example;
Fügen Sie eine Tabelle mit einigen Beispieldaten hinzu, die wir der Python-App hinzufügen werden.
- CREATE TABLE numbers (num INT, word VARCHAR(20));
Drücken Sie STRG+D, um zu beenden. Für mehr Hintergrundinformationen zu SQL können Sie dieses MySQL-Tutorial lesen.
Erstellen Sie jetzt eine neue Datei für unsere einfache Python-Anwendung.
- sudo nano /var/www/test/index.py
Kopieren Sie den folgenden Code und fügen Sie ihn ein. Die Inline-Kommentare beschreiben, was jeder Teil des Codes macht. Stellen Sie sicher, dass Sie den Wert passwd durch das Root-MySQL-Passwort ersetzen, das Sie zuvor ausgewählt haben.
#!/usr/bin/python
Turn on debug mode.
import cgitb
cgitb.enable()
Print necessary headers.
print("Content-Type: text/html")
print()
Connect to the database.
import pymysql
conn = pymysql.connect(
db='example',
user='root',
passwd='your_root_mysql_password',
host='localhost')
c = conn.cursor()
Insert some example data.
c.execute("INSERT INTO numbers VALUES (1, 'One!')")
c.execute("INSERT INTO numbers VALUES (2, 'Two!')")
c.execute("INSERT INTO numbers VALUES (3, 'Three!')")
conn.commit()
Print the contents of the database.
c.execute("SELECT * FROM numbers")
print([(r[0], r[1]) for r in c.fetchall()])
Speichern und beenden.
Als nächstes die Berechtigungen für die neu erstellte Datei festlegen. Weitere Informationen zum dreistelligen Berechtigungscode finden Sie im Tutorial zu Linux-Berechtigungen.
- sudo chmod 755 /var/www/test/index.py
Jetzt greifen Sie auf Ihren Server zu, indem Sie in Ihrem bevorzugten Browser http://Ihre_Server_IP eingeben. Sie sollten Folgendes sehen:
[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]
Herzlichen Glückwunsch! Ihr Server ist jetzt online.
Schlussfolgerung
Sie haben jetzt einen funktionierenden Server, der Python 3 mit einer robusten SQL-Datenbank ausführen kann. Der Server ist jetzt zudem so konfiguriert, dass eine einfache Wartung über gut dokumentierte und etablierte Paketinstallateure möglich ist.
In seinem aktuellen Zustand ist der Server jedoch anfällig für externe Angriffe. Während Elemente wie SSL-Verschlüsselung für die Funktion Ihres Servers nicht unbedingt erforderlich sind, sind sie unverzichtbare Ressourcen für einen zuverlässigen, sicheren Server. Erfahren Sie mehr, indem Sie lesen, wie man Apache konfiguriert, wie man ein Apache-SSL-Zertifikat erstellt und wie man seinen Linux-Server sichert.
