Django

Ustvarjanje aplikacije Django na strežniku Ubuntu

Ustvarjanje aplikacije Django na strežniku Ubuntu
Django je skupna platforma za razvoj spletnih strani, spletnih aplikacij in spletnih API-jev. Uporaba ogrodja Django za vaš projekt ima veliko prednosti kot orodje, in če niste prepričani, da je primeren, se morate samo ozreti na številne velike blagovne znamke, ki uporabljajo Django v svojem kupu.

Prva namestitev Djanga v produkcijsko okolje je lahko zastrašujoča naloga. Razvijalci pogosto zaženejo primerek Linuxa v oblaku za svoje produkcijsko okolje.

V tej vadnici vam bomo pokazali, kako zagnati Django v produkciji s svežim primerkom Ubuntuja.

Predvidevali bomo, da je vse urejanje izvedeno na strežniku in da ukaze izvajate kot root.

Za to vadnico uporabljamo Ubuntu 18.04.2 LTS

Ustvarjanje uporabnika za projekt

Ustvarili bomo novega uporabnika django za zagon naše aplikacije. To zagotavlja rahlo varnostno korist.

Če želite ustvariti novega uporabnika:

useradd -m django

The -m zastava ustvari nov domači imenik: / home / django.

Nastavitev okolja Python

Najprej najprej: posodobite sezname paketov z apt-get posodobitev

Ubuntu 18.04 ladje s Pythonom 3.6, vendar ni priložen s pipom, ki ga boste morali namestiti v odvisnosti.

apt-get namestite python3-pip

Zdaj, ko imamo pip, ustvarimo navidezno okolje. Navidezna okolja pomagajo preprečiti konflikte s paketi Python, ki jih uporablja Linux.

pip3 namestite virtualenv
cd / home / django
virtualenv env

Zdaj ste ustvarili virtualni Python 3.6 okolje v / home / django / env mapo, ki jo lahko aktiviramo z naslednjim ukazom: Zdaj, ko imamo pip, ustvarimo navidezno okolje. Navidezna okolja pomagajo preprečiti konflikte s paketi Python, ki jih uporablja Linux.

source / home / django / env / bin / activate

Nastavitev projekta Django

Za to vadnico bomo ustvarili začasni projekt Django. Če uvajate svojo kodo, jo boste morali namesto tega naložiti na strežnik. Delovali bomo v domačem imeniku, / home / django.Nastavitev projekta Django

Ustvarimo projekt Django:

cd / home / django
izvor env / bin / activate
pip namestite django
django-admin startproject tutorial

Preverite, ali stvari delujejo, tako da zaženete:

CD vadnica
python upravljanje.py runserver 0.0.0.0:80

Naš primerek Ubuntu deluje na 178.128.229.34, zato se bomo povezali na http: // 178.128.229.34.Preverite, ali stvari delujejo, tako da zaženete:

Verjetno boste videli nekaj takega:

Da bi to popravili, bomo uredili / home / django / tutorial / tutorial / settings.py. Najti ALLOWED_HOSTS = [] in nastavite na:

ALLOWED_HOSTS = [
'178.128.229.34 '# zamenjajte z IP naslovom vašega strežnika
ali ime domene, ki jo uporabljate za povezavo
]

Zdaj pa se vrnimo na http: // 178.128.229.34:

Super! Povezani smo!

Nastavitev PostgreSQL, baze podatkov

Django privzeto uporablja bazo podatkov SQLite3. Na žalost SQLite3 ne dovoljuje hkratnih zapisov. Če ima vaše spletno mesto kdaj le en uporabnik, ki ureja podatke, ostali obiskovalci pa samo berejo strani, potem je to morda primerno. Če pa hkrati ureja podatke več ljudi, boste verjetno želeli uporabiti drug backend.

Pogosti izbiri sta PostgreSQL in Mysql. Za to vadnico bomo uporabili PostgreSQL.

Začnite z namestitvijo PostgreSQL:

apt-get namestite postgresql

Nato zaženite psql, lupino baze podatkov. Privzeto se lahko samo uporabnik postgres poveže z bazo podatkov, zato se moramo najprej overiti kot ta uporabnik:

su - postgres
psql

Nato za dostop do te baze potrebujemo bazo podatkov in uporabnika:

ustvariti vadnico baze podatkov;
ustvari uporabnika tutorial_user s šifriranim geslom 'tutorial_password';
dodeliti vse privilegije v vadnici baze podatkov tutorial_user;

Zdaj vnesite exit ali dvakrat pritisnite Ctrl-D: enkrat za izhod iz psql in enkrat za odjavo iz lupine postgresuserja.

Super! Zdaj imamo svojo bazo podatkov in uporabnika. Preverimo, ali se lahko prijavimo v našo bazo podatkov.

Poskusili bomo odpreti lupino baze podatkov, tokrat se prijavimo v bazo podatkov, ki smo jo ustvarili z uporabnikom, ki smo ga ustvarili:

psql -Ututorial_user -dtutorial -h127.0.0.1 -W

V pozivu vnesite geslo, ki smo ga ustvarili: tutorial_password.

Če vidite lupino baze podatkov, ste bili uspešni. Če opazite napake, se boste morali vrniti nazaj in ugotoviti, kaj je narobe.

Povezovanje Djanga z bazo podatkov

Če želimo Django povezati z bazo podatkov, moramo najprej namestiti adapter Python PostgreSQL:

pip namestite psycopg2-binarno

Potem pa se odprimo / home / django / tutorial / tutorial / settings.pyin konfigurirajte povezavo.

Poiščite svojo trenutno povezavo z bazo podatkov; če ga niste spremenili, je lahko videti nekako takole:

BAZE PODATKOV =
'privzeto':
'ENGINE': 'django.db.zapornice.sqlite3 ',
'IME': os.pot.pridruži se (BASE_DIR, 'db.sqlite3 '),

Če se želite povezati s PostgreSQL, ga bomo zamenjali z naslednjim:

BAZE PODATKOV =
'privzeto':
'ENGINE': 'django.db.zapornice.postgresql_psycopg2 ',
'NAME': 'vadnica',
'USER': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'HOST': '127.0.0.1 ',
'PORT': '5432',

Preizkusimo povezavo:

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

Znova bi morali imeti možnost obiskati vaše spletno mesto (za nas na http: // 178.128.229.34 /, vendar to nadomestite z vašim IP-jem ali imenom gostitelja).

Če je vse v redu, lahko nadaljujemo.

Nastavitev spletnega strežnika nginx

Ko tečeš python upravljanje.py runserver, uporabljate Djangov razvojni strežnik. To je super za lokalni razvoj, vendar kot pri SQLite3 tudi v resnici ni primeren za proizvodnjo.

Pogosti izbiri za produkcijske spletne strežnike sta nginx in Apache. Za to vadnico bomo uporabili nginx.

Namestite nginx tako:

apt-get namestite nginx

Zdaj, če je vse delovalo dobro, bi moral nginx teči na vratih 80. Pojdite naprej in si oglejte spletno stran; bi morali videti:

Super, torej nginx deluje in deluje! Nato ga bomo morali konfigurirati za komunikacijo z Django. Odprite konfiguracijsko datoteko nginx, ki se nahaja na / etc / nginx / sites-available / default. Nadomestimo datoteko z naslednjim:

gorvodno django
strežnik 127.0.0.1: 8000;

strežnik
poslušaj 80;
lokacija /
try_files $ uri @send_to_django;

lokacija @send_to_django
gostitelj proxy_set_header $ http_host;
proxy_redirect off;
proxy_pass http: // django;

Preizkusite konfiguracijsko datoteko tako, da zaženete nginx -t. Če je vse v redu, ga lahko ponovno naložimo tako, da zaženemo nginx -s reload.

Zdaj, če obiščete svoje spletno mesto, boste videli naslednje:

Kadar koli to vidite, to pomeni, da nginx ni mogel posredovati zahteve postopku navzgor. Trenutno je to zato, ker poskuša prošnjo posredovati na 127.0.0.1: 8000, vendar na tem naslovu ni postopka za poslušanje.

Zaženimo razvojni strežnik Django in poskusimo znova:

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

in znova obiščite vaše spletno mesto. Videti bi morali svojo aplikacijo Django.

Namestitev Djanga na Gunicorn

Ne pozabite, da našega razvojnega strežnika Django ne želimo uporabljati v proizvodnji. Namesto tega bomo za zagon Django uporabili strežnik vmesnika spletnega strežnika (WSGI). Nginx bo zahtevo posredoval strežniku WSGI, ki izvaja Django.

Pogosti izbiri za strežnik WSGI sta Gunicorn in uWSGI. Za to vadnico bomo uporabili Gunicorn.

Namestimo Gunicorn:

pip namestite gunicorn

Nato lahko začnemo s gunicorn, kot sledi:

cd / home / django / tutorial
vadnica za gunicorn.wsgi

Zdaj bi lahko obiskali vaše spletno mesto in videli, kako se vaša aplikacija pravilno izvaja.

Tek Gunicorn kot storitev

Obstaja nekaj težav s takim tekom pištole:

  1. Če zaključimo sejo SSH, se bo postopek s pištolami ustavil.
  2. Če se strežnik znova zažene, se postopek Guicorn ne začne.
  3. Postopek se izvaja kot root. Če hekerji najdejo podvig v kodi naše aplikacije, bodo lahko ukaze izvajali kot root. Tega si ne želimo; ampak zato smo ustvarili djangouser!

Za rešitev teh težav bomo Gunicorn zagnali kot sistemsko storitev.

cd / home / django
mkdir bin
cd / home / django / bin
dotaknite se start-server.sh

V zagonskem strežniku.sh:

cd / home / django
izvor env / bin / activate
CD vadnica
vadnica za gunicorn.wsgi

Zdaj lahko preizkusite skript:

cd / home / django / bin
bash start-server.sh
# obiščite svoje spletno mesto, moralo bi se izvajati

Zdaj ustvarimo sistemsko storitev za Gunicorn. Ustvari / etc / systemd / system / gunicorn.storitev, kot sledi:

[Enota]
Opis = Gunicorn
Po = omrežje.cilj
[Storitev]
Tip = preprosto
Uporabnik = django
ExecStart = / home / django / bin / start-server.sh
Ponovni zagon = ob okvari
[Namesti]
WantedBy = več uporabnikov.cilj

Zdaj omogočimo storitev in jo zaženimo

systemctl omogoči pištolo
systemctl start gunicorn

Trenutno bi morali videti svoje spletno mesto.

Guicorn lahko izklopimo na naslednji način:

sistemctl stop gunicorn

In videli bi 502 Bad Gateway.

Na koncu še preverimo zagonski cikel:

systemctl start gunicorn
ponovno zaženi

Ko se naprava spet poveže, boste videli, da je vaše spletno mesto odprto.

Statične datoteke

Če obiščete skrbniško ploščo Django na svojem spletnem mestu / admin / (za nas je to http: // 178.128.229.34 / admin /), boste opazili, da se statične datoteke ne nalagajo pravilno.

Ustvariti bomo morali novo mapo za statične datoteke:

cd / home / django
mkdir statičen

Nato povemo Djangu, da naj tam postavi statične datoteke z urejanjem / home / django / tutorial / tutorial / settings.py in dodamo:

STATIC_ROOT = '/ home / django / static /'

Zdaj lahko zberemo statične datoteke:

cd / home / django
izvor env / bin / activate
CD vadnica
python upravljanje.py collectstatic

Na koncu moramo povedati nginxu, naj streže te statične datoteke.

Odprimo / etc / nginx / sites-available / default in dodajte neposredno nad svojo lokacijo / blok:

lokacija / statična /
root / home / django;
try_files $ uri = 404;

Celotna datoteka bi zdaj morala izgledati tako:

gorvodni django
strežnik 127.0.0.1: 8000;

strežnik
poslušaj 80;
lokacija / statična /
root / home / django;
try_files $ uri = 404;

lokacija /
try_files $ uri @send_to_django;

lokacija @send_to_django
proxy_set_header Gostitelj $ http_host;
proxy_redirect off;
proxy_pass http: // django;

Datoteko lahko znova naložimo s pomočjo nginx -s reload

In voila! Vaše statične datoteke bodo zdaj delovale v celoti.

Zaključek

Trenutno vaša aplikacija Django deluje pravilno. Če imate posebne zahteve, boste morda morali nastaviti predpomnilnik, kot je Redis, ali čakalno vrsto sporočil, kot je Rabbit MQ. Morda boste želeli nastaviti tudi neprekinjeno uvajanje, saj lahko postopek uvajanja traja nekaj časa.

Drug pomemben korak je sprejeti ustrezne ukrepe za zaščito vašega računalnika Ubuntu. V nasprotnem primeru boste morda ugotovili, da se strežnik ne obnaša pravilno!

Vso srečo!

Kako razviti igro na Linuxu
Pred desetletjem le malo uporabnikov Linuxa napoveduje, da bo njihov najljubši operacijski sistem nekoč priljubljena igralna platforma za komercialne ...
Odprtokodna vrata komercialnih igralnih sistemov
Brezplačne, odprtokodne in medplatformacijske igre, ki jih lahko uporabite za igranje starih, pa tudi nekaterih dokaj nedavnih naslovov iger. V tem čl...
Najboljše igre ukazne vrstice za Linux
Ukazna vrstica ni le vaš največji zaveznik pri uporabi Linuxa - lahko je tudi vir zabave, saj jo lahko uporabljate za igranje številnih zabavnih iger,...