Comment exécuter un site Django avec Apache, mod_wsgi et MySQL sur FreeBSD 10.1

introduction

Cet article explique comment déployer une application Web à l’aide de Django, le célèbre framework Python. L’avantage de développer avec les frameworks Web populaires est que beaucoup de travail répétitif a été fait pour vous, vous pouvez donc vous concentrer sur la construction de votre site.

Que vous soyez développeur ou non, il est bon de savoir que l’essentiel de ce que vous exécutez sur votre Droplet a subi le contrôle d’une grande communauté open source et devrait être moins sensible aux failles de sécurité.

Une chose qui n’est pas intrinsèquement simple est de savoir comment obtenir ces infrastructures Web opérationnelles en dehors de votre propre environnement de développement ou de test. Dans cet article, nous allons vous montrer comment faire exactement cela, en utilisant une pile Apache, mod_wsgi et MySQL standard fonctionnant sous FreeBSD 10.1.

Buts

  • Installer et configurer un environnement virtuel Python pour votre site Django

  • Créer et configurer un exemple de site Django pour le tester

  • Configurer un serveur MySQL simple et sécurisé

  • Configurez un hôte virtuel Apache simple qui servira votre site Django

  • Vérifier que le site nouvellement créé fonctionne correctement

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

  • Une gouttelette FreeBSD 10.1

  • Accédez à votre compte root ou à un compte disposant des privilèges sudo à la suite de ce tutorial

  • Connaissance pratique de la modification de fichiers texte à partir de la ligne de commande

  • L’environnement shell * Bash *, puisque nous utiliserons Virtualenv plus tard dans ce tutoriel. Suivez les instructions de la page Changing the Default Shell du * tutoriel Comment démarrer avec FreeBSD 10.1 *. Vous devrez peut-être vous déconnecter et vous reconnecter pour obtenir le shell Bash pour votre utilisateur * freebsd *.

Étape 1 - Installer et configurer un environnement virtuel Python

Tout d’abord; assurez-vous que vos paquets actuels sont à jour.

sudo pkg update && sudo pkg upgrade -y

Maintenant, installez tous les packages dont vous avez besoin en exécutant la commande suivante et en disant oui à l’invite résultante. Vous remarquerez que bien plus que ce que nous avons typé est installé, car le système `+ pkg + 'calcule et sélectionne toutes les bonnes dépendances.

sudo pkg install bash ap24-mod_wsgi3 py27-virtualenv mysql56-server

La commande + virtualenv + que vous allez bientôt utiliser ne fonctionne pas bien avec le shell utilisateur par défaut + tcsh + dans FreeBSD. Nous avons besoin de + bash + à la place. Si vous venez d’un environnement Linux, vous vous sentirez comme à la maison. Si vous ne l’avez pas déjà fait dans les conditions préalables, veuillez suivre les instructions: https://www.digitalocean.com/community/tutorials/how-to-get-started-with-freebsd-10-1#changing-the- default-shell- (facultatif) [ici] maintenant.

  • Exécutez-vous le shell Bash maintenant? * N’oubliez pas de vous déconnecter et de vous reconnecter. Génial!

Maintenant, commençons notre environnement Python.

Pour faciliter la recherche, créez un répertoire pour votre site en exécutant cette commande.

sudo mkdir -p /www/data/

Donnez à votre compte utilisateur l’accès pour travailler dans votre nouveau répertoire de projet. La partie + whoami + de la commande remplit automatiquement votre nom d’utilisateur actuel.

sudo chown -R `whoami` /www/data/

Passez à votre répertoire nouvellement créé.

cd /www/data/

L’utilisation d’environnements virtuels par site ou par application permet de personnaliser les packages et les versions de Python que vous installez, plutôt que d’installer des éléments au niveau du système.

Créez maintenant l’environnement virtuel python à l’aide de l’utilitaire + virtualenv +.

virtualenv venv

Activez cet environnement pour vous assurer d’installer la configuration requise pour votre site Django dans cet environnement plutôt qu’à l’échelle du système.

source venv/bin/activate

Vous saurez que vous êtes dans le bon environnement lorsque votre invite de commande est précédée de + (venv) +.

Si tout semble en ordre, assurez-vous que les outils Python sont à jour pour effectuer cette étape.

pip install -U setuptools pip

Étape 2 - Créer et configurer un exemple de site Django

Vous pouvez maintenant créer les débuts d’un site Django. Vous commencerez par installer les exigences python nécessaires à l’exécution du site. Assurez-vous que vous vous trouvez toujours dans le répertoire + / www / data / + et dans votre environnement virtuel.

pip install django mysql-python

Avec Django et la prise en charge de MySQL pour Python, il est temps de créer la structure du projet à l’aide de l’utilitaire + django-admin + de Django.

django-admin.py startproject mysite .

En utilisant votre éditeur préféré, ouvrez le fichier + mysite / settings.py +.

vi /www/data/www.example.com/mysite/settings.py

Modifiez la section + DATABASES + pour ressembler à ceci. Assurez-vous de remplacer ++ par quelque chose de plus sécurisé.

/www/data/www.example.com/mysite/settings.py

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.mysql',
       'NAME': 'mysite',
       'USER': 'mysite',
       'PASSWORD': '',
       'HOST': '/tmp/mysql.sock',
   }

Enregistrez vos modifications.

Étape 3 - Configurer un serveur MySQL simple et sécurisé

Vous avez déjà installé MySQL, il ne vous reste plus qu’à le configurer.

Tout d’abord, un peu de ménage. Ouvrez le fichier + / etc / rc.conf pour le modifier.

sudo vi /etc/rc.conf

Ajoutez ces deux lignes au bas du fichier. Cela garantit que MySQL et Apache démarreront au démarrage du serveur.

/etc/rc.conf

mysql_enable="YES"
apache24_enable="YES"

Nous n’avons pas encore configuré Apache, mais il est plus facile d’ajouter les deux lignes maintenant pour ne pas l’oublier plus tard.

Démarrez l’instance du serveur MySQL.

sudo service mysql-server start

Exécutez cette commande pour sécuriser votre serveur de base de données.

mysql_secure_installation

Lisez toutes les invites (à votre connaissance) et répondez par «+ Y +» à tous sauf la sélection du mot de passe. Pour les invites de mot de passe, définissez le mot de passe MySQL * root * sur quelque chose de sécurisé.

Connectez-vous à votre nouvelle instance MySQL raisonnablement sécurisée, en utilisant le mot de passe que vous venez de définir.

mysql -u root -p

Exécutez cette commande pour créer la base de données exemple, appelée * mysite *.

create database mysite character set utf8;

Maintenant, utilisez cette commande pour créer l’utilisateur * mysite * de la base de données et lui accorder des autorisations sur la base de données que vous venez de créer. Assurez-vous que ++ correspond à ce que vous avez défini précédemment dans le fichier + settings.py +. En fait, vous pouvez également modifier le nom de la base de données et le nom d’utilisateur si vous le souhaitez. assurez-vous simplement que la base de données et l’utilisateur que vous créez correspondent aux paramètres du fichier de configuration Python.

grant all privileges on mysite.* to 'mysite'@'localhost' identified by '';

Si vous ne voyez aucune erreur, vous pouvez quitter le shell MySQL comme ceci:

quit

Maintenant que la base de données est prête, vous utiliserez l’utilitaire Django + manage.py + pour la remplir avec les données initiales de votre site exemple. Encore une fois, cela doit être fait à partir du répertoire du site, + / www / data / +.

./manage.py migrate

(Facultatif) Étape 4 - Testez la nouvelle application Django

Avant d’aller plus loin, vérifions que le modèle de site Django fonctionne correctement.

Démarrez le serveur de développement Django en lui permettant d’écouter sur l’interface réseau publique de votre Droplet.

./manage.py runserver 0.0.0.0:8000

Dans votre panneau DigitalOcean Droplet, recherchez l’adresse IP externe de votre Droplet. Maintenant, dans votre navigateur, visitez + http: // <votre ip ici>: 8000 +. Vous devriez voir la page par défaut pour une nouvelle installation de Django.

Il est * très important * que vous appuyiez sur les touches + CTRL + C + de votre clavier pour quitter le serveur de développement Django, car il ne doit pas être utilisé en production.

Un mot sur la sécurité

Il y a beaucoup à lire sur la sécurité et les meilleures pratiques lors de l’exploitation d’un site. Pour exécuter quelque chose de réel en production, il est vivement recommandé de lire plus en détail sur la façon de sécuriser correctement un serveur Web et un serveur de base de données destinés au public.

Après l’annonce de ce service public, il est temps de configurer Apache pour servir notre site Django.

Étape 5 - Configurer un hôte virtuel Apache simple pour votre site Django

A l’aide de votre éditeur favori, créez et modifiez le fichier + / usr / local / etc / apache24 / Includes / httpd.conf +:

sudo vi /usr/local/etc/apache24/Includes/httpd.conf

Ajoutez tous les paramètres de configuration suivants pour créer votre hôte virtuel. Veuillez remplacer "++" par le nom de votre site Web pour qu’il corresponde aux répertoires créés précédemment.

/usr/local/etc/apache24/Includes/httpd.conf

# Settings
ServerName mysite

## Default Overrides
ServerSignature Off
ServerTokens Prod
Timeout 30

## Virtual Hosts
<VirtualHost *:80>

   WSGIDaemonProcess mysite python-path=/www/data/:/www/data//venv/lib/python2.7/site-packages/
   WSGIProcessGroup mysite
   WSGIScriptAlias / /www/data//mysite/wsgi.py

   <Directory /www/data//mysite>
       <Files wsgi.py>
       Require all granted
       </Files>
   </Directory>

</VirtualHost>

Ici, vous dites simplement à Apache de définir quelques options de configuration par défaut saines et où trouver le code Python pour lancer le site Django à l’aide du module + mod_wsgi + d’Apache. Cet article contient davantage de détails sur Apache Virtual. hôtes, si vous voulez lire plus.

Démarrez le serveur Web Apache.

sudo service apache24 restart

Test de l’exemple de site Django

Vous devriez maintenant pouvoir visiter + http: // + depuis votre navigateur et voir la page Django par défaut. Si vous avez configuré DNS, vous pouvez également utiliser votre domaine.

Conclusion

Comme vous pouvez le constater, il y a beaucoup à apprendre sur le déploiement de sites Web et d’applications même les plus simples. L’étape suivante consiste à déployer votre application personnalisée à la place de l’application de démonstration utilisée dans le didacticiel.

Si vous avez des questions ou des commentaires, veuillez les laisser ci-dessous.

lecture recommandée

Les liens suivants peuvent vous aider à en savoir plus sur la création et le déploiement d’un site Django simple.