So richten Sie einen Apache-, MySQL- und Python-Server (LAMP) ohne Frameworks unter Ubuntu 14.04 ein

Einführung

In diesem Artikel werden Sie durch das Einrichten eines Servers mit Python 3, MySQL und Apache2 ohne die Hilfe eines Frameworks geführt. Am Ende dieses Tutorials werden Sie in der Lage sein, ein Barebones-System in Betrieb zu nehmen.

Django ist oft die zentrale Anlaufstelle für alles, was mit Python zu tun hat. Es ist mit fast allen Python-Versionen kompatibel, wird mit einem benutzerdefinierten Server geliefert und verfügt sogar über eine Datenbank, die mit einem Klick installiert werden kann. Das Einrichten eines Vanilla-Systems ohne dieses leistungsstarke Tool kann schwierig sein, bietet Ihnen jedoch einen unschätzbaren Einblick in die Serverstruktur von Grund auf.

In diesem Tutorial werden nur Paketinstallationsprogramme verwendet, nämlich apt-get und Pip. Package Installer sind einfach kleine Programme, die Code-Installationen viel komfortabler und einfacher zu verwalten machen. Ohne sie kann das Verwalten von Bibliotheken, Modulen und anderen Codebits zu einer äußerst unübersichtlichen Angelegenheit werden.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

Schritt 1 - Python 3 zum Standard machen

In diesem Schritt legen wir Python 3 als Standard für unseren Befehl + python + fest.

Überprüfen Sie zunächst Ihre aktuelle Python-Version.

python --version

Auf einem neuen Ubuntu 14.04-Server wird Folgendes 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

Erstellen Sie als Nächstes eine symbolische Verknüpfung zur Python 3-Binärdatei.

sudo ln -s /usr/bin/python3 /usr/bin/python

Wenn Sie + python --version + erneut ausführen, sehen Sie jetzt + Python 3.4.0 +.

Schritt 2 - Installation von Pip

In diesem Abschnitt installieren wir Pip, das empfohlene Paketinstallationsprogramm für Python.

Aktualisieren Sie zunächst den Paketindex des Systems. Dadurch wird sichergestellt, dass alte oder veraltete Pakete die Installation nicht beeinträchtigen.

sudo apt-get update

Mit Pip können wir problemlos alle Python 3-Pakete verwalten, die wir haben möchten. Führen Sie zum Installieren einfach Folgendes aus:

sudo apt-get install python3-pip

Eine Übersicht über Pip finden Sie unter dieses Tutorial.

Schritt 3 - Installation von MySQL

In diesem Abschnitt werden wir MySQL installieren und konfigurieren.

Die Installation von SQL ist einfach:

sudo apt-get install mysql-server

Geben Sie ein sicheres Passwort für den MySQL-Root ein, wenn Sie dazu aufgefordert werden, und merken Sie es sich, da wir es später benötigen.

Der MySQL-Server wird gestartet, sobald die Installation abgeschlossen ist. Führen Sie nach der Installation Folgendes 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 vorhin ausgewählt haben. Bei der ersten Frage werden Sie gefragt, ob Sie das Root-Passwort ändern möchten. Geben Sie jedoch * n * ein, da Sie es gerade festgelegt haben. Bei allen anderen Fragen drücken Sie * ENTER *, um die Standardantwort zu akzeptieren.

Python 3 erfordert jedoch eine Möglichkeit, sich mit MySQL zu verbinden. Es gibt eine Reihe von Optionen, wie z. B. MySQLclient. Zur Vereinfachung des Moduls wird in diesem Lernprogramm jedoch "+ pymysql +" verwendet. Installiere es mit Pip:

sudo pip3 install pymysql

Schritt 4 - Installieren von Apache 2

In diesem Abschnitt werden wir Apache 2 installieren und sicherstellen, dass Python-Dateien als ausführbare Dateien erkannt werden.

Installieren Sie Apache mit apt-get:

sudo apt-get install apache2

Wie bei 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 Abschluss dieses Lernprogramms für Ressourcen zur Sicherheit sehen.

Wir möchten das Stammverzeichnis unserer Website an einem sicheren Ort ablegen. Der Server befindet sich standardmäßig unter "+ / var / www / html". Um die Konvention beizubehalten, erstellen wir am selben Ort ein neues Verzeichnis für Testzwecke mit dem Namen "+ test +".

sudo mkdir /var/www/test

Schließlich müssen wir Python bei Apache registrieren. Zu Beginn deaktivieren wir Multithreading-Prozesse.

sudo a2dismod mpm_event

Anschließend erteilen wir Apache die explizite Berechtigung zum Ausführen von Skripten.

sudo a2enmod mpm_prefork cgi

Als nächstes ändern wir die eigentliche Apache-Konfiguration, um Python-Dateien explizit als ausführbare Datei 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 ein, die "+ <VirtualHost *: 80 \> +" lautet.

<Directory /var/www/>
   Options +ExecCGI
   DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py

Stellen Sie sicher, dass Ihr + <Directory> + Block in dem + <VirtualHost> + Block verschachtelt ist. Achten Sie darauf, auch mit Tabulatoren richtig einzurücken.

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
   <Directory /var/www/>
       Options +ExecCGI
       DirectoryIndex index.py
   </Directory>
   AddHandler cgi-script .py

   ...

Mit diesem Verzeichnisblock können wir festlegen, wie Apache dieses Verzeichnis behandelt. Es teilt Apache mit, dass das Verzeichnis "+ / var / www / test " ausführbare Dateien enthält, " index.py +" als Standarddatei betrachtet und dann die ausführbaren Dateien definiert.

Wir möchten auch ausführbare Dateien in unserem Website-Verzeichnis zulassen, daher müssen wir auch den Pfad für "+ DocumentRoot " ändern. Suchen Sie nach der Zeile " DocumentRoot / var / www / html", ein paar Zeilen unterhalb des langen Kommentars oben in der Datei, und ändern Sie sie in "+ / var / www / test".

DocumentRoot /var/www/

Ihre Datei sollte nun etwa so aussehen.

/etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>
       <Directory /var/www/>
               Options +ExecCGI
               DirectoryIndex index.py
       </Directory>
       AddHandler cgi-script .py

       ...

       DocumentRoot /var/www/

       ...

Speichern und schließen Sie die Datei. Starten Sie Apache neu, damit diese Änderungen wirksam werden.

sudo service apache2 restart
  • Hinweis *: Apache 2 gibt möglicherweise eine Warnung aus, die den vollqualifizierten Domänennamen des Servers angibt. Dies kann ignoriert werden, da die ServerName-Direktive derzeit wenig Anwendung findet. Sie werden letztendlich verwendet, um das Subdomain-Hosting zu bestimmen, nachdem die necessary records 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 -datenbank erstellen.

Zuerst erstellen wir eine Datenbank. Melden Sie sich bei MySQL an. Sie müssen das zuvor festgelegte MySQL-Root-Passwort eingeben.

mysql -u root -p

Fügen Sie eine Beispieldatenbank mit dem Namen * example * hinzu.

CREATE DATABASE example;

Wechseln Sie zu der neuen Datenbank.

USE example;

Fügen Sie eine Tabelle für einige Beispieldaten hinzu, die mit der Python-App hinzugefügt werden sollen.

CREATE TABLE numbers (num INT, word VARCHAR(20));

Drücken Sie zum Beenden * STRG + D *. Weitere Informationen zu SQL finden Sie unter MySQL-Tutorial.

Erstellen Sie jetzt eine neue Datei für unsere einfache Python-App.

sudo nano /var/www/test/index.py

Kopieren Sie den folgenden Code und fügen Sie ihn ein. In den Inline-Kommentaren wird beschrieben, was die einzelnen Codeteile bewirken. Stellen Sie sicher, dass Sie den Wert + passwd + durch das zuvor gewählte Root-MySQL-Passwort ersetzen.

#!/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='',
   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 schließen.

Korrigieren Sie als Nächstes die Berechtigungen für die neu erstellte Datei. Weitere Informationen zum dreistelligen Berechtigungscode finden Sie im Tutorial unter https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps [Linux-Berechtigungen].

sudo chmod 755 /var/www/test/index.py

Greifen Sie jetzt mit Ihrem bevorzugten Browser auf Ihre Server zu, indem Sie zu "+ http: // +" wechseln. Sie sollten Folgendes sehen:

Ihr_Server_IP ’> http: //

[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]

Herzliche Glückwünsche! Ihr Server ist jetzt online.

Fazit

Sie haben jetzt einen funktionierenden Server, auf dem Python 3 mit einer robusten SQL-Datenbank ausgeführt werden kann. Der Server ist jetzt auch für eine einfache Wartung über gut dokumentierte und etablierte Paketinstallationsprogramme konfiguriert.

Im aktuellen Zustand ist der Server jedoch für Außenstehende anfällig. Während Elemente wie die SSL-Verschlüsselung für die Funktion Ihres Servers nicht wesentlich sind, sind sie unverzichtbare Ressourcen für einen zuverlässigen und sicheren Server. Weitere Informationen finden Sie unter how to configure Apache , https://www.digitalocean.com/community/tutorials/anleitungszertifikat-auf-apache-für-ubuntu-14-04 erstellen] und https: //www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers, um Ihren Linux-Server zu schützen].