Pirmą kartą įdiegti „Django“ į gamybos aplinką gali būti nelengva užduotis. Dažnai kūrėjai debesyje paleidžia „Linux“ egzempliorių savo gamybos aplinkai.
Šioje pamokoje parodysime, kaip paleisti „Django“ gamyboje, naudojant naują „Ubuntu“ egzempliorių.
Darysime prielaidą, kad visas redagavimas atliktas serveryje ir komandas vykdote kaip root.
Šiai pamokai mes naudojame „Ubuntu 18“.04.2 LTS
Projekto vartotojo sukūrimas
Mes sukursime naują vartotoją „django“, kad galėtume paleisti mūsų programą. Tai suteikia nedidelę saugumo naudą.
Norėdami sukurti naują vartotoją:
useradd -m djangoThe -m vėliava
sukuria naują namų katalogą: / namai / django.
„Python“ aplinkos nustatymas
Pirmiausia pirmiausia: atnaujinkite paketų sąrašus naudodami apt-get atnaujinimas
„Ubuntu 18“.04 laivai su „Python 3“.6, bet jis nepateikiamas kartu su „pip“, kurį turėsite įdiegti savo priklausomybėms.
apt-get install python3-pipDabar, kai turime „pip“, sukurkime virtualią aplinką. Virtuali aplinka padeda išvengti konfliktų su „Linux“ naudojamais „Python“ paketais.
pip3 įdiekite virtualenvcd / home / django
virtualenv env
Dabar sukūrėte virtualų „Python 3“.6 aplinka / home / django / env
aplankas, kurį galima suaktyvinti naudojant šią komandą: Dabar, kai turime pip, sukursime virtualią aplinką. Virtuali aplinka padeda išvengti konfliktų su „Linux“ naudojamais „Python“ paketais.
Django projekto rengimas
Šioje pamokoje sukursime laikiną „Django“ projektą. Jei diegiate savo kodą, turėsite jį įkelti į serverį. Dirbsime namų kataloge / home / django.Django projekto rengimas
Sukurkime „Django“ projektą:
cd / home / djangošaltinis env / bin / aktyvuoti
pip įdiegti django
„django-admin“ pradžios projekto pamoka
Patikrinkite, ar viskas veikia paleisdami:
kompaktinio disko pamokapitonas valdyti.py paleidimo serveris 0.0.0.0:80
Mūsų „Ubuntu“ egzempliorius veikia 178.128.229.34, todėl prisijungsime prie http: // 178.128.229.34.Patikrinkite, ar viskas veikia paleisdami:
Tikriausiai pamatysite kažką tokio:
Norėdami tai išspręsti, mes redaguosime / home / django / tutorial / tutorial / settings.py
. Rasti ALLOWED_HOSTS = []
ir nustatykite jį į:
"178.128.229.34 '# pakeiskite tai savo serverio IP adresu
arba domeno vardą, kurį naudojate prisijungdami
]
Dabar grįžkime į http: // 178.128.229.34:
Puiku! Mes prisijungėme!
„PostgreSQL“, duomenų bazės, nustatymas
Pagal numatytuosius nustatymus Django naudoja duomenų bazę SQLite3. Deja, „SQLite3“ neleidžia rašyti vienu metu. Jei jūsų svetainėje kada nors yra tik vienas vartotojas, redaguojantis duomenis, o kiti lankytojai tik skaito puslapius, tai gali būti tikslinga. Bet jei vienu metu duomenis redaguoja keli žmonės, tikriausiai norite naudoti kitą vidinę programą.
Dažniausiai galima pasirinkti „PostgreSQL“ ir „MySQL“. Šiai pamokai eisime su „PostgreSQL“.
Pradėkite diegdami „PostgreSQL“:
apt-get install postgresqlTada paleiskite duomenų bazės apvalkalą psql. Pagal numatytuosius nustatymus tik postgres vartotojas gali prisijungti prie duomenų bazės, todėl pirmiausia turėsime autentifikuoti kaip tas vartotojas:
su - postgrespsql
Tada mums reikia duomenų bazės ir vartotojo, kad galėtumėte pasiekti tą duomenų bazę:
sukurti duomenų bazės pamoką;sukurti vartotojo tutorial_user su užšifruotu slaptažodžiu 'tutorial_password';
suteikti visas privilegijas duomenų bazės mokymo programoje tutorial_user;
Dabar įveskite exit arba dukart paspauskite „Ctrl-D“: vieną kartą, jei norite išeiti iš psql, ir vieną kartą, norėdami išeiti iš postgresuser apvalkalo.
Puiku! Dabar mes turime sukūrę savo duomenų bazę ir vartotoją. Patikrinkime, ar galime prisijungti prie savo duomenų bazės.
Pabandysime atidaryti duomenų bazės apvalkalą, šį kartą prisijungdami prie duomenų bazės, kurią sukūrėme su savo sukurtu vartotoju:
psql -Ututorial_user -dtutorial -h127.0.0.1 -WParodoje įveskite mūsų sukurtą slaptažodį: tutorial_password.
Jei matote duomenų bazės apvalkalą, jums pavyko. Jei pamatysite klaidų, turėsite grįžti atgal ir išsiaiškinti, kas negerai.
„Django“ prijungimas prie duomenų bazės
Kad „Django“ būtų prijungtas prie duomenų bazės, pirmiausia turime įdiegti „Python PostgreSQL“ adapterį:
„pip install psycopg2-binary“Tada atsiverskime / home / django / tutorial / tutorial / settings.py
ir sukonfigūruoti ryšį.
Raskite savo dabartinį duomenų bazės ryšį; jei jo nekeisite, tai gali atrodyti maždaug taip:
DUOMENŲ BAZĖS ='numatytas':
„VARIKLIS“: „django.db.užpakalinės pusės.sqlite3 ',
„PAVADINIMAS“: os.kelias.prisijungti (BASE_DIR, 'db.sqlite3 '),
Norėdami prisijungti prie „PostgreSQL“, pakeisime jį taip:
DUOMENŲ BAZĖS ='numatytas':
„VARIKLIS“: „django.db.užpakalinės pusės.postgresql_psycopg2 ',
„NAME“: „pamoka“,
„USER“: „tutorial_user“,
„PASSWORD“: „tutorial_password“,
„HOST“: „127.0.0.1 ',
„Uostas“: „5432“,
Išbandykime ryšį:
cd / home / django / pamokapitonas valdyti.py paleidimo serveris 0.0.0.0:80
Vėl turėtumėte galėti apsilankyti savo svetainėje (mums šiuo adresu: http: // 178.128.229.34 /, bet pakeiskite tai savo IP ar pagrindinio kompiuterio vardu).
Jei viskas gerai, galime tęsti.
Nginx, žiniatinklio serverio, nustatymas
Kai bėgsi pitonas valdyti.py runerver
, naudojate „Django“ kūrimo serverį. Tai puikiai tinka vietos plėtrai, tačiau, kaip ir naudojant „SQLite3“, tai netinka gamybai.
Gamybinių žiniatinklio serverių pasirinkimas yra „nginx“ ir „Apache“. Šioje pamokoje naudosime „nginx“.
Įdiekite „nginx“ naudodami šiuos veiksmus:
apt-get install nginxDabar, jei viskas gerai veikė, „nginx“ turėtų veikti 80 prievade. Eik į priekį ir patikrink savo svetainę; turėtumėte pamatyti:
Puiku, todėl „nginx“ veikia ir veikia! Tada turėsime jį sukonfigūruoti, kad galėtume bendrauti su Django. Atidarykite „nginx“ konfigūracijos failą, esantį / etc / nginx / sites-available / default. Pakeiskime failą taip:
prieš srovę djangoserveris 127.0.0.1: 8000;
serveris
klausytis 80;
vieta /
try_files $ uri @send_to_django;
vieta @send_to_django
proxy_set_header Pagrindinis kompiuteris $ http_host;
proxy_redirect išjungtas;
proxy_pass http: // django;
Išbandykite konfigūracijos failą paleisdami „nginx -t“. Jei viskas gerai, galime perkrauti paleisdami „nginx -s reload“.
Dabar, apsilankę savo svetainėje, pamatysite:
Kai tik tai pamatysite, tai reiškia, kad „nginx“ negalėjo perduoti užklausos ankstesniame etape. Šiuo metu taip yra todėl, kad bandoma perduoti prašymą 127.0.0.1: 8000, bet tuo klausymu nėra jokio proceso klausymosi.
Paleiskite „Django“ kūrimo serverį ir bandykite dar kartą:
cd / home / django / pamokapitonas valdyti.127.0.0.1: 8000
ir dar kartą apsilankykite savo svetainėje. Turėtumėte pamatyti savo „Django“ programą.
Django montavimas ant Gunicorno
Atminkite, kad nenorime naudoti „Django“ kūrimo serverio gamyboje. Vietoj to, norėdami paleisti „Django“, naudosime tinklo serverio šliuzo sąsajos (WSGI) serverį. „Nginx“ perduos užklausą WSGI serveriui, kuriame veikia „Django“.
Dažniausiai WSGI serveryje galima pasirinkti „Gunicorn“ ir „uWSGI“. Šiai pamokai naudosime „Gunicorn“.
Įdiekime „Gunicorn“:
Įdiekite ginklaveiksnįTada mes galime pradėti ginklaveiksnį taip:
cd / home / django / pamokaginklo rago pamoka.wsgi
Dabar turėtumėte galėti apsilankyti savo svetainėje ir pamatyti, kaip tinkamai veikia jūsų programa.
„Gunicorn“ paleidimas kaip paslauga
Yra keletas problemų, susijusių su tokio ginkluotės paleidimu:
- Jei uždarysime SSH sesiją, ginkluotės procesas sustos.
- Jei serveris paleidžiamas iš naujo, pistoleto procesas neprasideda.
- Procesas veikia kaip šakninis. Jei įsilaužėliai randa išnaudojimą mūsų programos kode, jie galės vykdyti komandas kaip root. Mes to nenorime; bet todėl mes sukūrėme djangouser!
Norėdami išspręsti šias problemas, „Gunicorn“ vykdysime kaip sistemos paslaugą.
cd / home / djangomkdir bin
cd / home / django / bin
palieskite paleidimo serverį.sh
Pradiniame serveryje.sh:
cd / home / djangošaltinis env / bin / aktyvuoti
kompaktinio disko pamoka
ginklo rago pamoka.wsgi
Dabar galite išbandyti scenarijų:
cd / home / django / binbash paleidimo serveris.sh
# apsilankykite savo svetainėje, ji turėtų veikti
Dabar mes sukuriame „systemun“ paslaugą „Gunicorn“. Sukurkite / etc / systemd / system / gunicorn.serviceas taip:
[Vienetas]Aprašymas = Gunicorn
Po = tinklas.taikinys
[Paslauga]
Tipas = paprastas
Vartotojas = django
ExecStart = / home / django / bin / start-server.sh
Paleisti iš naujo = nepavykus
[Diegti]
WantedBy = daugeliui vartotojų.taikinys
Dabar įgalinkime paslaugą ir paleisk ją
systemctl įjungti šautuvąsystemctl pradėti šaunuolį
Šiuo metu turėtumėte matyti savo svetainę.
Ginklą galime išjungti taip:
systemctl sustabdyti šaunuolįIr jūs turėtumėte pamatyti 502 blogus vartus.
Galiausiai patikrinkime įkrovos ciklą:
systemctl pradėti šaunuolįperkrauti dabar
Kai jūsų mašina vėl prisijungs, turėtumėte pamatyti, kad jūsų svetainė veikia.
Statiniai failai
Jei apsilankysite „Django“ administratoriaus skydelyje savo svetainėje adresu / admin / (mums tai http: // 178.128.229.34 / admin /), pastebėsite, kad statiniai failai neįkeliami tinkamai.
Turėsime sukurti naują aplanką statiniams failams:
cd / home / djangomkdir statinis
Tada mes sakome „Django“, kur ji turėtų įdėti statinius failus redaguodama / home / django / tutorial / tutorial / settings.py ir pridėdamas:
STATIC_ROOT = '/ namai / django / statiniai /'Dabar galime surinkti statinius failus:
cd / home / djangošaltinis env / bin / aktyvuoti
kompaktinio disko pamoka
pitonas valdyti.py kolekcinis
Galiausiai turime pasakyti „nginx“, kad ji teiktų tuos statinius failus.
Atidarykime / etc / nginx / sites-available / default ir pridėkime šiuos duomenis tiesiai virš savo vietos / bloko:
vieta / statinis /šaknis / namai / django;
try_files $ uri = 404;
Visas failas dabar turėtų atrodyti taip:
prieš srovę djangoserveris 127.0.0.1: 8000;
serveris
klausytis 80;
vieta / statinis /
šaknis / namai / django;
try_files $ uri = 404;
vieta /
try_files $ uri @send_to_django;
vieta @send_to_django
proxy_set_header Pagrindinis kompiuteris $ http_host;
proxy_redirect išjungtas;
proxy_pass http: // django;
Mes galime iš naujo įkelti failą naudodami „nginx -s“ iš naujo
Ir voila! Jūsų statiniai failai dabar veiks visiškai.
Išvada
Šiuo metu jūsų „Django“ programa veikia tinkamai. Jei turite tam tikrų specialių reikalavimų, gali tekti nustatyti talpyklą, pvz., „Redis“, arba pranešimų eilę, pvz., „Rabbit MQ“. Taip pat galite nustatyti nuolatinį diegimą, nes diegimo procedūra gali užtrukti.
Kitas svarbus žingsnis yra atlikti atitinkamus veiksmus, kad apsaugotumėte savo „Ubuntu“ mašiną. Kitu atveju galite pastebėti, kad jūsų serveris elgiasi netinkamai!
Sėkmės!