A Django első telepítése termelési környezetbe ijesztő feladat lehet. Gyakran a fejlesztők elindítanak egy Linux-példányt a felhőben a termelési környezetükhöz.
Ebben az oktatóanyagban megmutatjuk, hogyan lehet elindítani a Django-t a termelésben egy friss Ubuntu-példány használatával.
Feltételezzük, hogy az összes szerkesztés a szerveren történik, és hogy a parancsokat rootként futtatja.
Ehhez az oktatóanyaghoz az Ubuntu 18-at használjuk.04.2 LTS
Felhasználó létrehozása a projekthez
Létrehozunk egy új felhasználót, a django alkalmazást. Ez enyhe biztonsági előnyt jelent.
Az új felhasználó létrehozása:
useradd -m djangoA -m zászló
létrehoz egy új otthoni könyvtárat: / home / django.
A Python környezet beállítása
Először is: frissítse a csomaglistákat a következővel: apt-get frissítés
Ubuntu 18.04 hajó Python 3-mal.6, de nem szállít pip-el, amelyre szükséged lesz a függőségek telepítéséhez.
apt-get install python3-pipMost, hogy megvan a pip, hozzunk létre egy virtuális környezetet. A virtuális környezetek segítenek elkerülni a konfliktusokat a Linux által használt Python csomagokkal.
pip3 telepítse a virtualenv-tcd / home / django
virtualenv env
Most létrehozott egy virtuális Python 3-at.6 környezet a / home / django / env
mappa, amelyet a következő paranccsal lehet aktiválni: Most, hogy megvan a pip, hozzunk létre egy virtuális környezetet. A virtuális környezetek segítenek elkerülni a konfliktusokat a Linux által használt Python csomagokkal.
A Django projekt felállítása
Ehhez az oktatóanyaghoz létrehozunk egy ideiglenes Django projektet. Ha saját kódot telepít, akkor azt inkább a szerverre kell feltöltenie. A saját könyvtárban fogunk működni, / home / django.A Django projekt felállítása
Hozzuk létre a Django projektet:
cd / home / djangoforrás env / bin / activ
pip install django
django-admin startproject oktatóanyag
Futtatással ellenőrizze, hogy működnek-e a dolgok:
cd bemutatópython kezelése.py runerver 0.0.0.0:80
Ubuntu példányunk 178-on fut.128.229.34, így csatlakozunk a http: // 178-hoz.128.229.34.Futtatással ellenőrizze, hogy működnek-e a dolgok:
Valószínűleg valami ilyesmit fog látni:
Ennek kijavításához szerkesztjük / home / django / tutorial / tutorial / settings.py
. megtalálja ALLOWED_HOSTS = []
és állítsa be:
„178.128.229.34 '# cserélje ki a szerver IP-címére
vagy a csatlakozáshoz használt domainnév
]
Most térjünk vissza a http: // 178 oldalra.128.229.34:
Nagy! Online vagyunk!
A PostgreSQL, az adatbázis beállítása
Alapértelmezés szerint a Django SQLite3 adatbázist használ. Sajnos az SQLite3 nem engedélyezi az egyidejű írást. Ha webhelyén csak egy felhasználó szerkeszti az adatokat, és a többi látogató csak oldalakat olvas, akkor ez megfelelő lehet. De ha egyszerre több ember is szerkeszti az adatokat, akkor valószínűleg más háttérprogramot szeretne használni.
Gyakori választás a PostgreSQL és a Mysql. A PostgreSQL-lel megyünk ehhez az oktatóanyaghoz.
Kezdje a PostgreSQL telepítésével:
apt-get install postgresqlEzután indítsa el a psql nevű adatbázishéjat. Alapértelmezés szerint csak a postgres felhasználó tud csatlakozni az adatbázishoz, így először hitelesítenünk kell ezt a felhasználót:
su - postgrespsql
Ezután szükségünk van egy adatbázisra és egy felhasználóra az adatbázis eléréséhez:
adatbázis-oktatóanyag készítése;hozzon létre felhasználói tutorial_user titkosított jelszóval 'tutorial_password';
adjon meg minden jogosultságot az adatbázis bemutatójában a tutorial_user részére;
Írja be az exit parancsot, vagy nyomja meg kétszer a Ctrl-D billentyűt: egyszer kilép a psql-ből, egyszer pedig kijelentkezik a postgresuser parancsértelmezőjéből.
Nagy! Most beállítottuk az adatbázisunkat és a felhasználóinkat. Ellenőrizzük, hogy bejelentkezhetünk-e az adatbázisunkba.
Megpróbálunk megnyitni egy adatbázishéjat, ezúttal bejelentkezve az általunk létrehozott felhasználóval létrehozott adatbázisba:
psql -Ututorial_user -dtutorial -h127.0.0.1 -WA parancssorba írja be az általunk létrehozott jelszót: tutorial_password.
Ha lát egy adatbázis-héjat, akkor sikeres volt. Ha hibát lát, vissza kell térnie, és meg kell találnia, mi a baj.
Django összekapcsolása az adatbázissal
Ahhoz, hogy a Django csatlakozzon az adatbázishoz, először telepítenünk kell a Python PostgreSQL adaptert:
pip telepítse a psycopg2-bináris fájltAkkor nyissunk / home / django / tutorial / tutorial / settings.py
és konfigurálja a kapcsolatot.
Keresse meg az aktuális adatbázis-kapcsolatot; ha nem módosította, akkor valami ilyesmi lehet:
ADATBÁZISOK ='alapértelmezett':
„MOTOR”: „django.db.backendek.sqlite3 ',
'NAME': os.pálya.csatlakozás (BASE_DIR, 'db.sqlite3 '),
A PostgreSQL-hez való csatlakozáshoz a következőket cseréljük ki:
ADATBÁZISOK ='alapértelmezett':
„MOTOR”: „django.db.backendek.postgresql_psycopg2 ',
'NAME': 'tutorial',
'USER': 'tutorial_user',
'PASSWORD': 'tutorial_password',
'HOST': '127.0.0.1 ',
„PORT”: „5432”,
Teszteljük a kapcsolatot:
cd / home / django / tutorialpython kezelése.py runerver 0.0.0.0:80
Ismét meg kell látogatnia a webhelyét (számunkra a http: // 178 címen.128.229.34 /, de cserélje ki IP-jére vagy hosztnevére).
Ha minden rendben van, folytathatjuk.
Az nginx, a webszerver beállítása
Amikor futsz python kezelése.py runerver
, a Django fejlesztői kiszolgálóját használja. Ez nagyszerű a helyi fejlesztésekhez, de az SQLite3-hoz hasonlóan ez sem igazán alkalmas a gyártásra.
A termelési webszerverek gyakori választási lehetőségei az nginx és az Apache. Ehhez az oktatóanyaghoz az nginx-et fogjuk használni.
Telepítse az nginx-et a következők segítségével:
apt-get install nginxMost, ha minden jól működött, az nginx-nek a 80-as porton kell futnia. Menj előre, és nézd meg a webhelyedet; látnod kéne:
Nagyszerű, így a nginx működik! Ezután be kell állítanunk, hogy kommunikáljon Djangóval. Nyissa meg az / etc / nginx / sites-available / default címen található nginx konfigurációs fájlt. Cseréljük ki a fájlt a következővel:
upstream djangoszerver 127.0.0.1: 8000;
szerver
hallgat 80;
hely /
try_files $ uri @send_to_django;
hely @send_to_django
proxy_set_header Host $ http_host;
proxy_redirect off;
proxy_pass http: // django;
Tesztelje a konfigurációs fájlt az nginx -t futtatásával. Ha minden rendben van, akkor az nginx -s reload futtatásával újratölthetjük.
Most, ha meglátogatja webhelyét, a következőket fogja látni:
Amikor ezt látja, ez azt jelenti, hogy az nginx nem tudta továbbítani a kérést az upstream folyamatnak. Jelenleg azért, mert megpróbálja továbbítani a kérést a 127-nek.0.0.1: 8000, de ezen a címen nincs folyamathallgatás.
Indítsuk el a Django fejlesztőkiszolgálót, és próbálkozzunk újra:
cd / home / django / tutorialpython kezelése.py runerver 127.0.0.1: 8000
és ismét látogasson el a webhelyére. Látnia kell a Django alkalmazását.
Django felhelyezése a Gunicornra
Ne feledje, hogy nem a Django fejlesztői kiszolgálónkat akarjuk használni a gyártásban. Ehelyett egy Web Server Gateway Interface (WSGI) szervert fogunk használni a Django futtatásához. Az Nginx továbbítja a kérést a WSGI szervernek, amely a Djangót futtatja.
A WSGI-kiszolgáló gyakori választási lehetőségei a Gunicorn és az uWSGI. Ehhez a bemutatóhoz a Gunicorn-t fogjuk használni.
Telepítsük a Gunicorn-t:
pip telepítsen fegyvertEzután a következőképpen kezdhetjük a fegyvert:
cd / home / django / tutorialfegyveres szar oktatóanyag.wsgi
Most már képesnek kell lennie arra, hogy ellátogasson a webhelyére, és láthassa az alkalmazás megfelelő működését.
A Gunicorn működtetése szolgáltatásként
Az ilyen fegyverfuttatással kapcsolatban van néhány probléma:
- Ha lezárjuk az SSH-munkamenetet, a fegyverkorong-folyamat leáll.
- Ha a szerver újraindul, a fegyverkorong-folyamat nem indul el.
- A folyamat rootként fut. Ha a hackerek kihasználást találnak alkalmazásunk kódjában, akkor rootként futtathatják a parancsokat. Nem ezt akarjuk; de ezért hoztuk létre a djangousert!
E problémák megoldása érdekében a Gunicorn-t rendszer-szolgáltatásként fogjuk futtatni.
cd / home / djangomkdir bin
cd / home / django / bin
érintse meg a start-szervert.SH
A start-serverben.SH:
cd / home / djangoforrás env / bin / activ
cd bemutató
fegyveres szar oktatóanyag.wsgi
Most tesztelheti a szkriptet:
cd / home / django / binbash start-server.SH
# látogasson el a webhelyére, annak futnia kell
Most létrehozzuk a systemd szolgáltatást a Gunicorn számára. Hozza létre az / etc / systemd / system / gunicorn fájlt.serviceas következik:
[Mértékegység]Leírás = Gunicorn
Után = hálózat.cél
[Szolgáltatás]
Típus = egyszerű
Felhasználó = django
ExecStart = / home / django / bin / start-server.SH
Újraindítás = meghibásodás
[Telepítés]
WantedBy = többfelhasználós.cél
Engedélyezzük a szolgáltatást, és indítsuk el
systemctl engedélyezi a fegyvertsystemctl indul fegyvertorn
Jelenleg látnia kell a webhelyét.
A fegyvertartót a következőképpen kapcsolhatjuk ki:
systemctl stop fegyveresÉs látnia kell egy 502-es Bad Gateway-t.
Végül ellenőrizzük az indítási ciklust:
systemctl indul fegyvertornindítsa újra most
Amikor a gép újra online lesz, látnia kell, hogy a webhelye fel van készítve.
Statikus fájlok
Ha meglátogatja a webhelyén található Django adminisztrációs panelt az / admin / címen (számunkra ez a http: // 178.128.229.34 / admin /), észre fogja venni, hogy a statikus fájlok nem töltődnek be megfelelően.
Létre kell hoznunk egy új mappát a statikus fájlok számára:
cd / home / djangomkdir statikus
Aztán elmondjuk a Django-nak, hogy hová kell a statikus fájlokat elhelyeznie a / home / django / tutorial / tutorial / settings szerkesztéssel.py, és hozzáteszi:
STATIC_ROOT = '/ home / django / static /'Most összegyűjthetjük a statikus fájlokat:
cd / home / djangoforrás env / bin / activ
cd bemutató
python kezelése.py kollektatikus
Végül meg kell mondanunk az nginx-nek, hogy szolgálja ezeket a statikus fájlokat.
Nyissuk meg az / etc / nginx / sites-available / default fájlt, és egészítsük ki közvetlenül a tartózkodási helyed / blokk fölött:
hely / statikus /gyökér / home / django;
try_files $ uri = 404;
Az egész fájlnak így kell kinéznie:
upstream djangoszerver 127.0.0.1: 8000;
szerver
hallgat 80;
hely / statikus /
gyökér / home / django;
try_files $ uri = 404;
hely /
try_files $ uri @send_to_django;
hely @send_to_django
proxy_set_header Host $ http_host;
proxy_redirect off;
proxy_pass http: // django;
Újra betölthetjük a fájlt az nginx -s újratöltéssel
És voila! A statikus fájlok most már teljes mértékben működni fognak.
Következtetés
Ezen a ponton a Django alkalmazás megfelelően működik. Ha van néhány speciális követelménye, akkor szükség lehet egy gyorsítótár (például Redis) vagy egy üzenetsor (például Rabbit MQ) beállítására. Érdemes beállítani a folyamatos telepítést is, mivel a telepítési eljárás eltarthat egy ideig.
Egy másik fontos lépés a megfelelő lépések megtétele az Ubuntu-gép biztonsága érdekében. Ellenkező esetben előfordulhat, hogy a szervere nem megfelelően viselkedik!
Sok szerencsét!