Kør en Python-applikation på din hostingpakke

Med hvert pakke hos my.host har du mulighed for at køre en Python-applikation. Før du kan udrulle en applikation, skal du gennemgå nogle få trin. Vi forklarer, hvilke trin det er, i denne vidensbaseartikel.

Hvad er vigtigt at vide?

  • Udfør kun disse trin, hvis der ikke kører vigtige websites på dit hosting. Ved at følge denne vidensbaseartikel vil du straks udrulle en Python-applikation til produktion, hvilket betyder, at der er risiko for, at du kan beskadige det nuværende website.
  • Det anbefales først at oprette et staging- eller dev-miljø og ikke gå direkte i produktion.
  • Vent med at indtaste følsomme data i testapplikationen, indtil du ved, hvordan sikkerheden i Django fungerer.

 

Oprettelse af applikationen

Gå til DirectAdmin. Du kan læse, hvordan du kommer dertil, i denne artikel: https://my.host/kb/hoe-log-ik-in-op-directadmin/

Når du er logget ind i DirectAdmin, skal du finde Extra Features i menuen til venstre og derefter Setup Python App.

opret applikation via DirectAdmin


Klik derefter på Create Application for at oprette din applikation.

opret applikation

 

Du kommer nu til følgende skærmbillede:

applikationsindstillinger

Her er nogle vigtige felter, du skal udfylde:

Python version: Den version af Python, du arbejder med. Det anbefales at bruge version 3.9 eller 3.10.

Application root: Dette er mappen, hvor du opretter applikationen. Du kan se den som public_html-mappen i webudviklingssammenhæng. Bemærk, at du ikke bør installere en undermappe for at undgå problemer med pip-installationsprogrammet.

Application URL: Standard-URL'en for din applikation. Du kan for eksempel indtaste je-domein.nl/applicatie eller lade den være tom for kun je-domein.nl.

Application startup file: Dette er mappen, hvorfra serveren henter din applikation. Du kan lade den være tom ved første opstart.

Application entry point: Dette er stedet, hvor du linker til din wsgi.py-fil. Du kan også lade dette stå tomt, så standardværdien udfyldes.

 

Kom godt i gang med din nye Python-applikation.

Når du har oprettet Python-applikationen, ser du følgende skærmbillede:

applikation oprettet

I modsætning til webudvikling placeres indholdet af dit projekt ikke i public_html-mappen, men i kennisbank-demo-mappen, som vi netop angav. 

Hvad er virtualenv?

Hos my.host arbejder du med et virtualenv (virtuelt miljø). Et virtuelt "root"-miljø på din egen hostingpakke. Det gør det muligt at holde alle dine pip-pakker og Python-versioner adskilt, hvis du vil køre flere applikationer. Kort sagt sikrer det, at softwaren og modulerne ikke er i konflikt med hinanden, men forbliver sammen med den applikation, de hører til.

Du kan aktivere Virtualenv ved at indtaste følgende kommandoer via SSH:

Bemærk, at følgende er et eksempel. Du kan finde din egen source-sti i appen, og du kan blot kopiere den til brug i din SSH-session.

Se billedet for, hvor du kan finde dit source-link i din app:

Vi bruger i øjeblikket:

source /home/jegebruikersnaam/virtualenv/kennisbankdemo/3.7/bin/activate && cd /home/jegebruikersnaam/kennisbankdemo 
Bemærk, at denne kommando varierer pr. installation; koden ovenfor er kun til illustration.

Ved du ikke, hvordan du logger ind via SSH? Så kan du bruge følgende vidensbaseartikel: https://my.host/kb/verbinden-met-ssh/

Hvad er Django, og hvordan installerer du det?

For at blive lidt inden for webudvikling handler denne vidensbaseartikel om at oprette en webapplikation. Et af de populære valg, du kan træffe, er Django-biblioteket. Du kan installere Django på din applikation via SSH:

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


Bagefter kan du oprette Django-projektet med følgende kommando. Sørg for også at inkludere . til sidst:

 django-admin startproject begin .

Tilpasning af konfigurationsfilen efter behov

I din konfigurationsfil kan du angive ting som dine databaseoplysninger. Du kan tilpasse dette i filen settings.py. Denne fil bliver først aktiv, når du genstarter Python-applikationen. Du kan genstarte applikationen i adminpanelet for din Python-applikation:

genstart applikation

Når du har genstartet Python-applikationen, kan du tilføje dit eget domæne til ALLOWED_HOSTS, så django også genkender det. Derefter tilføjer du STATIC_ROOT. På den måde fortæller du django, hvor de statiske filer fra din applikation skal gemmes. Du skal foretage disse ændringer i settings.py:

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

I samme fil angiver du også, hvor Django kan logge til:

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,
},
},
}

Bemærk, at du først skal oprette django.log-filen. Det kan du gøre på kommandolinjen med følgende kommando:

touch django.log

Derefter angiver du, hvilken database der bruges:

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


Kom godt i gang med den første testside

Nu hvor indstillingerne er gennemgået, er det tid til at teste, om applikationen virker. Det gør vi ved hjælp af en hello-world-side. Start appen som følger:

python manage.py startapp start

Dette opretter mappen 'start'. I denne mappe kan du ændre visningen for din testside. Erstat indholdet i start/views.py med følgende kodestykke:

from django.http import HttpResponse

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

Med følgende kodestykke kan du sikre, at 'start' kan indlæses i hovedapplikationen (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 sidste trin skal du tilføje ændringerne til listen over INSTALLED_APPS i settings.py; her indsætter du strengen* 'start'.

*En streng er en datatype, der kun indeholder bogstaver.

De sidste trin før du går live

Koden til testsiden er nu færdig, og du kan næsten gå live med din testapplikation. Der er et par ting mere, som er gode at udføre. En af dem er virtualenv, som blev gennemgået tidligere i denne vidensbaseartikel. Brug kommandoen til at aktivere din virtualenv (se også overskriften hvad er virtualenv?).

Derefter kan du bruge filen manage.py til at forberede din applikation til brug:

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

Ligesom for eksempel WordPress har Django også en adminsektion: 

  • Collectstatic: Dette placerer CSS- og JavaScript-filerne i mappen public_html.
  • Migrate: Dette er den indledende databasestruktur, som Django-admin har brug for.
  • Createsuperuser: Dette er kontoen med flest rettigheder, også kendt som administratorkontoen.

Aktivering af applikationen

Derefter er det endelig tid til at aktivere applikationen; du skal blot fortælle python, hvor den kan indlæse applikationen. Gå til adminpanelet i python, og ændr passenger_wsgi.py til demo.py. Gem ændringerne, og klik på genstart for at anvende ændringerne.

Som du kan se, har vi vist vores testside:

testside online

 

En fungerende adminsektion:

adminside

Kendte fejlkoder


403 Forbidden: Kontrollér, om applikationen er aktiv, og om den korrekte wsgi.py er konfigureret.

404 Not found: Dette betyder, at en fil eller flere filer ikke kan findes, hvilket forhindrer applikationen i at indlæse. Kontrollér igen indstillingerne, du indtastede i Python-adminsektionen. 

500 Internal Server Error: Se Django-loggen for yderligere oplysninger.

Can’t acquire lock for app:

Ingen styling: Det kan ske, at Django-adminsektionen ikke ser ud, som den skal. Kontrollér, om den statiske mappe i public_html-mappen er fyldt med filer. Hvis dette ikke er tilfældet, skal du kontrollere STATIC_ROOT-indstillingen, og om STATIC_URL peger på den korrekte statiske mappe, og bruge følgende kommando:

python manage.py collectstatic


Har du stadig spørgsmål? Kontakt os.