Snabba webbplatsutbyggnad med Django, Heroku & New Relic

Snabb utveckling och implementering av applikationer blir snabbt ett krav och mål för många projekt, gamla och nya. Lyckligtvis uppstår en mängd olika alternativ för utvecklare att dra nytta av när det gäller implementeringsresurser och tät integration med det programmeringsspråk som du väljer. Cloud-utplaceringar, där företag erbjuder en stor mängd hårdvara som du kan skala efter dina behov, blir alltmer populära på grund av deras flexibilitet och kostnadseffektivitet när du följer en lön när du använder modell.

En av de mer spännande förändringarna som detta flyttar till molnplattformar har medfört, särskilt när det gäller mindre projekt, är att många moln ger en kostnadsfri implementeringsmöjlighet, om än med minimal maskinvaruanvändning. Detta möjliggör gratis hosting av prototypapplikationer till exempel eller beta-produkter som ger dig en levande, löpande applikationsinstans som du kan göra tillgänglig för alla du gillar, snabbt. På samma sätt fungerar det perfekt för alla webbplatser som får en måttlig mängd trafik, till exempel ett litet lokalt företag eller till och med en portföljwebbplats där du kan visa upp något av ditt arbete.

Introduktion

Den här artikeln fokuserar på min erfarenhet av att snabbt utveckla en portföljwebbplats i Python och den populära Django webbramen med hjälp av några bootstrap-mallar för att utforma webbplatsen. Med en snygg plats som kan visa upp arbetet, visar jag dig hur du lägger till det i ett Django genererat content management system (CMS), samt hur enkelt det kan vara att distribuera till Heroku för att vara värd för din webbplats och Övervaka sedan trafik, fel och svarstider med hjälp av Herokus inbyggda New Relic-integration. Allt gratis, inom några timmar av arbete.

Skapa din webbplats

Först och främst behöver du ett projekt som du vill vara värd för molnet. Som tidigare sagt var mitt projekt att snabbt skapa en portföljwebbplats för att visa upp mina artiklar och andra projekt, tillsammans med mina C.V och kontaktuppgifter. Python och Django erbjöd en perfekt matchning för dessa krav och du kan snabbt börja bygga en dynamisk webbplats med Django och dess ORM-design, vilket ger enkel integration mellan dina webbmallar och underliggande data lagrade i en databas.

Innan du skriver någon kod bör du skapa en virtuell Python-miljö för ditt projekt, för att hålla beroendet för detta projekt skilt från alla andra. Under huven, virtualenv kopierar effektivt din globala Python-installation till .virtualenvs mapp under en namngiven katalog för din virtualenv. Den lägger sedan till den här platsen på framsidan av din väg så att ditt system använder denna Python-installation för ditt projekt. Alla beroenden installeras här istället för globalt. Du kan göra detta genom att installera först virtualenv och virtualenvwrapper använder Pythons paketchef "pip".

 $ pip installera virtualenv $ pip installera virtualenvwrapper 

Efter installationen av virtualenv verktyg du borde lägga till en källledning till din .bashrc i din hemkatalog (Linux / Mac OS X), vilket möjliggör virtualenvwrapper skript på kommandoraden, vilket möjliggör enkel skapande, aktivering och radering av virtuella miljöer. Du kan skapa virtualenv som följer.

 $ mkvirtualenv portfölj 

Med din miljöinstallation kan du sedan installera Django som du ska använda för att definiera webbapplikationen. Django kan installeras genom att utföra följande kommando.

 $ pip installera django 

Med beroendet på plats är ditt första steg i att skapa ditt Django-projekt att skapa en katalog för att hålla dina filer enligt en ganska standard struktur som visas nedan. Lyckligtvis hjälper Django till att automatisera denna process med hjälp av django-admin.py kommandoradsverktyget. Utför följande för att skapa ditt projekt och applikationskatalog.

 $ django-admin.py startprojekt tuttar 

Detta kommer att ge följande struktur.

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

Du kan läsa mer om installationen av Django-applikationer över i Django officiella dokumentation, men en grundläggande sammanfattning av dessa filer är enligt följande:

  • settings.py - konfiguration för din Django-applikation, till exempel databasanslutningar och appar (se nedan).
  • urls.py - de rutter som länkar till de olika delarna av dina webbplatser.
  • wsgi.py - en fil som tillåter start av din ansökan av webbservrar som Apache.

Det projekt som hittills skapats är bara den yttre behållaren för din faktiska webbapplikation. Köttet i koden borde ligga inne i en app och du kan återigen använda Django's hjälpar metoder för att skapa appstrukturen för dig.

 $ python manage.py startappportfölj 

Detta lägger till i följande i vår övergripande katalogstruktur.

 tuts / tuts / __init__.py settings.py urls.py wsgi.py portfölj / admin.py models.py test.py views.py 

Med din app skapad måste du registrera den för ditt Django-projekt. Öppna settings.py och lägg till "portfölj" till INSTALLED_APPS tupel:

 INSTALLED_APPS = ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles' , "portfölj") 

För att kontrollera allt som fungerar, skriv följande kommando och besök http: // localhost: 8000 i din webbläsare. Du ska se en sida som den som visas i bilden nedan.

Definiera modellen

Nu när din projektkatalog är upprättad, låt oss börja kasta ut koden. Som vi vet vilken typ av data vi vill lägga till på portföljplatsen kan vi börja definiera modellen. Detta beskriver våra data i databasen och låter Django fortsätta och skapa lämpliga fält och tabeller i databasen för oss. På vår hemsida kommer vi att lägga in poster för artiklar, böcker och uppsatsmaterial. Var och en av dessa kan ha sin egen individuella modell om du vill ge dem unika datafält som inte gäller de andra inmatningstyperna. Men för denna webbplats kommer varje post att få ett namn, publiceringsdatum, beskrivning och URL. I models.py filen i katalogen Portfolio App, kan du definiera denna postdata som:

 klassmodell (models.Model): publish_date = models.DateField (max_length = 200) name = models.CharField (max_length = 200) detalj = models.CharField (max_length = 1000) url = models.URLField () thumbnail = models.CharField (MAX_LENGTH = 200) 

Med den definierade modellen kan du sedan generera detta i databasen med Djosos inbyggda kommandoradsverktyg som görs tillgängliga för dig efter installationen. Om du använder sig av manage.py fil igen, kan du också använda SyncDB kommandot för att hantera databasinstallationen för dig. Om du utfärdar följande kommando visas de tillgängliga alternativen som administrationsverktyget tillhandahåller.

 $ python manage.py syncdb Skapa bord ... Skapa tabell portfolio_item Installera anpassad SQL ... Installera index ... Installerad 0 objekt (er) från 0 fixtur (er) 

Använda SyncDB Metod tillåter Django att läsa den modell vi just har skapat och konfigurera den korrekta strukturen för att lagra denna data i databasen. Eftersom det här är första gången du har kört det här kommandot, kommer Django också att be dig att svara på några frågor. Dessa kommer att innehålla objekt som att skapa en superanvändare för databasen (i huvudsak administratören) så att du kan lösa lösenordsskydd mot att göra uppdateringar och ändringar i databasen. Den här användaren kommer även att bilda den första användaren som kan logga in på CMS som kommer att genereras för webbplatsen när vi har mallar igång.

Med användarinställningen ska kommandot återvända och visa att det har kört SQL mot databasen. Nästa steg är att nu kunna komma åt de data som kommer att lagras för att skapa en dynamisk frontänd som du vill visa för användaren. För att uppnå detta måste du lägga till kod till synpunkterna för att komma åt de data som du kommer att lagra i databasen. Med de data som är tillgängliga för synpunkterna kan den sedan vidarebefordras till mallar som kan tolkas som information till slutanvändaren. I det här fallet kommer detta att vara i form av HTML-sidor för en webbläsare. Det är dock värt att notera att det här mönstret kan användas för andra typer av applikationer som att producera JSON eller XML, vilket återigen bara skulle använda modellen för att definiera och flytta data och de åsikter som presenterar den i rätt format av JSON / XML i motsats till HTML.

Våra åsikter

I synpunkterna kommer du att använda de data som lagras i databasen för visning till användarna. För att göra detta importerar vi Artikel klass för att få tillgång till den modellen (med Django hantering av databasen nedan) och ge data som variabler till den "mall" som Django kommer att göra. Mallen är mestadels statisk HTML, med tillägg av möjligheten att utföra en begränsad uppsättning Python-kod för att behandla dina data och visa den efter behov. Du kan till exempel överföra hela listan med objektobjekt till mallen, men släng sedan över den listan i mallen för att bara få namnet från varje objekt och visa det inom en H1 märka. Förhoppningsvis kommer detta att bli tydligare med hjälp av exempel nedan.

Öppna upp views.py fil som skapades för dig tidigare och lägg till följande kod som kommer att utföras när du öppnar hemsidan (eller index) på din webbplats.

def index (request): items = Item.objects.order_by ("- publish_date") nu = datetime.datetime.now () return render (request, "portfölj / index.html", "poster" ": nu.år) 

Detta samlar alla objekt som lagras i databasen, beställer dem via fältet Publiceringsdatum, låter dig visa den senaste först och sedan skicka dem till mallen som du skapar inom kort. Ordlistan som skickas till renderingsmetoden är känd som sammanhang och du kommer enkelt att få tillgång till det här kontextobjektet i mallen för att visa data efter behov.

mallar

Django använder sig av Jinja2-templerande bibliotek för att hantera bearbetningen av dess mallar och är verkligen trevligt att använda, eftersom dess syntax är okomplicerad och dess förmågor är kraftfulla för att producera vad du behöver. Det är värt att notera, men en fälla som de flesta utvecklare hamnar i när man arbetar med Jinja2 gör för mycket logik inom mallen. Medan Jinja2 ger dig en stor mängd standard Python-operationer, är den avsedd för enkel bearbetning för att få data i formatet för visning. Logiken för att hämta och strukturera data borde ha gjorts i kontrollenhet och eller visning. Du kommer att veta när du har fallit in i den här fällan när du kodar mycket inuti mallarna och blir frustrerad som Jinja2-utmatningsfel eller dina visade data kommer inte att visas som du vill. Vid denna tidpunkt är det värt att se om du kan göra mer bearbetning på framsidan innan du skickar den vidare till mallen.

Med vår index metod som hanterar åtkomst av data, allt som finns kvar är att definiera mallen för att visa våra objekt. Som föreslagits av index metod, du måste lägga till en index.html filen i portföljen app för att den ska göra. Lägg till den filen med följande kod.

    Tuts + Django Exempel   

Välkommen till din Django-webbplats.

Här är dina föremål:

    % för objekt i objekt%
  • föremålsnamn
  • % endfor%

Detta är en grundläggande HTML-sida som kommer att slingra över och skapa en punktlista för objektnamnen. Du kan självklart utforma detta men du önskar och jag rekommenderar starkt användningen av en bootstrap-mall om du letar efter att få något professionellt och snabbt igång. Se mer på Bootstraps hemsida.

Webbadresser adresser~~POS=HEADCOMP

Det sista stycket för att se om allt fungerar är att fortsätta och lägga till rotwebadressen för att peka på den här mallen som ska göras. Under appkatalogen öppnas "tuts" urls.py och lägg till följande URL-direktiv till de automatiskt genererade exemplen och administratörsadressen.

 urlpatterns = mönster (", # Exempel: # url (r '^ $', 'tuts.views.home', name =" home "), # url (r '^ blogg /', inkludera ('blog.urls' )), url (r ^ admin / ', inkluderar (admin.site.urls)), url (r' ^ $ ', views.index, name = "index") 

Slutligen, öppna upp admin.py att avslöja Artikel klass till admin CMS, så att du kan ange data som ska visas på hemsidan.

 från portfolio.models import Artikel admin.site.register (Item) 

Du ska då kunna starta din webbplats (med kör server som tidigare) och utföra följande uppgifter.

  1. Öppna hemsidan och se till att inga objekt visas.
  2. Öppna http: // localhost: 8000 / admin och ange användaruppgifter skapade med SyncDB tidigare.
  3. Öppna objekt och lägg till ett nytt föremål som fyller i fälten.
  4. Besök hyllan och du bör se objektnamnet som en punktpunkt.

Prova att komma åt andra aspekter av objektdata i mallen. Byt till exempel koden inom punktpunkten för att lägga till publiceringsdatumet också. Till exempel:

 item.publish_date - item.name 

Du har nu en arbetsplats som helt enkelt behöver någon styling och mer innehåll för att kunna fungera som en arbetsportföljwebbplats.

Utplacering till Heroku

Heroku är en stor molnplattform som är tillgänglig för alla utvecklare och företag, som en företags klass värdtjänst som är skräddarsydd för att passa alla värdkrav. Från hobbywebbplatser, hela vägen till hög trafik, kritiska företagswebbplatser, kan Heroku hantera allt. Bäst av allt, deras prissättning struktur innehåller en gratis nivå som är mer än kapabel att driva en liten webbplats, såsom den portfölj webbplats vi har byggt.

Heroku använder det någonsin populära Git-källkodshanteringsverktyget som sin mekanism för att styra utplaceringar till plattformen. Allt du behöver för att komma igång är ett projekt, git installerat och ett Heroku-konto som kan erhållas genom att besöka anmälningssidan.

När du har registrerat dig, gå in i ditt Heroku-konto och skapa en app med en "web dyno". Heroku ger en gratis dyne, som kan köra en enda applikationsinstans och måttlig trafik till det exemplet. Ge din app ett namn eller låt Heroku tilldela en för dig. Eftersom vi behöver använda en databas för vår ansökan, gå in i Add-Ons och bifoga den kostnadsfria PostgreSQL-förekomsten till din app.

Med din app skapade följer du bara dessa steg för att konfigurera din git förvar och tryck till Heroku.

Installera Django Toolbelt som du hittar i utvecklaravsnittet på Heroku-webbplatsen.

Initiera Git repo i projektkatalogen genom att utfärda följande kommandon:

 $ git init. $ git lägg till. $ git commit -m "Initial project commit." 

Med Git-förvaret på plats lägger du till Heroku-programmets fjärrkontroll så att du kan trycka koden på heroku.

 $ heroku git: remote -a YOUR_APP_NAME 

Heroku behöver veta kommandot för exakt hur man startar din ansökan. För detta måste du lägga till en "ProcfileMsgstr "Lägg till filen med namnet"Procfile"i roten till din projektkatalog med följande innehåll.

 webb: gunicorn tuts.wsgi 

För att göra det möjligt för Heroku-appen att ansluta till databasen förekomsten som är kopplad till din applikation i molnet, måste du lägga till följande rad för att settings.py. Det betyder att du inte behöver ange någon kod och Heroku hanterar anslutningarna för dig.

 om inte os.environ.get ("HOME") == '/ PATH / TO / YOUR / HOME': # Parse-databaskonfiguration från $ DATABASE_URL importera dj_database_url DATABASER ['default'] = dj_database_url.config () 

Genom att omsluta inställningen för denna databasanslutning i om uttalande, gör det möjligt för konfigurationen att fungera som på din lokala maskin, men konfigurera databasen korrekt när du är på Heroku.

Du måste också lägga till en requirements.txt, som anger dina Pythonberoende för applikationen så att Heroku kan installera dem i den skapade miljön. Lägg till requirements.txt på samma nivå som Procfile med följande innehåll:

 Django == 1.6.2 dj-databas-url == 0.3.0 dj-statisk == 0,0,5 django-verktygsbälte == 0.0.1 gunicorn == 18.0 newrelic == 2.16.0.12 psycopg2 == 2.5.2 wsgiref = = 0.1.2 

Med de skapade filerna lägger du till dem i Git och sedan till Heroku-fjärrkontrollen, där den kommer att tas emot och startas.

 $ git lägg till. $ git commit -m "Added procfile och requirements.txt" $ git push heroku master 

Du bör se lite utmatning som det skickas till Heroku och kommer att slutföra med följande meddelande:
"http://APP_NAME.herokuapp.com/ distribueras till Heroku"

Om du skulle träffa webbadressen nu skulle du se ett felmeddelande. Om du kommer ihåg på din lokala maskin, behövde du springa SyncDB att skapa tabellerna i databasen för att applikationen ska användas. Du måste reproducera detta beteende i vår Heroku-instans. Lyckligtvis gav Heroku ett enkelt sätt att utföra dessa kommandon mot din ansökningsinstans i verktygsbältet du tidigare installerat.

 $ heroku kör python manage.py syncdb 

Du borde då kunna besöka din länk och se webbplatsen som körs på Heroku, gratis. Prova att lägga till några objekt i din databas på samma sätt som du gjorde lokalt för att säkerställa att databasen är korrekt konfigurerad.

Lägg till ny relik

Med din ansökan implementerad framgångsrikt på Heroku-plattformen kan du nu börja titta på de många tillägg som tillhandahålls. Heroku erbjuder ett stort utbud av tillägg som spänner från databaser, övervakningsverktyg, avancerade logverktyg, analyser, e-postleverantörer och många fler. Tilläggen är en av de stora aspekterna av att vara värd för din ansökan på Heroku, eftersom de snabbt och enkelt kan tilldelas din ansökan och inom några minuter, konfigureras och fungerar. Heroku har effektiviserat processen för att lägga till i dessa verktyg och det tar mycket arbete ut ur händerna så att du kan fokusera på att leverera din produkt.

En av de tillägg som denna artikel kommer att fokusera på är att fästa det stora övervaknings- och analysverktyget New Relic. New Relic har många möjligheter att gräva in i din ansökan och tillhandahålla statistik och data kring saker som förfrågningar per minut, fel, svarstider och mer. Bäst av allt, Heroku ger återigen en gratis nivå för att lägga till din webbplats för att följa med den fria webbhotell som vi för närvarande har.

Att lägga till nytt relik i din Heroku-applikation är enkelt och kräver att du bara loggar in på din Heroku-kontohanteringssida. En gång där, klicka på det program du vill lägga till det till och välj "+ Få tillägg". Du kommer då att presenteras med det stora utbudet av tillägg som Heroku tillhandahåller. Sök igenom för"New Relic"och klicka på den. En sida som visar beskrivningen och prissättningen kommer att visas och en sammanfattning av funktionerna som är aktiverade på varje prisnivå. För den fria nivån får du i princip tillgång till nästan alla funktioner men är bundna till endast de senaste sju dagarna värden av data. Från New Relic lägg till på sidan kan du helt enkelt kopiera och klistra in koden för att bifoga New Relic till din ansökan och köra den på kommandoraden.

 $ heroku addons: lägg till newrelic: stark 

Med det som läggs till kan du sedan återvända din appsida på ditt Heroku-konto och du bör nu se New Relic som anges nedan i din databas. Klicka på den för att starta inställningen inom ditt New Relic-konto. Här måste du acceptera användarvillkoren och följ instruktionerna för att installera New Relic i din Django-applikation. Dessa är följande:

  1. Lägg till "newrelic" till din requirements.txt och kör sedan:
    $ pip installera -r requirements.txt
  2. Utför det här kommandot i den licensnyckel som visas till dig:
    $ newrelic-admin generera-config YOUR_LICENCE_KEY newrelic.ini
  3. Öppna den nybildade newrelic.ini och ändra "app-namn"till något meningsfullt för dig, t ex" Django Tuts + "eller" Django Portfolio "
  4. Redigera Procfile att inkludera starten av New Relic Agent med servern:
    NEW_RELIC_CONFIG_FILE = newrelic.ini newrelic-admin körprogram gunicorn tuts.wsgi
  5. Kommit och driva dessa förändringar till Heroku och du bör snart se ansökningsrapportering till New Relic inom kort.
    $ git lägg till .
    $ git commit -m "Added New Relic config."
    $ git push heroku master
  6. Efter att ha klickat på "Anslut app"knappen på New Relic och skickar några förfrågningar till programmet, bör New Relic visa att programmet har anslutit och du kan klicka till din instrumentpanel för att se data.

Sammanfatta

Det är allt det finns! Inom cirka 15 minuter kan du få full New Relic applikationsövervakning kopplad till din ansökan, gratis igen.

Tuts + har nyligen haft några bra artiklar som introducerar New Relic och visar några mer avancerade tekniker och användningsområden för övervakningsverktyget. Du kan hitta hela sortimentet av artiklar eller alternativt kan du gå direkt till min andra artikel om prestandatestning med New Relic och JMeter.

Förhoppningsvis har du hittat denna handledning informativ och något som du kan dyka rätt in och försöka själv i en extra timme eller två. Med lite styling och lite innehåll som matas in via admin sidan skapar Django, kan du snabbt utveckla en professionell webbplats, värd och övervakas gratis.

Kolla in min hemsida i min författarprofil som skrevs i Django, värd av Heroku och övervakad av New Relic, som inspirerade skrivandet av denna artikel.