Comment configurer un serveur Apache, MySQL et Python (LAMP) sans framework sur Ubuntu 14.04

introduction

Cet article vous guidera à travers la configuration d’un serveur avec Python 3, MySQL et Apache2, sans l’aide d’un framework. À la fin de ce didacticiel, vous serez parfaitement capable de lancer un système barebone en production.

Django est souvent le guichet unique pour tout ce qui concerne Python; compatible avec presque toutes les versions de Python, il est livré pré-emballé avec un serveur personnalisé et comporte même une base de données à installer en un clic. Configurer un système vanilla sans ce puissant outil peut être délicat, mais vous donne une connaissance précieuse de la structure du serveur.

Ce tutoriel utilise uniquement les programmes d’installation de paquets, à savoir apt-get et Pip. Les installateurs de paquets sont simplement de petits programmes qui rendent les installations de code beaucoup plus pratiques et faciles à gérer. Sans eux, la maintenance de bibliothèques, de modules et d’autres bits de code peut devenir une entreprise extrêmement compliquée.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

Étape 1 - Faire de Python 3 la valeur par défaut

Dans cette étape, nous allons définir Python 3 comme valeur par défaut pour notre commande + python +.

Tout d’abord, vérifiez votre version actuelle de Python.

python --version

Sur un nouveau serveur Ubuntu 14.04, ceci produira:

Python 2.7.6

Nous aimerions que + python exécute Python 3. Commençons par supprimer l’ancien fichier binaire 2.7.

sudo rm /usr/bin/python

Ensuite, créez un lien symbolique vers le binaire Python 3 à la place.

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

Si vous exécutez à nouveau + python --version +, vous verrez maintenant + Python 3.4.0 +.

Étape 2 - Installation de Pip

Dans cette section, nous installerons Pip, l’installateur de paquet recommandé pour Python.

Commencez par mettre à jour l’index de package du système. Cela garantira que les paquets anciens ou obsolètes n’interfèrent pas avec l’installation.

sudo apt-get update

Pip nous permet de gérer facilement n’importe quel paquet Python 3 que nous aimerions avoir. Pour l’installer, lancez simplement ce qui suit:

sudo apt-get install python3-pip

Pour un aperçu de Pip, vous pouvez lire de ce tutoriel.

Étape 3 - Installation de MySQL

Dans cette section, nous allons installer et configurer MySQL.

L’installation de SQL est simple:

sudo apt-get install mysql-server

Entrez un mot de passe fort pour l’utilisateur racine MySQL lorsque vous y êtes invité, et souvenez-vous-en, car nous en aurons besoin ultérieurement.

Le serveur MySQL démarrera une fois l’installation terminée. Après l’installation, lancez:

mysql_secure_installation

Cette configuration vous guidera à travers une série d’étapes auto-explicatives. Tout d’abord, vous devez entrer le mot de passe root que vous avez choisi il ya un instant. La première question vous demandera si vous souhaitez modifier le mot de passe root, mais comme vous venez de le définir, entrez * n *. Pour toutes les autres questions, appuyez sur * ENTER * pour accepter la réponse par défaut.

Python 3 nécessite toutefois un moyen de se connecter à MySQL. Il existe un certain nombre d’options, comme MySQLclient, mais pour la simplicité du module, ce tutoriel utilisera + pymysql +. Installez-le en utilisant Pip:

sudo pip3 install pymysql

Étape 4 - Installation d’Apache 2

Dans cette section, nous installerons Apache 2 et veillerons à ce qu’il reconnaisse les fichiers Python en tant qu’exécutables.

Installez Apache en utilisant apt-get:

sudo apt-get install apache2

Comme MySQL, le serveur Apache démarrera une fois l’installation terminée.

  • Remarque *: Après l’installation, plusieurs ports sont ouverts sur Internet. Assurez-vous de voir la conclusion de ce tutoriel pour les ressources sur la sécurité.

Nous voulons placer le répertoire racine de notre site Web dans un endroit sûr. Le serveur est par défaut sur + / var / www / html. Pour respecter la convention, nous allons créer un nouveau répertoire à des fins de test, appelé + test +, au même endroit.

sudo mkdir /var/www/test

Enfin, nous devons enregistrer Python avec Apache. Pour commencer, nous désactivons les processus multithreading.

sudo a2dismod mpm_event

Ensuite, nous donnons à Apache la permission explicite d’exécuter des scripts.

sudo a2enmod mpm_prefork cgi

Ensuite, nous modifions la configuration actuelle d’Apache pour déclarer explicitement les fichiers Python en tant que fichier exécutable et autoriser de tels exécutables. Ouvrez le fichier de configuration à l’aide de nano ou de votre éditeur de texte préféré.

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

Ajoutez ce qui suit juste après la première ligne, qui se lit + <VirtualHost *: 80 \> +.

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

Assurez-vous que votre bloc + <Directory> + est imbriqué dans le bloc + <VirtualHost> +, comme ceci. Assurez-vous également d’indenter correctement avec les onglets.

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

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

   ...

Ce bloc Annuaire nous permet de spécifier comment Apache traite ce répertoire. Il indique à Apache que le répertoire + / var / www / test + contient les exécutables, considère que + index.py + est le fichier par défaut, puis définit les exécutables.

Nous souhaitons également autoriser les exécutables dans le répertoire de notre site Web. Nous devons donc modifier le chemin d’accès de + DocumentRoot +. Recherchez la ligne + DocumentRoot / var / www / html, quelques lignes sous le long commentaire en haut du fichier, puis modifiez-la pour lire` + / var / www / test`.

DocumentRoot /var/www/

Votre fichier devrait maintenant ressembler à celui-ci.

/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/

       ...

Enregistrez et quittez le fichier. Pour appliquer ces modifications, redémarrez Apache.

sudo service apache2 restart

Si la dernière ligne de la sortie lit + [OK] +, Apache a redémarré avec succès.

Étape 5 - Test du produit final

Dans cette section, nous confirmerons que des composants individuels (Python, MySQL et Apache) peuvent interagir en créant un exemple de page Web et de base de données.

Commençons par créer une base de données. Connectez-vous à MySQL. Vous devrez entrer le mot de passe root MySQL que vous avez défini précédemment.

mysql -u root -p

Ajoutez un exemple de base de données appelée * exemple *.

CREATE DATABASE example;

Basculer vers la nouvelle base de données.

USE example;

Ajoutez une table pour quelques exemples de données que l’application Python ajoutera.

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

Appuyez sur * CTRL + D * pour quitter. Pour plus d’informations sur SQL, vous pouvez lire ce tutoriel MySQL.

Créez maintenant un nouveau fichier pour notre application Python simple.

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

Copiez et collez le code suivant dans. Les commentaires en ligne décrivent le rôle de chaque élément du code. Assurez-vous de remplacer la valeur + passwd + par le mot de passe racine MySQL que vous avez choisi précédemment.

#!/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()])

Sauvegarder et quitter.

Ensuite, corrigez les autorisations sur le fichier nouvellement créé. Pour plus d’informations sur le code de permission à trois chiffres, consultez le didacticiel à l’adresse https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vps. [Autorisations Linux].

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

Maintenant, accédez à votre serveur en allant sur + http: // + en utilisant votre navigateur préféré. Vous devriez voir ce qui suit:

votre_serveur_ip ’> http: //

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

Toutes nos félicitations! Votre serveur est maintenant en ligne.

Conclusion

Vous disposez maintenant d’un serveur de travail pouvant exécuter Python 3 avec une base de données SQL robuste. Le serveur est maintenant également configuré pour une maintenance facile, via des installateurs de paquets bien documentés et bien établis.

Cependant, dans son état actuel, le serveur est vulnérable aux tiers. Alors que des éléments tels que le cryptage SSL ne sont pas essentiels au fonctionnement de votre serveur, ils constituent des ressources indispensables pour un serveur fiable et sûr. Apprenez-en plus en lisant how pour configurer Apache , how pour créer un certificat SSL Apache et https: //www.digitalocean.com/community/tutorials/7-security-measures-to-protect-votre-serveurs de sécurité pour votre serveur Linux].