Django

Opprette en Django-app på Ubuntu Server

Opprette en Django-app på Ubuntu Server
Django er en vanlig plattform for utvikling av nettsteder, webapplikasjoner og web-APIer. Det er mange fordeler med å bruke Django-rammeverket for prosjektet ditt som verktøyet ditt, og hvis du ikke er sikker på at det passer riktig, trenger du bare å se på de mange store merkevarene som bruker Django i bunken.

Å distribuere Django til et produksjonsmiljø for første gang kan være en skremmende oppgave. Ofte vil utviklere starte en Linux-forekomst på skyen for deres produksjonsmiljø.

I denne opplæringen viser vi deg hvordan du starter Django i produksjon ved hjelp av en fersk Ubuntu-forekomst.

Vi antar at all redigering er gjort på serveren, og at du kjører kommandoene som root.

For denne opplæringen bruker vi Ubuntu 18.04.2 LTS

Opprette en bruker for prosjektet

Vi oppretter en ny bruker, django, for å kjøre applikasjonen vår. Dette gir en liten sikkerhetsfordel.

Slik oppretter du den nye brukeren:

useradd -m django

De -m flagg oppretter en ny hjemmekatalog: / hjem / django.

Sette opp Python-miljøet

Første ting først: oppdater pakkelistene dine med apt-get oppdatering

Ubuntu 18.04 leveres med Python 3.6, men den leveres ikke med pip, som du må installere avhengighetene dine.

apt-get installer python3-pip

Nå som vi har pip, la oss lage et virtuelt miljø. Virtuelle miljøer hjelper til med å unngå konflikter med Python-pakker som brukes av Linux.

pip3 installer virtualenv
cd / home / django
virtualenv env

Nå har du opprettet en virtuell Python 3.6 miljø i / hjem / django / env mappe som kan aktiveres med følgende kommando: Nå som vi har pip, la oss lage et virtuelt miljø. Virtuelle miljøer hjelper til med å unngå konflikter med Python-pakker som brukes av Linux.

kilde / hjem / django / env / bin / aktivere

Sette opp Django-prosjektet

For denne opplæringen oppretter vi et midlertidig Django-prosjekt. Hvis du distribuerer din egen kode, må du laste den opp til serveren i stedet. Vi opererer i hjemmekatalogen / home / django.Sette opp Django-prosjektet

La oss lage Django-prosjektet:

cd / home / django
kilde env / bin / aktivere
pip installere django
django-admin startprosjektopplæring

Bekreft at ting fungerer ved å kjøre:

cd tutorial
python administrere.py runserver 0.0.0.0:80

Vår Ubuntu-forekomst kjører 178.128.229.34 så vi kobler til http: // 178.128.229.34.Bekreft at ting fungerer ved å kjøre:

Du vil sannsynligvis se noe sånt som dette:

For å fikse dette, redigerer vi / home / django / tutorial / tutorial / settings.py. Finne ALLOWED_HOSTS = [] og sett den til:

ALLOWED_HOSTS = [
178.128.229.34 '# erstatt dette med serverens IP-adresse
eller domenenavnet du bruker for å koble til
]

La oss nå gå tilbake til http: // 178.128.229.34:

Flott! Vi er online!

Sette opp PostgreSQL, databasen

Som standard bruker Django en SQLite3-database. Dessverre tillater ikke SQLite3 samtidige skrivinger. Hvis nettstedet ditt bare har én bruker som redigerer data, og resten av de besøkende bare leser sider, kan dette være aktuelt. Men hvis du har flere personer som redigerer data samtidig, vil du sannsynligvis bruke en annen backend.

Vanlige valg er PostgreSQL og Mysql. Vi går med PostgreSQL for denne opplæringen.

Start med å installere PostgreSQL:

apt-get install postgresql

Start deretter psql, et databaskall. Som standard er det bare postgres-brukeren som kan koble til databasen, så vi må først godkjenne som brukeren:

su - postgres
psql

Deretter trenger vi en database og en bruker for å få tilgang til den databasen:

lage databaseopplæring;
lage brukeropplæringsbruker med kryptert passord 'opplæringspassord';
gi alle rettigheter i opplæringen til databasen til tutorial_user;

Skriv nå exit eller trykk Ctrl-D to ganger: en gang for å avslutte psql, og en gang for å logge av skallet til postgresuseren.

Flott! Nå har vi satt opp vår database og bruker. La oss bekrefte at vi kan logge på databasen vår.

Vi prøver å åpne et databaskall, denne gangen logger vi oss på databasen vi opprettet med brukeren vi opprettet:

psql -Ututorial_user -veiledning -h127.0.0.1 -W

Skriv inn passordet vi opprettet ved ledeteksten: tutorial_password.

Hvis du ser et databaskall, har du lykkes. Hvis du ser noen feil, må du gå tilbake og finne ut hva som er galt.

Koble Django til databasen

For å få Django koblet til databasen, må vi først installere Python PostgreSQL-adapteren:

pip installer psycopg2-binær

La oss åpne oss / home / django / tutorial / tutorial / settings.pyog konfigurer tilkoblingen.

Finn din nåværende databaseforbindelse; hvis du ikke endret det, kan det se ut slik:

DATABASER =
'standard':
'MOTOR': 'django.db.backends.sqlite3 ',
'NAVN': os.sti.bli med (BASE_DIR, 'db.sqlite3 '),

For å koble til PostgreSQL erstatter vi den med følgende:

DATABASER =
'standard':
'MOTOR': 'django.db.backends.postgresql_psycopg2 ',
'NAME': 'tutorial',
'USER': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'VERT': '127.0.0.1',
'PORT': '5432',

La oss teste forbindelsen:

cd / home / django / tutorial
python administrere.py runserver 0.0.0.0:80

Du bør igjen kunne besøke nettstedet ditt (for oss på http: // 178.128.229.34 /, men erstatt det med IP eller vertsnavn).

Hvis alt er bra, kan vi fortsette.

Sette opp nginx, webserveren

Når du løper python administrere.py runserver, du bruker Djangos utviklingsserver. Dette er flott for lokal utvikling, men som med SQLite3, er det ikke veldig egnet for produksjon.

Vanlige valg for produksjonsservere er nginx og Apache. For denne opplæringen bruker vi nginx.

Installer nginx ved å bruke følgende:

apt-get install nginx

Nå, hvis alt har fungert bra, bør nginx kjøre på port 80. Gå videre og sjekk ut nettstedet ditt; du bør se:

Flott, så nginx er i gang! Deretter må vi konfigurere den til å kommunisere med Django. Åpne opp nginx-konfigurasjonsfilen, lokalisert på / etc / nginx / sites-available / default. La oss erstatte filen med følgende:

oppstrøms django
server 127.0.0.1: 8000;

server
hør 80;
plassering /
try_files $ uri @send_to_django;

location @send_to_django
proxy_set_header Vert $ http_host;
proxy_redirect av;
proxy_pass http: // django;

Test konfigurasjonsfilen ved å kjøre nginx -t. Hvis alt er ok, kan vi laste inn på nytt ved å kjøre nginx -s reload.

Nå, hvis du besøker nettstedet ditt, vil du se følgende:

Når du ser dette, betyr det at nginx ikke klarte å overføre forespørselen til oppstrømsprosessen. For øyeblikket er det fordi det prøver å overføre forespørselen til 127.0.0.1: 8000, men det er ingen prosesslytting på den adressen.

La oss starte Django-utviklingsserveren og prøve igjen:

cd / home / django / tutorial
python administrere.py runserver 127.0.0.1: 8000

og besøk igjen nettstedet ditt. Du bør se Django-applikasjonen din.

Montering av Django på Gunicorn

Husk at vi ikke vil bruke utviklingsserveren vår til Django i produksjonen. I stedet bruker vi en Web Server Gateway Interface (WSGI) -server til å kjøre Django. Nginx vil sende forespørselen til WSGI-serveren, som kjører Django.

Vanlige valg for en WSGI-server er Gunicorn og uWSGI. For denne opplæringen bruker vi Gunicorn.

La oss installere Gunicorn:

pip installere gunicorn

Deretter kan vi starte gunicorn som følger:

cd / home / django / tutorial
gunicorn tutorial.wsgi

Nå skal du kunne besøke nettstedet ditt og se at applikasjonen kjører ordentlig.

Kjører Gunicorn som en tjeneste

Det er noen problemer med å kjøre gunicorn som dette:

  1. Hvis vi lukker SSH-økten, stopper gunicorn-prosessen.
  2. Hvis serveren starter på nytt, starter ikke gunicorn-prosessen.
  3. Prosessen kjører som rot. Hvis hackere finner en utnyttelse i appens kode, vil de kunne kjøre kommandoer som root. Vi ønsker ikke dette; men det er derfor vi opprettet djangouseren!

For å løse disse problemene skal vi kjøre Gunicorn som en systemd-tjeneste.

cd / home / django
mkdir bin
cd / home / django / bin
berør startserver.sh

I startserver.sh:

cd / home / django
kilde env / bin / aktivere
cd tutorial
gunicorn tutorial.wsgi

Nå kan du teste skriptet:

cd / home / django / bin
bash start-server.sh
# besøk nettstedet ditt, det skal kjøre

Nå oppretter vi systemtjenesten for Gunicorn. Opprett / etc / systemd / system / gunicorn.serviceas følger:

[Enhet]
Beskrivelse = Gunicorn
Etter = nettverk.mål
[Service]
Type = enkel
Bruker = django
ExecStart = / home / django / bin / start-server.sh
Start på nytt = på feil
[Installere]
WantedBy = flerbruker.mål

La oss nå aktivere tjenesten og starte den

systemctl aktivere gunicorn
systemctl start gunicorn

Du bør kunne se nettstedet ditt for øyeblikket.

Vi kan slå av gunicorn som følger:

systemctl stopp gunicorn

Og du bør se en 502 Bad Gateway.

Til slutt, la oss sjekke oppstartssyklusen:

systemctl start gunicorn
starte på nytt nå

Når maskinen kommer tilbake på nettet, bør du se at nettstedet ditt er oppe.

Statiske filer

Hvis du besøker Django adminpanel på nettstedet ditt på / admin / (for oss er det http: // 178.128.229.34 / admin /), vil du merke at statiske filer ikke lastes inn ordentlig.

Vi må lage en ny mappe for statiske filer:

cd / home / django
mkdir statisk

Deretter forteller vi Django at det er der den skal plassere de statiske filene ved å redigere / home / django / tutorial / tutorial / settings.py, og legger til:

STATIC_ROOT = '/ hjem / django / statisk /'

Nå kan vi samle de statiske filene:

cd / home / django
kilde env / bin / aktivere
cd tutorial
python administrere.py collectstatic

Til slutt må vi fortelle nginx å betjene de statiske filene.

La oss åpne / etc / nginx / sites-available / default og legge til følgende rett over din plassering / blokk:

plassering / statisk /
rot / hjem / django;
try_files $ uri = 404;

Hele filen skal nå se slik ut:

oppstrøms django
server 127.0.0.1: 8000;

server
hør 80;
plassering / statisk /
rot / hjem / django;
try_files $ uri = 404;

plassering /
try_files $ uri @send_to_django;

location @send_to_django
proxy_set_header Vert $ http_host;
proxy_redirect av;
proxy_pass http: // django;

Vi kan laste filen på nytt ved å bruke nginx -s på nytt

Og voila! Dine statiske filer vil nå fungere fullt ut.

Konklusjon

På dette tidspunktet fungerer Django-appen din ordentlig. Hvis du har noen spesielle krav, må du kanskje sette opp en cache som Redis eller en meldingskø som Rabbit MQ. Det kan også være lurt å konfigurere kontinuerlig distribusjon ettersom distribusjonsprosedyren kan ta en stund.

Et annet viktig skritt er å ta passende skritt for å sikre Ubuntu-maskinen din. Ellers kan det hende at serveren din oppfører seg feil!

Lykke til!

Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...
Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...
Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...