Déploiement rapide de sites Web avec Django, Heroku et New Relic

Le développement et le déploiement rapides d'applications deviennent rapidement une exigence et un objectif pour de nombreux projets, anciens et nouveaux. Heureusement, les développeurs ont toute une gamme d'options à exploiter, notamment en termes de ressources de déploiement et d'intégration étroite avec le langage de programmation de votre choix. Les déploiements en nuage, dans lesquels les entreprises offrent une grande quantité de matériel pouvant être adapté à vos besoins, deviennent de plus en plus populaires en raison de leur flexibilité et de leur rentabilité pour suivre un modèle de paiement à l'utilisation..

L'un des changements les plus intéressants de ce passage aux plates-formes de cloud computing, en particulier dans le cas de projets de moindre envergure, est que de nombreux clouds offrent une possibilité de déploiement gratuit, avec toutefois une utilisation minimale du matériel. Cela permet d’héberger gratuitement des applications prototypes, par exemple, ou des produits bêta, ce qui vous permet de disposer rapidement d’une instance d’application en direct que vous pouvez mettre à la disposition de tous. De même, cela fonctionne parfaitement pour tout site Web générant un trafic modéré, tel qu'une petite entreprise locale ou même un site Web de portefeuille où vous pouvez présenter une partie de votre travail..

introduction

Cet article porte sur mon expérience du développement rapide d'un site Web de portefeuille en Python et du framework Web Django très apprécié, utilisant des modèles de bootstrap pour styliser le site. Avec un site soigné capable de présenter le travail, je vais vous montrer comment l'ajouter à un système de gestion de contenu généré par Django, ainsi que la facilité avec laquelle il peut être déployé sur Heroku pour l'hébergement de votre site. puis surveillez le trafic, les erreurs et les temps de réponse en utilisant l’intégration New Relic intégrée de Heroku. Tout cela gratuitement, en quelques heures de travail.

Créez votre site web

Tout d'abord, vous avez besoin d'un projet que vous souhaitez héberger sur le cloud. Comme mentionné précédemment, mon projet consistait à créer rapidement un site Web de portefeuille à partir duquel présenter mes articles et autres projets, ainsi que mon CV et mes coordonnées. Python et Django correspondaient parfaitement à ces exigences et vous pouvez commencer rapidement à créer un site Web dynamique avec Django et sa conception ORM, offrant ainsi une intégration aisée entre vos modèles Web et les données sous-jacentes stockées dans une base de données..

Avant d'écrire un code, vous devez créer un environnement virtuel Python pour votre projet, afin que les dépendances de ce projet soient séparées des autres. Sous la capuche, virtualenv copie efficacement votre installation globale de Python sur le .virtualenvs dossier sous un répertoire nommé pour votre virtualenv. Il ajoute ensuite cet emplacement au début de votre chemin afin que votre système utilise cette installation Python pour votre projet. Toutes les dépendances sont ensuite installées ici plutôt que globalement. Vous pouvez le faire en installant d’abord virtualenv et virtualenvwrapper en utilisant le gestionnaire de paquets de Python "pépin".

 $ pip installer virtualenv $ pip installer virtualenvwrapper 

Après avoir installé le virtualenv outils, vous devez ensuite ajouter une ligne source à votre .bashrc dans votre répertoire personnel (Linux / Mac OS X), ce qui permet de virtualenvwrapper scripts sur la ligne de commande, permettant une création, une activation et une suppression faciles des environnements virtuels. Vous pouvez créer le virtualenv comme suit.

 Portefeuille mkvirtualenv $ 

Avec la configuration de votre environnement, vous pouvez ensuite installer Django que vous utiliserez pour définir l’application Web. Django peut être installé en exécutant la commande suivante.

 $ pip installer django 

Avec les dépendances en place, la première étape de la création de votre projet Django consiste à créer un répertoire pour stocker vos fichiers selon une structure relativement standard, comme indiqué ci-dessous. Heureusement, Django aide à automatiser ce processus en utilisant le logiciel django-admin.py outil de ligne de commande. Exécutez ce qui suit pour créer votre répertoire de projet et d’application.

 $ django-admin.py startproject tuts 

Cela produira la structure suivante.

 tuts / tuts / __init__.py settings.py urls.py wsgi.py 

Vous pouvez en savoir plus sur la configuration des applications Django dans la documentation officielle de Django, mais voici un résumé de base de ces fichiers:

  • settings.py - configuration de votre application Django, telle que les connexions à la base de données et les applications (voir ci-dessous).
  • urls.py - les itinéraires qui mènent aux différentes parties de vos sites.
  • wsgi.py - un fichier pour permettre le démarrage de votre application par des serveurs Web tels qu'Apache.

Le projet créé jusqu'à présent n'est que le conteneur externe de votre application Web. La viande du code doit vivre dans une application et vous pouvez à nouveau utiliser les méthodes d'assistance de Django pour créer la structure de l'application à votre place..

 Portefeuille $ python manage.py startapp 

Cela ajoutera ce qui suit à notre structure globale de répertoires.

 tuts / tuts / __init__.py settings.py urls.py wsgi.py portfolio / admin.py models.py tests.py views.py 

Une fois votre application créée, vous devez ensuite l'enregistrer dans votre projet Django. S'ouvrir settings.py et ajouter "portefeuille" à la INSTALLED_APPS tuple:

 INSTALLED_APPS = ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles' , 'portefeuille') 

Pour vérifier que tout fonctionne, entrez la commande suivante et visitez le site http: // localhost: 8000 dans votre navigateur. Vous devriez voir une page telle que celle montrée dans l'image ci-dessous.

Définir le modèle

Maintenant que le répertoire de votre projet est configuré, commençons à développer le code. Comme nous connaissons le type de données que nous souhaitons ajouter au site du portefeuille, nous pouvons commencer à définir le modèle. Ceci décrit nos données dans la base de données et permet à Django de continuer et de créer les champs et les tables appropriés dans la base de données pour nous. Sur notre site Web, nous publierons des entrées pour des articles, des livres et du matériel de thèse. Chacun de ceux-ci peut avoir son propre modèle si vous souhaitez lui attribuer des champs de données uniques qui ne s'appliquent pas aux autres types d'entrée. Cependant, pour ce site Web, chaque entrée se verra attribuer un nom, une date de publication, une description et une URL. dans le models.py fichier sous le répertoire app portfolio, vous pouvez définir ces données d’entrée comme suit:

 Classe Item (models.Model): publish_date = models.DateField (max_length = 200) name = models.CharField (max_length = 200) detail = models.CharField (max_length = 1000) url = modèles.URLField () thumbnail = modèles.CharField (longueur_max = 200) 

Une fois le modèle défini, vous pouvez le générer dans la base de données à l’aide des outils de ligne de commande intégrés de Django, qui sont mis à votre disposition après l’installation. Si vous utilisez le gérer.py déposer à nouveau, vous pouvez également utiliser le syncdb commande pour gérer la configuration de la base de données pour vous. Si vous exécutez la commande suivante, les options disponibles fournies par cet outil d'administration sont affichées..

 $ python manage.py syncdb Création de tables… Création de table portfolio_item Installation de SQL personnalisé… Installation d'index… Installé 0 objet (s) à partir de 0 appareil (s) 

En utilisant le syncdb Cette méthode permet à Django de lire le modèle que nous venons de créer et d’installer la structure appropriée pour stocker ces données dans la base de données. Comme c'est la première fois que vous exécutez cette commande, Django vous demandera également de répondre à quelques questions. Ceux-ci incluent des éléments tels que la création d'un superutilisateur pour la base de données (essentiellement l'administrateur) vous permettant de vous protéger par un mot de passe contre les mises à jour et les modifications apportées à la base de données. Cet utilisateur sera également le premier utilisateur capable de se connecter au CMS qui sera généré pour le site Web une fois que les modèles seront opérationnels..

Avec la configuration de l'utilisateur, la commande doit renvoyer indiquant qu'elle a exécuté le code SQL par rapport à la base de données. L'étape suivante consiste à pouvoir accéder aux données qui seront stockées pour créer un frontal dynamique que vous souhaitez afficher pour l'utilisateur. Pour ce faire, vous devrez ajouter du code aux vues pour accéder aux données que vous allez stocker dans la base de données. Avec les données disponibles pour les vues, il peut ensuite les transmettre à des modèles qui peuvent être interprétés comme des informations pour l'utilisateur final. Dans ce cas, il s'agira de pages HTML pour un navigateur Web. Toutefois, il convient de noter que ce modèle pourrait être utilisé pour d'autres types d'applications, telles que la production de fichiers JSON ou XML, qui utiliseraient à nouveau le modèle pour définir et déplacer les données, ainsi que les vues qui les présentent, au format correct de JSON. / XML par opposition à HTML.

Nos vues

Dans les vues, vous allez utiliser les données qui seront stockées dans la base de données pour les afficher aux utilisateurs. Pour ce faire, nous importons le Article class pour accéder à ce modèle (avec Django gérant l'accès de la base de données ci-dessous) et fournir les données sous forme de variables au "modèle" que Django rendra. Le modèle est principalement du code HTML statique, avec la possibilité d'exécuter un ensemble restreint de code Python pour traiter vos données et les afficher selon les besoins. Par exemple, vous pouvez transmettre la liste complète des objets d’élément au modèle, puis parcourir cette liste à l’intérieur du modèle pour obtenir uniquement le nom de chaque élément et l’afficher dans un champ. H1 étiquette. Espérons que cela deviendra plus clair à l'aide des exemples ci-dessous.

Ouvrez le views.py fichier créé précédemment pour vous et ajoutez le code suivant qui sera exécuté lors de l'accès à la page d'accueil (ou d'index) de votre site Web.

def index (demande): items = Item.objects.order_by ("- publish_date") now = datetime.datetime.now () renvoie le rendu (demande, 'portfolio / index.html', "items": items, "year ": maintenant.année) 

Cela va collecter tous les éléments stockés dans la base de données, les classer par le champ de date de publication, vous permettre d’afficher les plus récents en premier, puis de les transmettre au modèle que vous allez créer sous peu. Le dictionnaire transmis à la méthode de rendu est appelé contexte et vous pourrez accéder facilement à cet objet de contexte dans le modèle pour afficher les données requises..

Modèles

Django utilise la bibliothèque de modèles Jinja2 pour gérer le traitement de ses modèles et est très agréable à utiliser, en ce sens que sa syntaxe est simple et que ses capacités sont suffisamment puissantes pour produire ce dont vous avez besoin. Il convient de noter cependant, un piège dans lequel la plupart des développeurs tombent lorsque travailler avec Jinja2 consiste à faire trop de logique dans le modèle. Alors que Jinja2 vous fournit un grand nombre d'opérations Python standard, il est destiné à un traitement simple pour obtenir les données au format d'affichage. La logique de récupération et de structuration des données doit avoir été entièrement réalisée dans le contrôleur et / ou la vue. Vous saurez que vous êtes tombé dans ce piège lorsque vous codez beaucoup dans les modèles et que vous êtes frustré car Jinja2 génère des erreurs ou vos données affichées n'apparaîtront tout simplement pas comme vous le souhaitez. À ce stade, il est utile de revoir la vue pour voir si vous pouvez effectuer davantage de traitements en amont, avant de les transférer au modèle..

Avec notre indice Pour gérer l’accès aux données, il ne reste plus qu’à définir le modèle pour afficher nos éléments. Comme suggéré par le indice méthode, vous devez ajouter un index.html fichier dans l'application de portefeuille pour qu'il soit rendu. Ajouter ce fichier avec le code suivant.

    Tuts + Django Exemple   

Bienvenue sur votre site Django.

Voici vos objets:

    % pour l'article dans les articles%
  • nom de l'article
  • % endfor%

Il s'agit d'une page HTML de base qui effectuera une boucle et produira une liste à puces des noms d'éléments. Vous pouvez bien sûr personnaliser ce style à votre guise et je vous recommande vivement l’utilisation d’un modèle de bootstrap si vous souhaitez que quelque chose de professionnel soit opérationnel rapidement. Plus d'informations sur le site de Bootstrap.

URL

La dernière pièce pour voir si tout fonctionne, est d'aller de l'avant et d'ajouter l'URL racine pour pointer sur ce modèle à restituer. Sous le répertoire de l'application "tuts" ouvrez urls.py et ajoutez la directive URL suivante aux exemples générés automatiquement et à l'URL d'administration.

 urlpatterns = patterns (", # Exemples: # url (r '^ $', 'tuts.views.home', name =" home "), # url (r '^ blog /', include ('blog.urls' )), url (r '^ admin /', include (admin.site.urls)), url (r '^ $', views.index, name = "index"),) 

Enfin, ouvrez admin.py exposer le Article classe au CMS admin, vous permettant de saisir les données à afficher sur la page d'accueil.

 depuis portfolio.models import Item admin.site.register (Item) 

Vous devriez alors pouvoir démarrer votre site (en utilisant exécuter le serveur comme précédemment) et effectuer les tâches suivantes.

  1. Ouvrez la page d'accueil et vérifiez qu'aucun élément n'est affiché.
  2. Ouvrez http: // localhost: 8000 / admin et entrez les informations d'identification créées à l'aide de syncdb plus tôt.
  3. Ouvrir des éléments et ajouter un nouvel élément en remplissant les champs.
  4. Visitez l'hommage et vous devriez voir le nom de l'article comme une puce.

Essayez d’accéder à d’autres aspects des données d’élément du modèle. Par exemple, modifiez le code dans la puce pour ajouter également la date de publication. Par exemple:

 item.publish_date - item.name 

Vous avez maintenant un site de travail qui a simplement besoin d'un style et de plus de contenu pour pouvoir fonctionner en tant que site Web de portefeuille actif..

Déploiement à Heroku

Heroku est une excellente plate-forme cloud mise à la disposition de tous les développeurs et entreprises, en tant que service d'hébergement d'entreprise adapté à toutes les exigences en matière d'hébergement. Que ce soit pour des sites Web de loisir, des sites Web critiques pour le commerce ou pour un trafic intense, Heroku peut tout gérer. Mieux encore, leur structure de prix comprend un niveau gratuit qui est plus que capable de gérer un petit site Web tel que celui du portefeuille que nous avons créé..

Heroku exploite le très populaire outil de gestion de code source Git, toujours très populaire, en tant que mécanisme permettant de contrôler les déploiements sur la plate-forme. Tout ce dont vous avez besoin pour commencer est un projet, git installé et un compte Heroku qui peut être obtenu en visitant la page d'inscription.

Une fois que vous vous êtes inscrit, ouvrez votre compte Heroku et créez une application avec un "dyno Web". Heroku fournit gratuitement un dyne, capable d'exécuter une seule instance d'application et de modérer le trafic sur cette instance. Donnez un nom à votre application ou laissez Heroku vous en attribuer un. Comme nous aurons besoin d’utiliser une base de données pour notre application, allez dans Add-ons et attachez l'instance gratuite de PostgreSQL à votre application.

Avec votre application créée, suivez ces étapes pour configurer votre git référentiel et pousser à Heroku.

Installez la Django Toolbelt que vous pouvez trouver dans la section développeurs du site Web Heroku..

Initialisez le référentiel Git dans votre répertoire de projet en lançant les commandes suivantes:

 $ git init. $ git add. $ git commit -m "Commit du projet initial." 

Avec le référentiel Git en place, ajoutez l'application à distance Heroku afin de pouvoir envoyer le code à heroku..

 $ heroku git: remote -a YOUR_APP_NAME 

Heroku a besoin de connaître la commande pour savoir exactement comment démarrer votre application. Pour cela, vous devez ajouter un "Procfile". Ajouter le fichier nommé"Procfile"à la racine de votre répertoire de projet, avec le contenu suivant.

 site web: gunicorn tuts.wsgi 

Pour permettre à l'application Heroku de se connecter à l'instance de base de données attachée à votre application dans le cloud, vous devez ajouter la ligne suivante à settings.py. Cela signifie que vous n'avez pas besoin de coder en dur une configuration et Heroku gérera les connexions pour vous..

 sinon os.environ.get ("HOME") == '/ CHEMIN / TO / VOTRE / HOME': # Analyse de la configuration de la base de données à partir de $ DATABASE_URL import dj_database_url DATABASES ['default'] = dj_database_url.config () 

En encapsulant le paramétrage de cette connexion de base de données dans si Cette instruction permet à la configuration de fonctionner telle quelle sur votre ordinateur local mais de configurer correctement la base de données lorsque vous êtes sur Heroku..

Vous devez également ajouter un conditions.txt, qui spécifie vos dépendances Python pour l’application afin que Heroku puisse les installer dans l’environnement créé. Ajouter conditions.txt au même niveau que le Procfile avec le contenu suivant:

 Django == 1.6.2 dj-database-url == 0.3.0 dj-static == 0.0.5 django-toolbelt == 0.0.1 gunicorn == 18.0 newrelic == 2.16.0.12 psycopg2 == 2.5.2 wsgiref = = 0.1.2 

Une fois ces fichiers créés, ajoutez-les à Git, puis appuyez sur la télécommande Heroku, où ils seront reçus et démarrés..

 $ git add. $ git commit -m "Ajout du fichier de procédure et des exigences.txt" $ git push maître Heroku 

Vous devriez voir une sortie lorsqu’elle est envoyée à Heroku et se terminer par le message suivant:
"http://APP_NAME.herokuapp.com/ déployé sur Heroku"

Si vous frappiez l'URL maintenant, vous verriez un message d'échec. Si vous vous rappelez sur votre machine locale, vous deviez exécuter syncdb créer les tables dans la base de données pour l’application à utiliser. Vous devez reproduire ce comportement sur notre instance Heroku. Heureusement, Heroku a fourni un moyen simple d'exécuter ces commandes sur votre instance d'application dans la courroie d'outils que vous avez précédemment installée..

 $ heroku lance python manage.py syncdb 

Vous devriez alors pouvoir visiter votre lien et voir gratuitement le site Web fonctionnant sur Heroku. Essayez d’ajouter des éléments à votre base de données de la même manière qu’au niveau local, pour vous assurer que la base de données est correctement configurée..

Ajouter une nouvelle relique

Une fois votre application déployée avec succès sur la plate-forme Heroku, vous pouvez maintenant commencer à regarder les nombreux add-ons fournis. Heroku fournit une vaste gamme d’add-ons allant des bases de données aux outils de surveillance, aux outils de journalisation avancés, aux outils d’analyse, aux fournisseurs de messagerie, etc. Les add-ons sont l’un des aspects les plus intéressants de l’hébergement de votre application sur Heroku, car ils peuvent être rapidement et facilement affectés à votre application et, en quelques minutes, configurés et fonctionnels. Heroku a simplifié le processus d’ajout de ces outils, ce qui vous évite beaucoup de travail pour que vous puissiez vous concentrer sur la livraison de votre produit..

L’un des ajouts sur lequel cet article se concentrera est l’association du formidable outil de surveillance et d’analyse, New Relic. New Relic dispose de nombreuses fonctionnalités permettant d'explorer votre application et de fournir des statistiques et des données sur des éléments tels que les requêtes par minute, les erreurs, les temps de réponse, etc. Mieux encore, Heroku fournit à nouveau un niveau gratuit pour l'ajout à votre site Web, en plus de l'hébergement gratuit que nous avons actuellement..

Ajouter une nouvelle relique à votre application Heroku est simple et nécessite simplement de vous connecter à la page de gestion de votre compte Heroku. Une fois là-bas, cliquez sur l'application à laquelle vous souhaitez l'ajouter et choisissez "+ Obtenir des add-ons". On vous présentera ensuite le large éventail d’add-ons fournis par Heroku. Recherchez dans"Nouvelle relique"et cliquez dessus. Une page contenant la description et les prix sera affichée, avec une ventilation des fonctionnalités pour chaque niveau de prix. Pour le niveau gratuit, vous aurez essentiellement accès à presque toutes les fonctionnalités, mais ne serez lié qu'aux sept derniers jours. De la page d’ajout de New Relic, vous pouvez simplement copier et coller le code pour attacher New Relic à votre application et l’exécuter sur la ligne de commande..

 $ heroku addons: add newrelic: stark 

Cela ajouté, vous pouvez ensuite revoir la page de votre application dans votre compte Heroku et vous devriez maintenant voir New Relic répertorié sous votre base de données. Cliquez dessus pour commencer la configuration dans votre compte New Relic. Ici, vous devrez accepter les termes et conditions, puis suivre les instructions pour installer New Relic dans votre application Django. Ce sont comme suit:

  1. Ajouter "newrelic" à ton conditions.txt puis exécutez:
    $ pip install -r Requirements.txt
  2. Exécutez cette commande en remplaçant dans la clé de licence qui vous est présentée:
    $ newrelic-admin generate-config YOUR_LICENCE_KEY newrelic.ini
  3. Ouvrez le nouvellement généré newrelic.ini et changer le "nom de l'application"à quelque chose de significatif pour vous, par exemple" Django Tuts + "ou" Django Portfolio "
  4. Modifier le Procfile pour inclure le démarrage de l'agent New Relic avec le serveur:
    NEW_RELIC_CONFIG_FILE = newrelic.ini programme d'exécution newrelic-admin, gunicorn tuts.wsgi
  5. Engagez-vous et transmettez ces modifications à Heroku et vous devriez commencer à voir les données d'application rapportées à New Relic prochainement..
    $ git add .
    $ git commit -m "Ajout de la nouvelle configuration de relique."
    $ git push maître heroku
  6. Après avoir cliqué sur le "Connect App"bouton sur New Relic et l'envoi de demandes à l'application, New Relic devrait indiquer que l'application est connectée et vous pouvez cliquer sur votre tableau de bord pour afficher les données.

Emballer

C'est tout ce qu'on peut en dire! En moins de 15 minutes environ, vous pouvez connecter gratuitement à votre application la surveillance complète de l'application New Relic..

Tuts + a récemment publié quelques excellents articles présentant New Relic et présentant des techniques et des utilisations plus avancées pour l’outil de surveillance. Vous pouvez trouver la gamme complète d'articles ou bien vous pouvez consulter mon autre article sur les tests de performance avec New Relic et JMeter..

J'espère que vous avez trouvé ce tutoriel informatif et quelque chose dans lequel vous pouvez plonger et essayer par vous-même en une heure ou deux. Avec un peu de style et du contenu saisi via la page d’administration créée par Django, vous pouvez rapidement développer un site professionnel, hébergé et surveillé gratuitement..

Consultez mon site Web dans mon profil d'auteur écrit en Django, hébergé par Heroku et surveillé par New Relic, qui a inspiré la rédaction de cet article..