Pirmo reizi Django izvietošana ražošanas vidē var būt biedējošs uzdevums. Bieži vien izstrādātāji mākonī palaiž Linux instanci savai ražošanas videi.
Šajā apmācībā mēs parādīsim, kā palaist Django ražošanā, izmantojot svaigu Ubuntu instanci.
Mēs pieņemsim, ka visas jūsu rediģēšanas darbības ir veiktas serverī un komandas jūs izmantojat kā root.
Šajā apmācībā mēs izmantojam Ubuntu 18.04.2 LTS
Lietotāja izveide projektam
Mēs izveidosim jaunu lietotāju django, lai palaistu mūsu lietojumprogrammu. Tas nodrošina nelielu drošības labumu.
Lai izveidotu jauno lietotāju:
useradd -m djangoThe -m karogu
izveido jaunu mājas direktoriju: / home / django.
Python vides iestatīšana
Pirmās lietas vispirms: atjauniniet pakotņu sarakstus ar apt-get atjauninājums
Ubuntu 18.04 kuģi ar Python 3.6, bet tas netiek piegādāts ar pip, kas jums būs nepieciešams, lai instalētu savas atkarības.
apt-get instalēt python3-pipTagad, kad mums ir pip, izveidosim virtuālu vidi. Virtuālās vides palīdz izvairīties no konfliktiem ar Python pakotnēm, kuras izmanto Linux.
pip3 instalēt virtualenvcd / home / django
virtualenv env
Tagad esat izveidojis virtuālo Python 3.6 vide / home / django / env
mape, kuru var aktivizēt ar šādu komandu: Tagad, kad mums ir pip, izveidosim virtuālo vidi. Virtuālās vides palīdz izvairīties no konfliktiem ar Python pakotnēm, kuras izmanto Linux.
Django projekta izveidošana
Šai apmācībai mēs izveidosim pagaidu Django projektu. Ja izvietojat pats savu kodu, tā vietā jums tas būs jāaugšupielādē serverī. Mēs darbosimies mājas direktorijā / home / django.Django projekta izveidošana
Izveidosim Django projektu:
cd / home / djangoavots env / bin / aktivizēt
pip instalēt django
django-admin startproject apmācība
Pārbaudiet, vai darbojas, palaižot:
kompaktdiska apmācībapython pārvaldīt.py runervers 0.0.0.0:80
Mūsu Ubuntu instance darbojas 178.128.229.34, tāpēc mēs izveidosim savienojumu ar vietni http: // 178.128.229.34.Pārbaudiet, vai darbojas, palaižot:
Jūs, visticamāk, redzēsiet kaut ko līdzīgu šim:
Lai to novērstu, mēs rediģēsim / home / django / tutorial / tutorial / settings.py
. Atrodiet ALLOWED_HOSTS = []
un iestatiet to uz:
"178.128.229.34 '# aizstājiet to ar sava servera IP adresi
vai domēna nosaukumu, kuru izmantojat, lai izveidotu savienojumu
]
Tagad atgriezīsimies pie http: // 178.128.229.34:
Lieliski! Mēs esam tiešsaistē!
PostgreSQL, datu bāzes iestatīšana
Pēc noklusējuma Django izmanto SQLite3 datu bāzi. Diemžēl SQLite3 neļauj vienlaikus rakstīt. Ja jūsu vietnē kādreiz ir tikai viens lietotājs, kurš rediģē datus, un pārējie apmeklētāji tikai lasa lapas, tas varētu būt piemērots. Bet, ja vienlaikus rediģē datus vairāki cilvēki, iespējams, vēlaties izmantot citu aizmuguri.
Biežas izvēles iespējas ir PostgreSQL un MySQL. Šajā apmācībā mēs izmantosim PostgreSQL.
Sāciet ar PostgreSQL instalēšanu:
apt-get install postgresqlPēc tam palaidiet psql, datu bāzes apvalku. Pēc noklusējuma tikai postgres lietotājs var izveidot savienojumu ar datu bāzi, tāpēc mums vispirms būs jāveic autentifikācija kā šim lietotājam:
su - postgrespsql
Pēc tam mums ir nepieciešama datu bāze un lietotājs, lai piekļūtu šai datu bāzei:
izveidot datu bāzes apmācību;izveidot lietotāja tutorial_user ar šifrētu paroli 'tutorial_password';
piešķirt visas privilēģijas datu bāzes apmācībā tutorial_user;
Tagad ierakstiet exit vai divreiz nospiediet Ctrl-D: vienu reizi, lai izietu no psql, un vienu reizi, lai atteiktos no postgresuser apvalka.
Lieliski! Tagad mums ir izveidota mūsu datu bāze un lietotājs. Pārbaudīsim, vai varam pieteikties mūsu datu bāzē.
Mēs mēģināsim atvērt datu bāzes apvalku, šoreiz piesakoties datu bāzē, kuru izveidojām kopā ar izveidoto lietotāju:
psql -Ututorial_user -dtutorial -h127.0.0.1 -WUzvednē ievadiet izveidoto paroli: apmācības_ parole.
Ja redzat datu bāzes čaumalu, esat guvis panākumus. Ja redzat kļūdas, jums būs jāatgriežas un jānoskaidro, kas ir nepareizs.
Django savienošana ar datu bāzi
Lai Django izveidotu savienojumu ar datu bāzi, mums vispirms jāinstalē Python PostgreSQL adapteris:
pip instalējiet psycopg2-bināroTad atvērsimies / home / django / tutorial / tutorial / settings.py
un konfigurējiet savienojumu.
Atrodiet savu pašreizējo datu bāzes savienojumu; ja jūs to nemainījāt, tas var izskatīties apmēram šādi:
DATU BĀZES ='noklusējums':
'Dzinējs': 'django.db.aizmugures.sqlite3 ',
'NAME': os.ceļš.pievienoties (BASE_DIR, 'db.sqlite3 '),
Lai izveidotu savienojumu ar PostgreSQL, mēs to aizstāsim ar šādu:
DATU BĀZES ='noklusējums':
'Dzinējs': 'django.db.aizmugures.postgresql_psycopg2 ',
'NAME': 'apmācība',
'USER': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'HOST': '127.0.0.1 ',
“PORT”: “5432”,
Pārbaudīsim savienojumu:
cd / home / django / apmācībapython pārvaldīt.py runervers 0.0.0.0:80
Jums atkal vajadzētu būt iespējai apmeklēt savu vietni (mums vietnē http: // 178.128.229.34 /, bet aizstājiet to ar savu IP vai resursdatora nosaukumu).
Ja viss ir kārtībā, mēs varam turpināt.
Nginx, tīmekļa servera, iestatīšana
Kad tu skrien python pārvaldīt.py runervers
, jūs izmantojat Django izstrādes serveri. Tas ir lieliski piemērots vietējai attīstībai, taču tāpat kā SQLite3 gadījumā tas nav īsti piemērots ražošanai.
Izplatītās tīmekļa serveru izvēles iespējas ir nginx un Apache. Šajā apmācībā mēs izmantosim nginx.
Instalējiet nginx, izmantojot sekojošo:
apt-get install nginxJa viss ir darbojies labi, nginx jādarbojas 80. portā. Iet uz priekšu un pārbaudiet savu vietni; jums vajadzētu redzēt:
Lieliski, tāpēc nginx darbojas un darbojas! Tālāk mums tas būs jākonfigurē, lai sazinātos ar Django. Atveriet nginx konfigurācijas failu, kas atrodas vietnē / etc / nginx / sites-available / default. Aizstāsim failu ar šādu:
augštece djangoserveris 127.0.0.1: 8000;
serveris
klausīties 80;
atrašanās vieta /
try_files $ uri @send_to_django;
atrašanās vieta @send_to_django
proxy_set_header resursdators $ http_host;
proxy_redirect off;
proxy_pass http: // django;
Pārbaudiet konfigurācijas failu, palaižot nginx -t. Ja viss ir kārtībā, mēs varam pārlādēt, palaižot nginx -s pārlādēšanu.
Tagad, apmeklējot savu vietni, redzēsiet:
Ikreiz, kad to redzat, tas nozīmē, ka nginx nevarēja nodot pieprasījumu augšpusē esošajam procesam. Pašlaik tas ir tāpēc, ka mēģina nodot pieprasījumu 127.0.0.1: 8000, bet šajā adresē nav procesu klausīšanās.
Sāksim Django izstrādes serveri un mēģiniet vēlreiz:
cd / home / django / apmācībapython pārvaldīt.123. palaist serveri.0.0.1: 8000
un vēlreiz apmeklējiet savu vietni. Jums vajadzētu redzēt savu Django lietojumprogrammu.
Django montāža uz Gunicorn
Atcerieties, ka mēs nevēlamies izmantot mūsu Django izstrādes serveri ražošanā. Tā vietā mēs izmantosim Web Server Gateway Interface (WSGI) serveri, lai palaistu Django. Nginx nosūtīs pieprasījumu WSGI serverim, kurā darbojas Django.
WSGI servera izplatītākās izvēles iespējas ir Gunicorn un uWSGI. Šajā apmācībā mēs izmantosim Gunicorn.
Instalēsim Gunicorn:
uzstādiet pistoliTālāk mēs varam sākt ieroci šādi:
cd / home / django / apmācībalielgabala apmācība.wsgi
Tagad jums vajadzētu būt iespējai apmeklēt savu vietni un redzēt, kā jūsu lietojumprogramma darbojas pareizi.
Gunicorn vadīšana kā pakalpojums
Šādi ieroči darbojas šādi:
- Ja mēs slēgsim SSH sesiju, ieroča process apstāsies.
- Ja serveris tiek restartēts, lielgabala process netiks sākts.
- Process darbojas kā root. Ja hakeri mūsu lietotnes kodā atrod izmantojumu, viņi varēs izpildīt komandas kā root. Mēs to nevēlamies; bet tāpēc mēs izveidojām djangouser!
Lai atrisinātu šīs problēmas, mēs vadīsim Gunicorn kā sistēmas pakalpojumu.
cd / home / djangomkdir bin
cd / home / django / bin
pieskarieties start-server.sh
Sākuma serverī.sh:
cd / home / djangoavots env / bin / aktivizēt
kompaktdiska apmācība
lielgabala apmācība.wsgi
Tagad jūs varat pārbaudīt skriptu:
cd / home / django / binbash start-serveris.sh
# apmeklējiet savu vietni, tai vajadzētu darboties
Tagad mēs izveidojam Gunicorn pakalpojumu systemd. Izveidojiet / etc / systemd / system / gunicorn.serviceas seko:
[Vienība]Apraksts = Gunicorn
Pēc = tīkls.mērķis
[Apkalpošana]
Tips = vienkāršs
Lietotājs = django
ExecStart = / home / django / bin / start-server.sh
Restartēt = neizdoties
[Uzstādīt]
WantedBy = daudzlietotāju.mērķis
Tagad iespējosim pakalpojumu un palaidīsim to
systemctl iespējot lielgabalusystemctl sākt lielgabals
Pašlaik jums vajadzētu redzēt savu vietni.
Mēs varam izslēgt pistoli šādi:
systemctl stop lielgabalsUn jums vajadzētu redzēt 502 Bad Gateway.
Visbeidzot, pārbaudīsim sāknēšanas ciklu:
systemctl sākt lielgabalsrestartēt tagad
Kad jūsu mašīna atkal būs tiešsaistē, jums vajadzētu redzēt, ka jūsu vietne ir atvērta.
Statiskie faili
Ja apmeklējat Django administratora paneli savā vietnē vietnē / admin / (mums tas ir http: // 178.128.229.34 / admin /), pamanīsit, ka statiskie faili netiek pareizi ielādēti.
Mums būs jāizveido jauna statisko failu mape:
cd / home / djangomkdir statisks
Tad mēs sakām Django, ka tai vajadzētu ievietot statiskos failus, rediģējot / home / django / tutorial / tutorial / settings.py un pievienojot:
STATIC_ROOT = '/ home / django / static /'Tagad mēs varam apkopot statiskos failus:
cd / home / djangoavots env / bin / aktivizēt
kompaktdiska apmācība
python pārvaldīt.py kolekcionārs
Visbeidzot, mums jāpasaka nginx apkalpot šos statiskos failus.
Atvērsim / etc / nginx / sites-available / default un tieši virs savas atrašanās vietas / bloka pievienosim:
location / static /sakne / mājas / django;
try_files $ uri = 404;
Tagad visam failam vajadzētu izskatīties šādi:
augštece djangoserveris 127.0.0.1: 8000;
serveris
klausīties 80;
location / static /
sakne / mājas / django;
try_files $ uri = 404;
atrašanās vieta /
try_files $ uri @send_to_django;
atrašanās vieta @send_to_django
proxy_set_header resursdators $ http_host;
proxy_redirect off;
proxy_pass http: // django;
Mēs varam pārlādēt failu, izmantojot nginx -s pārlādēšanu
Un voila! Jūsu statiskie faili tagad darbosies pilnībā.
Secinājums
Šajā brīdī jūsu Django lietotne darbojas pareizi. Ja jums ir dažas īpašas prasības, jums, iespējams, būs jāiestata kešatmiņa, piemēram, Redis, vai ziņojumu rinda, piemēram, Rabbit MQ. Varat arī iestatīt nepārtrauktu izvietošanu, jo izvietošanas procedūra var aizņemt kādu laiku.
Vēl viens svarīgs solis ir veikt atbilstošas darbības, lai aizsargātu jūsu Ubuntu mašīnu. Pretējā gadījumā jūs, iespējams, pamanīsit, ka jūsu serveris rīkojas nepareizi!
Veiksmi!