Snelle website-implementatie met Django, Heroku & New Relic

Snelle ontwikkeling en inzet van applicaties wordt in snel tempo een vereiste en doel voor veel projecten, oud en nieuw. Gelukkig ontluiken een groot aantal opties voor ontwikkelaars om te profiteren van de inzetmiddelen en de nauwe integratie met de programmeertaal van uw keuze. Cloudimplementaties, waarbij bedrijven een enorme hoeveelheid hardware aanbieden die u kunt afstemmen op uw behoeften, worden steeds populairder vanwege hun flexibiliteit en kosteneffectiviteit bij het volgen van een betaling terwijl u model gebruikt.

Een van de meer opwindende veranderingen die deze overstap naar cloud-platforms met zich mee heeft gebracht, met name in het geval van kleinere projecten, is dat veel clouds een gratis implementatiemogelijkheid bieden, zij het met minimaal hardwaregebruik. Dit maakt gratis hosting van prototype-applicaties bijvoorbeeld of bètaproducten mogelijk, waardoor u een live, draaiende applicatie-instance krijgt die u snel beschikbaar kunt stellen voor iedereen die u leuk vindt. Op dezelfde manier werkt het perfect voor elke website die een bescheiden hoeveelheid verkeer ontvangt, zoals een klein lokaal bedrijf of zelfs een portfoliowebsite waar u sommige van uw werk kunt laten zien.

Invoering

Dit artikel concentreert zich op mijn ervaring met het snel ontwikkelen van een portfoliowebsite in Python en het populaire Django-webraamwerk met behulp van enkele bootstrap-sjablonen om de site te stylen. Met een nette site die het werk kan demonstreren, laat ik je zien hoe je het kunt toevoegen aan een door Django gegenereerd Content Management System (CMS), en hoe gemakkelijk het kan zijn om je in te zetten in Heroku voor het hosten van je site en controleer vervolgens het verkeer, de fouten en responstijden met behulp van Heroku's ingebouwde New Relic-integratie. Allemaal gratis, binnen een paar uur werk.

Maak uw website

Allereerst heeft u een project nodig dat u in de cloud wilt hosten. Zoals eerder vermeld, was mijn project om snel een portfoliowebsite te creëren van waaruit ik mijn artikelen en andere projecten, mijn C.V- en contactinformatie kon presenteren. Python en Django boden een perfecte match voor deze vereisten en je kunt snel beginnen met het bouwen van een dynamische website met Django en zijn ORM-ontwerp, waardoor een eenvoudige integratie mogelijk is tussen je websjablonen en onderliggende gegevens die in een database zijn opgeslagen.

Voordat u een code schrijft, moet u een Python-virtuele omgeving voor uw project maken om de afhankelijkheden voor dit project gescheiden te houden van andere. Onder de motorkap, virtualenv kopieert uw wereldwijde Python-installatie effectief naar de .virtualenvs map onder een benoemde map voor uw virtualenv. Vervolgens wordt deze locatie aan de voorkant van uw pad toegevoegd, zodat uw systeem deze Python-installatie voor uw project gebruikt. Alle afhankelijkheden worden vervolgens hier geïnstalleerd in plaats van wereldwijd. U kunt dit doen door het eerst te installeren virtualenv en virtualenvwrapper Python's pakketbeheerder gebruiken "Pip".

 $ pip install virtualenv $ pip install virtualenvwrapper 

Na het installeren van de virtualenv tools moet u dan een bronregel toevoegen aan uw .bashrc in uw thuismap (Linux / Mac OS X), waardoor de virtualenvwrapper scripts op de opdrachtregel, waardoor eenvoudige creatie, activering en verwijdering van virtuele omgevingen mogelijk is. U kunt het maken virtualenv als volgt.

 $ mkvirtualenv portfolio 

Met uw omgevingsinstellingen kunt u vervolgens Django installeren die u gaat gebruiken om de webtoepassing te definiëren. Django kan worden geïnstalleerd door het volgende commando uit te voeren.

 $ pip installeer django 

Met de afhankelijkheden op zijn plaats, is uw eerste stap bij het maken van uw Django-project het creëren van een map om uw bestanden te houden volgens een vrij standaard structuur zoals hieronder getoond. Gelukkig helpt Django dit proces te automatiseren met behulp van de django-admin.py opdrachtregelprogramma. Voer het volgende uit om uw project- en toepassingsmap te maken.

 $ django-admin.py start projecttuts 

Dit levert de volgende structuur op.

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

Je kunt meer lezen over de setup van Django-applicaties in de officiële documentatie van Django, maar een basisoverzicht van die bestanden is als volgt:

  • settings.py - configuratie voor uw Django-applicatie, zoals databaseverbindingen en apps (zie hieronder).
  • urls.py - de routes die naar de verschillende delen van uw sites linken.
  • wsgi.py - een bestand om het starten van uw applicatie door webservers zoals Apache mogelijk te maken.

Het tot nu toe gemaakte project is slechts de buitenste container voor uw eigenlijke webapplicatie. Het vlees van de code moet in een app staan ​​en je kunt opnieuw gebruik maken van de hulpmethoden van Django om de app-structuur voor je te maken.

 $ python manage.py startapp-portfolio 

Dit zal het volgende toevoegen aan onze algemene mappenstructuur.

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

Nadat je app is gemaakt, moet je deze registreren voor je Django-project. Doe open settings.py en voeg "portfolio" toe aan de INSTALLED_APPS tuple:

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

Om te controleren of alles werkt, geeft u de volgende opdracht op en bezoekt u http: // localhost: 8000 in uw browser. Je zou een pagina moeten zien zoals die in de onderstaande afbeelding.

Het model definiëren

Nu uw projectdirectory is ingesteld, gaan we de code nader uitwerken. Omdat we weten welk type gegevens we aan de portfoliosite willen toevoegen, kunnen we beginnen met het definiëren van het model. Dit beschrijft onze gegevens in de database en laat Django toe om de juiste velden en tabellen in de database voor ons te maken. Op onze website plaatsen we inzendingen voor artikelen, boeken en scriptiemateriaal. Elk van deze kan zijn eigen individuele model hebben als u ze unieke gegevensvelden wilt geven die niet van toepassing zijn op de andere boekingstypen. Voor deze website krijgt elke vermelding echter een naam, publicatiedatum, beschrijving en URL. In de models.py bestand onder de map portfolio-app kunt u deze invoergegevens als volgt definiëren:

 class Item (models.Model): publish_date = models.DateField (max_length = 200) name = models.CharField (max_length = 200) detail = models.CharField (max_length = 1000) url = models.URLField () thumbnail = models.CharField (max_length = 200) 

Met het gedefinieerde model kunt u dit in de database genereren met behulp van de ingebouwde opdrachtregelprogramma's van Django die na installatie beschikbaar worden gesteld. Als u gebruik maakt van de manage.py bestand opnieuw, u kunt ook de syncdb commando om de database setup voor u af te handelen. Als u de volgende opdracht geeft, krijgt u de beschikbare opties te zien die deze beheertool biedt.

 $ python manage.py syncdb Tabellen maken ... Tabel maken portfolio_item Aangepaste SQL installeren ... Indexen installeren ... 0 object (en) uit 0 fixture (s) geinstalleerd 

De ... gebruiken syncdb Met deze methode kan Django het model lezen dat we zojuist hebben gemaakt en de juiste structuur instellen om deze gegevens in de database op te slaan. Omdat dit de eerste keer is dat je deze opdracht hebt uitgevoerd, zal Django je ook vragen een paar vragen te beantwoorden. Deze omvatten items zoals het maken van een superuser voor de database (in wezen de beheerder) waarmee u een wachtwoord kunt beveiligen tegen het maken van updates en wijzigingen in de database. Deze gebruiker vormt ook de eerste gebruiker die kan inloggen op de CMS die wordt gegenereerd voor de website zodra we sjablonen in gebruik hebben.

Met de gebruikersconfiguratie zou de opdracht moeten terugkeren, waaruit blijkt dat de SQL tegen de database is uitgevoerd. De volgende stap is om nu toegang te krijgen tot de gegevens die worden opgeslagen om een ​​dynamische frontend te maken die u aan de gebruiker wilt laten zien. Om dit te bereiken, moet u code aan de views toevoegen om toegang te krijgen tot de gegevens die u in de database zult opslaan. Met de gegevens die beschikbaar zijn voor de weergaven, kan deze deze doorgeven aan sjablonen die kunnen worden geïnterpreteerd als informatie voor de eindgebruiker. In dit geval is dit in de vorm van HTML-pagina's voor een webbrowser. Het is echter vermeldenswaard dat dit patroon kan worden gebruikt voor andere typen toepassingen, zoals het produceren van JSON of XML, die het model opnieuw zouden gebruiken om de gegevens en de weergaven ervan te definiëren en te verplaatsen, in de juiste indeling van JSON / XML in tegenstelling tot HTML.

Onze meningen

In de views gaat u gebruik maken van de gegevens die in de database worden opgeslagen voor weergave aan de gebruikers. Om dit te doen, importeren we de Item klasse om toegang te krijgen tot dat model (waarbij Django de toegang van de onderliggende database aanpakt) en de gegevens als variabelen aan de "sjabloon" levert die Django zal weergeven. De sjabloon is meestal statische HTML, met de toevoeging van de mogelijkheid om een ​​beperkte set Python-code uit te voeren om uw gegevens te verwerken en weer te geven zoals vereist. U kunt bijvoorbeeld de volledige lijst met itemobjecten doorgeven aan de sjabloon, maar vervolgens in de lijst doorlopen over de lijst om alleen de naam van elk item te krijgen en deze binnen een sjabloon weer te geven. H1 label. Hopelijk wordt dit duidelijker aan de hand van onderstaande voorbeelden.

Open de views.py bestand dat eerder voor u is gemaakt en voeg de volgende code toe die wordt uitgevoerd wanneer u naar de startpagina (of indexpagina) van uw website gaat.

def index (request): items = Item.objects.order_by ("- publish_date") now = datetime.datetime.now () return render (request, 'portfolio / index.html', "items": items, "year ": now.year) 

Hiermee worden alle items verzameld die in de database zijn opgeslagen, worden ze gesorteerd op het veld publicatiedatum, kunt u de meest recente eerst weergeven en deze vervolgens doorgeven aan de sjabloon die u binnenkort gaat maken. Het woordenboek dat aan de rendermethode is doorgegeven, staat bekend als context en u kunt dit contextobject eenvoudig in de sjabloon openen om de gegevens weer te geven zoals vereist.

templates

Django maakt gebruik van de Jinja2-sjabloonbibliotheek om de verwerking van de sjablonen te verwerken en is erg leuk om te gebruiken, omdat de syntaxis eenvoudig is en de mogelijkheden ervan krachtig genoeg zijn om te produceren wat je nodig hebt. Het is echter de moeite waard om te weten dat de meeste ontwikkelaars in de val lopen als ze met Jinja2 te veel logica binnen de sjabloon gebruiken. Hoewel Jinja2 u een groot aantal standaard Python-bewerkingen biedt, is het bedoeld voor eenvoudige verwerking om de gegevens in het weergegeven formaat te krijgen. De logica voor het ophalen en structureren van de gegevens moet allemaal zijn gedaan in de controller en / of weergave. Je zult weten wanneer je in deze val bent gevallen wanneer je veel codeert in de sjablonen en gefrustreerd raakt omdat Jinja2 fouten uitvoert of je weergegeven gegevens gewoon niet verschijnen zoals je wilt. Op dit punt is het de moeite waard om de weergave opnieuw te bekijken om te zien of u van te voren meer bewerkingen kunt doen voordat u het doorgeeft aan de sjabloon.

Met onze inhoudsopgave methode die de toegang tot gegevens verwerkt, het enige dat overblijft is om de sjabloon te definiëren om onze items weer te geven. Zoals gesuggereerd door de inhoudsopgave methode, moet u een toevoegen index.html bestand in de portfolio-app om te renderen. Voeg dat bestand toe met de volgende code.

    Tuts + Django Voorbeeld   

Welkom bij uw Django-site.

Dit zijn je objecten:

    % voor item in items%
  • Itemnaam
  • % endfor%

Dit is een eenvoudige HTML-pagina die doorloopt en een lijst met opsommingen van de itemnamen maakt. Je kunt dit natuurlijk ook naar eigen smaak inrichten en ik raad ten zeerste het gebruik van een bootstrapsjabloon aan als je snel iets professioneel wilt laten werken. Meer informatie op de website van Bootstrap.

URL's

Het laatste stuk om te zien of alles werkt, is om door te gaan en de root-URL toe te voegen om te wijzen op deze sjabloon die moet worden weergegeven. Onder de app-map openen "tuts" urls.py en voeg de volgende URL-richtlijn toe aan de automatisch gegenereerde voorbeelden en de beheerders-URL.

 urlpatterns = patronen (", # Voorbeelden: # 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"),) 

Eindelijk, open admin.py om de Item klasse naar de beheerders-CMS, zodat u de gegevens kunt invoeren die op de startpagina moeten worden weergegeven.

 van portfolio.models importeer Item admin.site.register (item) 

U zou dan uw website moeten kunnen opstarten (met server uitvoeren zoals eerder) en voer de volgende taken uit.

  1. Open de startpagina en zie dat er geen items worden weergegeven.
  2. Open http: // localhost: 8000 / admin en voer de inloggegevens in die zijn gemaakt met syncdb vroeger.
  3. Open items en voeg een nieuw item toe waarmee de velden worden ingevuld.
  4. Bezoek het eerbetoon en je zou de itemnaam als een opsommingsteken moeten zien.

Probeer toegang te krijgen tot andere aspecten van de artikelgegevens in de sjabloon. Wijzig bijvoorbeeld de code binnen het opsommingsteken om ook de publicatiedatum toe te voegen. Bijvoorbeeld:

 item.publish_date - item.name 

U hebt nu een werkende site die gewoon wat styling en meer inhoud nodig heeft om als een werkende portfoliowebsite te kunnen functioneren.

Implementeren naar Heroku

Heroku is een geweldig cloudplatform dat beschikbaar is voor alle ontwikkelaars en bedrijven, als een hostingdienst van enterprise klasse die is toegesneden op alle hostingvereisten. Van hobbywebsites, tot aan kritieke zakelijke websites met veel verkeer, Heroku kan het allemaal aan. Het beste van alles is dat hun prijsstructuur een gratis laag omvat die meer dan in staat is om een ​​kleine website te draaien, zoals de portfoliowebsite die we hebben gebouwd.

Heroku maakt gebruik van de altijd populaire Git-broncodebeheertool als hun mechanisme voor het besturen van implementaties naar het platform. Het enige dat u nodig hebt om aan de slag te gaan, is een project, git geïnstalleerd en een Heroku-account die kan worden verkregen door naar de aanmeldingspagina te gaan.

Zodra je je hebt aangemeld, ga je naar je Heroku-account en maak je een app met één "webdyno". Heroku biedt één dyne gratis, die in staat is om één enkele applicatie-instance uit te voeren en verkeer naar die instance te matigen. Geef je app een naam of laat Heroku er een voor je toewijzen. Aangezien we een database moeten gebruiken voor onze applicatie, ga dan verder Add-Ons en koppel de gratis PostgreSQL-instantie aan uw app.

Nadat je je app hebt gemaakt, volg je deze stappen om je git repository en push naar Heroku.

Installeer de Django Toolbelt die u kunt vinden in de ontwikkelaarsectie van de Heroku-website.

Initialiseer de Git-repo in uw projectdirectory door de volgende opdrachten te geven:

 $ git init. $ git add. $ git commit -m "Initiële project commit." 

Met de Git-repository op zijn plaats, voeg je de afstandsbediening van de Heroku-applicatie toe, zodat je de code naar heroku kunt duwen.

 $ heroku git: remote -een YOUR_APP_NAME 

Heroku moet de opdracht kennen voor precies hoe u uw toepassing moet starten. Hiervoor moet u een "Procfile"Voeg het bestand met de naam"Procfile"in de hoofdmap van uw projectdirectory, met de volgende inhoud.

 web: gunicorn tuts.wsgi 

Als u de Heroku-app de mogelijkheid wilt bieden om verbinding te maken met de database-instantie die is gekoppeld aan uw toepassing in de cloud, moet u de volgende regel toevoegen aan settings.py. Dit betekent dat je geen enkele configuratie hoeft te coderen en Heroku zal de verbindingen voor je afhandelen.

 if not os.environ.get ("HOME") == '/ PATH / TO / YOUR / HOME': # Ontleed de databaseconfiguratie van $ DATABASE_URL import dj_database_url DATABASES ['default'] = dj_database_url.config () 

Door de instelling van deze databaseverbinding in de als verklaring, het staat de configuratie toe om te werken zoals is op uw lokale machine maar opstelling de gegevensbestand correct wanneer op Heroku.

Je moet ook een toevoegen requirements.txt, die uw Python-afhankelijkheden voor de toepassing specificeert, zodat Heroku deze in de gecreëerde omgeving kan installeren. Toevoegen requirements.txt op hetzelfde niveau als de Procfile met de volgende inhoud:

 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 

Voeg de bestanden met deze bestanden toe aan Git en druk vervolgens op de Heroku-afstandsbediening, waar deze wordt ontvangen en gestart.

 $ git add. $ git commit -m "Toegevoegd procfile en requirements.txt" $ git push heroku master 

Je zou een aantal uitvoer moeten zien zoals deze naar Heroku is verzonden en eindigen met het volgende bericht:
"http://APP_NAME.herokuapp.com/ geïmplementeerd in Heroku"

Als u nu de URL zou raken, zou er een foutmelding verschijnen. Als u zich op uw lokale computer herinnert, moest u uitvoeren syncdb om de tabellen in de database te maken voor de toepassing die moet worden gebruikt. U moet dit gedrag reproduceren op onze Heroku-instantie. Gelukkig heeft Heroku een eenvoudige manier geboden om deze opdrachten uit te voeren met uw toepassingsinstantie in de gereedschapsriem die u eerder hebt geïnstalleerd.

 $ heroku voer python manage.py syncdb uit 

U zou dan uw link moeten kunnen bezoeken en de website gratis op Heroku kunnen zien. Probeer een aantal items aan uw database toe te voegen op dezelfde manier als u lokaal hebt gedaan, om er zeker van te zijn dat de database correct is ingesteld.

Voeg nieuw relikwie toe

Met uw applicatie succesvol geïmplementeerd op het Heroku-platform, kunt u nu beginnen met het bekijken van de vele add-ons die worden aangeboden. Heroku biedt een groot aantal add-ons, variërend van databases, monitoringtools, geavanceerde log-tools, analyses, e-mailproviders en nog veel meer. De add-ons zijn een van de geweldige aspecten van het hosten van uw applicatie op Heroku, omdat ze snel en eenvoudig kunnen worden toegewezen aan uw applicatie en binnen enkele minuten kunnen worden geconfigureerd en werken. Heroku heeft het proces voor het toevoegen van deze tools gestroomlijnd en het kost u veel werk uit handen zodat u zich kunt concentreren op het leveren van uw product.

Een van de add-ons waarop dit artikel zal focussen, is het toevoegen van de geweldige monitoring en analyse tool New Relic. New Relic heeft vele mogelijkheden om in uw toepassing te graven en statistieken en gegevens te leveren rond items zoals verzoeken per minuut, fouten, reactietijden en meer. Het beste van alles is dat Heroku opnieuw een gratis laag biedt voor toevoeging aan uw website om mee te doen met de gratis hosting die we momenteel hebben.

Het toevoegen van New Relic aan je Heroku-applicatie is eenvoudig en vereist dat je je gewoon aanmeldt op je Heroku-accountbeheerpagina. Eenmaal daar, klik je in de applicatie waaraan je het wilt toevoegen en kies je "+ Ontvang add-ons"Je krijgt dan de uitgebreide reeks add-ons te zien die Heroku biedt.Nieuwe relikwieen klik erop, een pagina met de beschrijving en prijzen wordt weergegeven en een uitsplitsing van de functies die op elk prijsniveau zijn ingeschakeld. Voor de gratis laag krijgt u in principe toegang tot bijna elke functie, maar deze is gekoppeld aan alleen de laatste zeven dagen De nieuwe Relic add-on-pagina kunt u eenvoudig kopiëren en plakken om New Relic aan uw applicatie toe te voegen en op de opdrachtregel uit te voeren.

 $ heroku addons: add newrelic: stark 

Als dat is toegevoegd, kunt u vervolgens uw app-pagina opnieuw bekijken in uw Heroku-account en ziet u nu Nieuw relikwie onder uw database. Klik erop om te beginnen met de installatie binnen uw nieuwe relic-account. Hier moet je de algemene voorwaarden accepteren en vervolgens de instructies volgen voor het installeren van New Relic in je Django-applicatie. Deze zijn als volgt:

  1. Toevoegen "newrelic" aan jouw requirements.txt en voer dan uit:
    $ pip install -r requirements.txt
  2. Voer deze opdracht uit door de getoonde sleutel te vervangen door:
    $ newrelic-admin generate-config YOUR_LICENCE_KEY newrelic.ini
  3. Open de nieuw gegenereerde newrelic.ini en verander de "applicatie naam"naar iets dat voor jou betekenisvol is, bijvoorbeeld" Django Tuts + "of" Django Portfolio "
  4. Bewerk de Procfile om het starten van de New Relic-agent met de server op te nemen:
    NEW_RELIC_CONFIG_FILE = newrelic.ini newrelic-admin run-programma gunicorn tuts.wsgi
  5. Zet deze wijzigingen in en push ze naar Heroku en begin binnenkort met het weergeven van toepassingsgegevens aan New Relic.
    $ git add .
    $ git commit -m "Nieuwe relic-configuratie toegevoegd."
    $ git push heroku master
  6. Na het klikken op de "App verbinden"knop op New Relic en verzenden van enkele verzoeken naar de applicatie, zou New Relic moeten laten zien dat de applicatie is verbonden en kunt u doorklikken naar uw dashboard om de gegevens te zien.

Afronden

Dat is alles wat er is! Binnen ongeveer 15 minuten kunt u de volledige New Relic applicatiebewaking laten toevoegen aan uw applicatie, opnieuw gratis.

Tuts + heeft onlangs enkele geweldige artikelen geïntroduceerd die New Relic introduceren en enkele meer geavanceerde technieken en gebruiksmogelijkheden voor de monitoringtool laten zien. U kunt het volledige assortiment van artikelen vinden, of u kunt rechtstreeks doorgaan naar mijn andere artikel over prestatietests met behulp van New Relic en JMeter.

Hopelijk heb je deze tutorial informatief en iets gevonden waar je meteen in kunt duiken en het zelf binnen een paar uur kunt proberen. Met een beetje styling en wat inhoud ingevoerd via de beheerderspagina die Django creëert, kun je snel een professionele site ontwikkelen, gratis gehost en gevolgd worden.

Bekijk mijn website in mijn auteursprofiel dat is geschreven in Django, gehost door Heroku en gemonitord door New Relic, wat de inspiratie was voor het schrijven van dit artikel.