Köra en Python-applikation på ditt hostingpaket

Med varje paket hos my.host har du möjlighet att köra en Python-applikation. Innan du kan driftsätta en applikation behöver du gå igenom några steg. Vi förklarar vilka dessa steg är i den här kunskapsbasartikeln.

Vad är viktigt att känna till?

  • Utför endast dessa steg om inga viktiga webbplatser körs på ditt webbhotell. Genom att följa den här kunskapsbasartikeln driftsätter du omedelbart en Python-applikation i produktion, vilket innebär att det finns en risk att du skadar den nuvarande webbplatsen.
  • Det rekommenderas att du först skapar en staging- eller dev-miljö och inte går direkt till produktion.
  • Vänta med att ange känsliga uppgifter i testapplikationen tills du vet hur säkerheten i Django fungerar.

 

Skapa applikationen

Gå till DirectAdmin. Hur du kommer dit kan du läsa i den här artikeln: https://my.host/kb/hoe-log-ik-in-op-directadmin/

När du har loggat in i DirectAdmin hittar du Extra Features i menyn till vänster och därefter Setup Python App.

skapa applikation via DirectAdmin


Klicka sedan på Create Application för att skapa din applikation.

skapa applikation

 

Du kommer nu till följande skärm:

applikationsinställningar

Här finns några viktiga fält som du behöver fylla i:

Python version: Den version av Python som du arbetar med. Det rekommenderas att använda version 3.9 eller 3.10.

Application root: Detta är katalogen där du skapar applikationen. Du kan se den som public_html-katalogen i termer av webbutveckling. Observera att du inte bör installera en underkatalog för att undvika problem med pip-installationsprogrammet.

Application URL: Standard-URL:en för din applikation. Du kan till exempel ange je-domein.nl/applicatie eller lämna det tomt för endast je-domein.nl.

Application startup file: Detta är katalogen där din applikation hämtas av servern. Du kan lämna den tom när du startar för första gången.

Application entry point: Detta är platsen där du länkar till din wsgi.py-fil. Du kan också lämna detta tomt så att standardvärdet fylls i.

 

Kom igång med din nya Python-applikation.

När du har skapat Python-applikationen ser du följande skärm:

applikation skapad

Till skillnad från inom webbutveckling lägger du inte innehållet i ditt projekt i public_html-katalogen, utan i katalogen kennisbank-demo som vi just angav. 

Vad är virtualenv?

Hos my.host arbetar du med en virtualenv (virtuell miljö). En virtuell "root"-miljö på ditt eget webbhotellspaket. Detta gör att du kan hålla alla dina pip-paket och Python-versioner åtskilda om du vill köra flera applikationer. Kort sagt säkerställer det att programvaran och modulerna inte hamnar i konflikt med varandra, utan hålls ordentligt tillsammans med applikationen där de hör hemma.

Du kan aktivera Virtualenv genom att ange följande kommandon via SSH:

Observera att följande är ett exempel. Du hittar din egen källsökväg i appen och kan enkelt kopiera den för användning i din SSH-session.

Se bilden för var du hittar din källänk i appen:

Vi använder för närvarande:

source /home/jegebruikersnaam/virtualenv/kennisbankdemo/3.7/bin/activate && cd /home/jegebruikersnaam/kennisbankdemo 
Observera att detta kommando skiljer sig åt per installation; koden ovan är endast för illustration.

Vet du inte hur du loggar in via SSH? Då kan du använda följande kunskapsbasartikel: https://my.host/kb/verbinden-met-ssh/

Vad är Django och hur installerar du det?

För att hålla oss inom webbutvecklingsområdet fokuserar denna kunskapsbasartikel på att skapa en webbapplikation. Ett av de populära valen du kan göra är Django-biblioteket. Du kan installera Django i din applikation via SSH:

pip install --upgrade pip
pip install django "mysqlclient<2.0.2"


Efteråt kan du skapa Django-projektet med följande kommando, se till att du även inkluderar . i slutet:

 django-admin startproject begin .

Anpassa konfigurationsfilen efter behov

I din konfigurationsfil kan du ange exempelvis dina databasuppgifter. Du kan justera detta i filen settings.py, och filen blir aktiv först när du startar om Python-applikationen. Du kan starta om applikationen i adminpanelen för din Python-applikation:

starta om applikationen

När du har startat om Python-applikationen kan du lägga till din egen domän i ALLOWED_HOSTS så att django också känner igen den. Därefter lägger du till STATIC_ROOT, vilket talar om för django var de statiska filerna från din applikation ska lagras. Du behöver göra dessa ändringar i settings.py:

ALLOWED_HOSTS = ['jouw-domein.nl']
DEBUG = False
STATIC_ROOT = '/home/jegebruikersnaam/domains/jouw-domein.nl/public_html/static'

I samma fil anger du också var Django kan logga:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '/home/jouw-gebruikersnaam/project-naam/django.log',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
},
}

Observera att du först måste skapa filen django.log. Du kan göra detta på kommandoraden med följande kommando:

touch django.log

Därefter anger du vilken databas som används:

 DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_naam ',
'USER': 'database_gebruiker ',
'PASSWORD': 'database_wachtwoord',
'HOST': 'localhost',
'PORT': '3306',
}
}


Börja med den första testsidan

Nu när inställningarna har gåtts igenom är det dags att testa om applikationen fungerar. Vi gör detta med en hello-world-sida. Starta appen enligt följande:

python manage.py startapp start

Detta skapar katalogen 'start'. I denna katalog kan du ändra vyn för din testsida. Ersätt innehållet i start/views.py med följande kodavsnitt:

from django.http import HttpResponse

def index(request):
return HttpResponse("Hallo my.host kennisbank, de testpagina werkt!")

Med följande kodavsnitt kan du se till att 'start' kan laddas i huvudapplikationen (demo/urls.py):

from django.contrib import admin
from django.urls import path
from start.views import index

urlpatterns = [

path('', index),
path('admin/', admin.site.urls),
]

Som ett sista steg lägger du till ändringarna i listan över INSTALLED_APPS i settings.py; här lägger du in strängen* 'start'.

*En sträng är en datatyp som endast innehåller bokstäver.

De sista stegen för att gå live

Koden för testsidan är nu klar och du kan nästan gå live med din testapplikation. Det finns ytterligare några saker som är bra att utföra. En av dessa är virtualenv som nämndes tidigare i denna kunskapsbasartikel. Använd kommandot för att aktivera din virtualenv (se även rubriken vad är virtualenv?).

Därefter kan du använda filen manage.py för att förbereda din applikation för användning:

python manage.py collectstatic
python manage.py migrate
python manage.py createsuperuser

Precis som till exempel WordPress har Django också en administratörsdel: 

  • Collectstatic: Detta placerar CSS- och JavaScript-filerna i mappen public_html.
  • Migrate: Detta är den ursprungliga databasstrukturen som Django-admin behöver.
  • Createsuperuser: Detta är kontot med flest behörigheter, även känt som administratörskontot.

Aktivera applikationen

Nu är det äntligen dags att aktivera applikationen; du behöver bara tala om för python var den kan ladda applikationen. Gå till adminpanelen i python och ändra passenger_wsgi.py till demo.py. Spara ändringarna och klicka på restart för att tillämpa ändringarna.

Som du kan se visade vi vår testsida framgångsrikt:

testsida online

 

En fungerande administratörssektion:

administratörssida

Kända felkoder


403 Forbidden: Kontrollera om applikationen är aktiv och om rätt wsgi.py är konfigurerad.

404 Not found: Detta betyder att en eller flera filer inte kan hittas, vilket förhindrar att applikationen laddas. Kontrollera inställningarna du angav i Python-administratörssektionen igen. 

500 Internal Server Error: Titta i Django-loggen för mer information.

Can’t acquire lock for app:

Ingen styling: Det kan hända att Django-administratörssektionen inte ser ut som den ska. Kontrollera om den statiska mappen i mappen public_html är fylld med filer. Om så inte är fallet, kontrollera inställningen STATIC_ROOT och om STATIC_URL pekar på rätt statisk mapp och använd följande kommando:

python manage.py collectstatic


Har du fortfarande frågor? Kontakta oss.