Postavljanje Djanga u proizvodno okruženje po prvi put može biti zastrašujući zadatak. Često će programeri lansirati instancu Linuxa u oblak za svoje proizvodno okruženje.
U ovom uputstvu pokazat ćemo vam kako pokrenuti Django u proizvodnji, koristeći novu instancu Ubuntua.
Pretpostavit ćemo da se sve vaše uređivanje vrši na poslužitelju i da naredbe izvršavate kao root.
Za ovaj vodič koristimo Ubuntu 18.04.2 LTS
Izrada korisnika za projekt
Stvorit ćemo novog korisnika, django, za pokretanje naše aplikacije. To pruža malu sigurnosnu korist.
Da biste stvorili novog korisnika:
useradd -m djangoThe -m zastava
stvara novi kućni direktorij: / home / django.
Postavljanje Python okruženja
Prvo najprije: ažurirajte svoje popise paketa pomoću apt-get ažuriranje
Ubuntu 18.04 isporučuje se s Pythonom 3.6, ali se ne isporučuje s pipom, koji ćete trebati za instalaciju ovisnosti.
apt-get instalirati python3-pipSad kad imamo pip, stvorimo virtualno okruženje. Virtualna okruženja pomažu u izbjegavanju sukoba s Python paketima koje koristi Linux.
pip3 instalirati virtualenvcd / home / django
virtualenv env
Sada ste stvorili virtualni Python 3.6 okoliš u / home / django / env
mapa koja se može aktivirati sljedećom naredbom: Sad kad imamo pip, stvorimo virtualno okruženje. Virtualna okruženja pomažu u izbjegavanju sukoba s Python paketima koje koristi Linux.
Postavljanje projekta Django
Za ovaj tutorial stvorit ćemo privremeni Django projekt. Ako postavljate vlastiti kôd, morat ćete ga umjesto toga prenijeti na poslužitelj. Radit ćemo u matičnom direktoriju, / home / django.Postavljanje projekta Django
Stvorimo projekt Django:
cd / home / djangoizvor env / bin / activate
pip instalirati django
Vodič za django-admin startproject
Provjerite rade li stvari pokretanjem:
CD tutorialpython upravljati.py runserver 0.0.0.0:80
Naša instanca Ubuntua radi na 178.128.229.34, pa ćemo se povezati na http: // 178.128.229.34.Provjerite rade li stvari pokretanjem:
Vjerojatno ćete vidjeti nešto poput ovoga:
Da bismo to popravili, uredit ćemo / home / django / tutorial / tutorial / settings.py
. Pronaći ALLOWED_HOSTS = []
i postavite ga na:
'178.128.229.34 '# zamijenite ovo IP adresom vašeg poslužitelja
ili naziv domene koji koristite za povezivanje
]
Sad se vratimo na http: // 178.128.229.34:
Sjajno! Na mreži smo!
Postavljanje baze podataka PostgreSQL
Django prema zadanim postavkama koristi SQLite3 bazu podataka. Nažalost, SQLite3 ne dopušta istodobna pisanja. Ako vaše web mjesto ikad ima samo jednog korisnika koji uređuje podatke, a ostatak posjetitelja samo čita stranice, onda bi to moglo biti prikladno. Ali ako imate više ljudi koji uređuju podatke istodobno, vjerojatno želite koristiti drugu pozadinu.
Uobičajeni izbor su PostgreSQL i Mysql. Ići ćemo uz PostgreSQL za ovaj vodič.
Započnite instaliranjem PostgreSQL:
apt-get instalirati postgresqlZatim pokrenite psql, ljusku baze podataka. Prema zadanim postavkama samo se postgres korisnik može povezati s bazom podataka, pa ćemo prvo morati provjeriti autentičnost kao taj korisnik:
su - postgrespsql
Dalje, za pristup toj bazi podataka trebaju nam baza podataka i korisnik:
stvoriti tutorial baze podataka;stvoriti korisnika tutorial_user s šifriranom lozinkom 'tutorial_password';
dodijeliti sve privilegije na tutorialu baze podataka tutorial_user;
Sada upišite exit ili pritisnite Ctrl-D dva puta: jednom za izlazak iz psql-a, a jednom za odjavu iz ljuske postgresusera.
Sjajno! Sada smo postavili bazu podataka i korisnika. Provjerimo možemo li se prijaviti u našu bazu podataka.
Pokušat ćemo otvoriti ljusku baze podataka, ovoga puta prijavljujući se u bazu podataka koju smo stvorili s korisnikom kojeg smo stvorili:
psql -Ututorial_user -dtutorial -h127.0.0.1 -WNa upit unesite lozinku koju smo stvorili: tutorial_password.
Ako vidite ljusku baze podataka, uspjeli ste. Ako primijetite pogreške, morat ćete se vratiti i shvatiti što nije u redu.
Povezivanje Djanga s bazom podataka
Da bismo Django povezali s bazom podataka, prvo moramo instalirati Python PostgreSQL adapter:
pip instalirati psycopg2-binarniOnda, otvorimo / home / django / tutorial / tutorial / settings.py
i konfigurirajte vezu.
Pronađite vašu trenutnu vezu s bazom podataka; ako ga niste izmijenili, mogao bi izgledati otprilike ovako:
BAZE BAZA ='zadano':
'MOTOR': 'django.db.backends.sqlite3 ',
'IME': os.staza.pridruži se (BASE_DIR, 'db.sqlite3 '),
Da bismo se povezali s PostgreSQL-om, zamijenit ćemo ga sljedećim:
BAZE BAZA ='zadano':
'MOTOR': 'django.db.backends.postgresql_psycopg2 ',
'NAME': 'vodič',
'USER': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'DOMAĆIN': '127.0.0.1 ',
'LUKA': '5432',
Isprobajmo vezu:
cd / home / django / tutorialpython upravljati.py runserver 0.0.0.0:80
Ponovno biste trebali moći posjetiti vaše web mjesto (za nas na http: // 178.128.229.34 /, ali zamijenite to svojim IP-om ili imenom hosta).
Ako je sve u redu, možemo nastaviti.
Postavljanje nginxa, web poslužitelja
Kad trčite python upravljati.py runserver
, koristite Djangov razvojni poslužitelj. Ovo je izvrsno za lokalni razvoj, ali kao i kod SQLite3, zapravo nije pogodno za proizvodnju.
Uobičajeni izbor za proizvodne web poslužitelje su nginx i Apache. Za ovaj ćemo vodič koristiti nginx.
Instalirajte nginx koristeći sljedeće:
apt-get instalirati nginxAko je sve dobro funkcioniralo, nginx bi trebao biti pokrenut na portu 80. Samo naprijed provjerite svoju web stranicu; trebali biste vidjeti:
Izvrsno, dakle, nginx je pokrenut i pokrenut! Dalje ćemo ga morati konfigurirati za komunikaciju s Djangom. Otvorite konfiguracijsku datoteku nginx koja se nalazi na / etc / nginx / sites-available / default. Zamijenimo datoteku sljedećim:
uzvodno djangoposlužitelj 127.0.0.1: 8000;
poslužitelj
slušati 80;
lokacija /
try_files $ uri @send_to_django;
lokacija @send_to_django
proxy_set_header Host $ http_host;
isključeno preusmjeravanje_proxyja;
proxy_pass http: // django;
Testirajte konfiguracijsku datoteku pokretanjem nginx -t. Ako je sve u redu, možemo se ponovno pokrenuti izvođenjem nginx -s reload.
Ako posjetite svoju stranicu, vidjet ćete sljedeće:
Kad god to vidite, znači da nginx nije uspio proslijediti zahtjev uzlaznom procesu. Trenutno je to zato što pokušava proslijediti zahtjev na 127.0.0.1: 8000, ali na toj adresi nema postupka preslušavanja.
Pokrenimo razvojni poslužitelj Django i pokušajte ponovo:
cd / home / django / tutorialpython upravljati.py runserver 127.0.0.1: 8000
i ponovno posjetite vaše web mjesto. Trebali biste vidjeti svoju aplikaciju Django.
Montiranje Djanga na Gunicorn
Zapamtite, ne želimo koristiti naš razvojni poslužitelj Django u proizvodnji. Umjesto toga, za pokretanje Djanga koristit ćemo poslužitelj sučelja web poslužitelja (WSGI). Nginx će proslijediti zahtjev WSGI poslužitelju koji ima Django.
Uobičajeni odabir za WSGI poslužitelj su Gunicorn i uWSGI. Za ovaj tutorial koristit ćemo Gunicorn.
Instalirajmo Gunicorn:
pip instalirati gunicornDalje, gunicorn možemo započeti na sljedeći način:
cd / home / django / tutorialtutorijal za gunicorn.wsgi
Sada biste trebali moći posjetiti svoje web mjesto i vidjeti kako vaša aplikacija pravilno radi.
Pokretanje Gunicorna kao usluge
Postoji nekoliko problema s ovakvim trčanjem oružja:
- Ako zatvorimo sesiju SSH, postupak s oružjem će se zaustaviti.
- Ako se poslužitelj ponovno pokrene, postupak gunicorn neće započeti.
- Proces se izvodi kao root. Ako hakeri pronađu exploit u kodu naše aplikacije, moći će pokretati naredbe kao root. Mi ovo ne želimo; ali zato smo stvorili djangouser!
Da bismo riješili ove probleme, pokrenut ćemo Gunicorn kao sistemsku uslugu.
cd / home / djangomkdir bin
cd / home / django / bin
dodirnite start-server.sh
U start-poslužitelju.sh:
cd / home / djangoizvor env / bin / activate
CD tutorial
tutorijal za gunicorn.wsgi
Sada možete testirati skriptu:
cd / home / django / binbash start-poslužitelj.sh
# posjetite svoju web stranicu, trebala bi biti aktivna
Sada kreiramo systemd uslugu za Gunicorn. Izradite / etc / systemd / system / gunicorn.usluga slijedi:
[Jedinica]Opis = Gunicorn
Nakon = mreža.cilj
[Servis]
Tip = jednostavno
Korisnik = django
ExecStart = / home / django / bin / start-server.sh
Restart = nakon neuspjeha
[Instalirati]
WantedBy = višekorisnički.cilj
Ajmo sada omogućiti uslugu i pokrenuti je
systemctl omogućiti gunicornsystemctl start gunicorn
Trenutačno biste trebali moći vidjeti svoju web stranicu.
Guicorn možemo isključiti na sljedeći način:
systemctl zaustaviti gunicornI trebali biste vidjeti 502 Bad Gateway.
Na kraju, provjerimo ciklus pokretanja:
systemctl start gunicornponovno pokreni sada
Kad se vaš uređaj vrati na mrežu, trebali biste vidjeti da je vaše web mjesto pokrenuto.
Statičke datoteke
Ako posjetite administratorsku ploču Django na svom web mjestu na / admin / (za nas je to http: // 178.128.229.34 / admin /), primijetit ćete da se statičke datoteke ne učitavaju pravilno.
Trebat ćemo stvoriti novu mapu za statičke datoteke:
cd / home / djangomkdir statičan
Zatim kažemo Djangu da bi tu trebao staviti statičke datoteke uređivanjem / home / django / tutorial / tutorial / settings.py i dodajući:
STATIC_ROOT = '/ home / django / static /'Sada možemo prikupiti statičke datoteke:
cd / home / djangoizvor env / bin / activate
CD tutorial
python upravljati.py collestatic
Na kraju, moramo reći nginxu da poslužuje te statičke datoteke.
Otvorimo / etc / nginx / sites-available / default i dodajte sljedeće izravno iznad vašeg mjesta / bloka:
location / static /root / home / django;
try_files $ uri = 404;
Čitava datoteka sada bi trebala izgledati ovako:
uzvodno djangoposlužitelj 127.0.0.1: 8000;
poslužitelj
slušati 80;
location / static /
root / home / django;
try_files $ uri = 404;
lokacija /
try_files $ uri @send_to_django;
lokacija @send_to_django
proxy_set_header Host $ http_host;
isključeno preusmjeravanje_proxyja;
proxy_pass http: // django;
Datoteku možemo ponovo učitati pomoću ponovnog učitavanja nginx -s
I voila! Vaše statične datoteke sada će raditi u potpunosti.
Zaključak
U ovom trenutku vaša aplikacija Django ispravno radi. Ako imate neke posebne zahtjeve, možda ćete trebati postaviti predmemoriju poput Redisa ili red poruka poput Rabbit MQ. Možda ćete htjeti postaviti kontinuiranu implementaciju jer postupak postavljanja može potrajati.
Sljedeći važan korak je poduzeti odgovarajuće korake kako biste osigurali svoj Ubuntu stroj. Inače, vaš će se poslužitelj možda loše ponašati!
Sretno!