Django je besplatan web okvir otvorenog koda izgrađen u Python programskom jeziku. Django je iznimno brz, siguran i visoko skalabilan. U rukama vještog programera, Django može brzo uspostaviti moćnu web stranicu. Može se besprijekorno integrirati s popularnim web poslužiteljima (Apache, Nginx), i bazama podataka (MySQL, MariaDB, PostgreSQL, Oracle, i SQLite), itd. Django pokreće neke od najvećih svjetskih web stranica poput Instagrama, Mozille i NASA-e. Ovaj vodič prikazuje postavljanje osnove web aplikacije uz pomoć Djanga s PostgreSQL-om, Nginxom i Gunicorn na Ubuntu 20.04.
Preduvjeti
Ovaj vodič zahtijeva da koristite Ubuntu 20.04 poslužitelj konfiguriran s osnovnim vatrozidom i ne-root korisnikom sa sudo privilegijama. Pogledajte ovaj detaljni vodič o tome kako postaviti Ubuntu poslužitelj. Slijedite ovaj vodič kako biste konfigurirali ne-root korisnika sa sudo privilegijama. Također možete konfigurirati Iptables vatrozid prateći korake u ovom vodiču.
Instalirat ćemo Django unutar virtualnog okruženja. Imati okruženje specifično za projekt omogućuje lakše upravljanje s više projekata s istog poslužitelja. Nakon što se baze podataka i aplikacije postave na mjesto, implementirat ćemo Gunicorn aplikacijski poslužitelj. Gunicorn će biti aplikacijsko sučelje koje prevodi zahtjeve klijenata iz HTTP-a u Python pozive koje naša aplikacija može koristiti. Zatim ćemo implementirati Nginx ispred Gunicorna radi njegovog brzog rukovanja vezama i sigurnosnih značajki koje je lako implementirati.
Instalacija potrebnih paketa
Najprije započnite instaliranjem svih potrebnih paketa. Srećom, svi su ti paketi izravno dostupni iz službenih repozitorija paketa za Ubuntu. Otvorite terminal i ažurirajte APT predmemoriju paketa:
|
1 |
sudo apt update |
Popis paketa ovisi o tome hoće li web aplikacija koristiti Python 2 or Python 3. Pokrenite sljedeću naredbu za instalaciju Djanga s Pythonom 3:
|
1 |
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl |
Django 1.11 LTS je posljednje izdanje Djanga koje će podržavati Python 2. Ako namjeravate koristiti Django s Pythonom 2, instalirajte sljedeće pakete:
|
1 |
sudo apt install python-pip python-dev libpq-dev postgresql postgresql-contrib nginx curl |
PostgreSQL baza podataka i korisnik
Što se tiče rješenja baze podataka, koristit ćemo PostgreSQL. To je moćan objektno-relacijski sustav baze podataka otvorenog koda. PostgreSQL nudi pouzdanost, robusnost i performanse. Za detaljne korake o postavljanju PostgreSQL-a, pogledajte ovaj vodič o postavljanju PostgreSQL-a na Ubuntu poslužitelju. Za ovaj vodič, postavit ćemo namjensku bazu podataka i korisnika za našu Django aplikaciju.
Prema zadanim postavkama, PostgreSQL implementira „peer autentifikaciju” kao shemu autentifikacije za lokalne veze. Ukratko, „peer autentifikacija” će autentificirati prijavu ako se korisničko ime operacijskog sustava korisnika podudara s važećim PostgreSQL korisničkim imenom. Tijekom instalacije, PostgreSQL je konfigurirao korisnika operacijskog sustava postgres kako bi odgovarao postgres PostgreSQL administrativnom korisniku. Prijavite se u interaktivnu sesiju ljuske PostgreSQL-a kao postgres pomoću sljedeće naredbe:
|
1 |
sudo -u postgres psql |
Naći ćete se na PostgreSQL upitu. Prvi korak je stvaranje namjenske baze podataka za projekt. Za potrebe demonstracije, baza podataka će se zvati viktor_project:
|
1 |
CREATE DATABASE viktor_project; |
Sljedeći korak je stvaranje namjenskog korisnika za bazu podataka projekta. Korisnik bi trebao imati jako korisničko ime. Za potrebe demonstracije, korisničko ime će biti viktor_project_user:
|
1 |
CREATE USER viktor_project_user WITH PASSWORD 'password123'; |
Sada ćemo izmijeniti neke parametre:
- Određeni parametri veze. Ukratko, neće biti potrebno slati upite i postavljati ispravne vrijednosti svaki put kada se uspostavi veza. To uvelike poboljšava performanse baze podataka.
- Zadano kodiranje na
UTF-8. To je univerzalno kodiranje i Django ga očekuje. - Zadana shema izolacije transakcija na „read committed”. Blokira čitanje iz nepotvrđenih transakcija.
- Vremenska zona na
UTC.
Sve ove promjene parametara preporučuje sam Django projekt. Da biste primijenili ove promjene, pokrenite sljedeće naredbe. Ne zaboravite promijeniti korisničko ime baze podataka u ispravno:
|
1 2 3 |
ALTER ROLE viktor_project_user SET client_encoding TO 'utf8'; ALTER ROLE viktor_project_user SET default_transaction_isolation TO 'read committed'; ALTER ROLE viktor_project_user SET timezone TO 'UTC'; |
Promijenite administratora baze podataka u namjenskog korisnika baze podataka:
|
1 |
GRANT ALL PRIVILEGES ON DATABASE viktor_project TO viktor_project_user; |
Naš rad s PostgreSQL-om je za sada gotov. Izađite iz interaktivne ljuske PostgreSQL-a:
|
1 |
\q |
Python virtualno okruženje
Nakon što je baza podataka pripremljena, sada se možemo usredotočiti na uspostavljanje preostalih zahtjeva projekta. Radi lakšeg upravljanja, uspostavit ćemo virtualno okruženje i tamo instalirati sve Python zahtjeve. Za generiranje virtualnog okruženja potreban nam je virtualenv. Može se jednostavno instalirati pomoću pip-a.
Sljedeće naredbe će nadograditi pip i instalirati virtualenv. Za Python 3 pokrenite sljedeće naredbe:
|
1 2 |
sudo -H pip3 install --upgrade pip sudo -H pip3 install virtualenv |
Za Python 2 umjesto toga pokrenite sljedeće naredbe:
|
1 2 |
sudo -H pip install --upgrade pip sudo -H pip install virtualenv |
Nakon što se virtualenv instalira, vrijeme je za stvaranje virtualnog okruženja. Zatim stvorite namjenski direktorij za virtualno okruženje:
|
1 |
mkdir -v ~/viktor_project |
Nakon toga promijenite trenutni aktivni direktorij u namjenski direktorij za virtualno okruženje:
|
1 |
cd ~/viktor_project |
Unutar direktorija pokrenite sljedeću naredbu. Alat virtualenv stvorit će virtualno okruženje s nazivom projekta:
|
1 |
virtualenv viktor_project |
Stvorit će poddirektorij s nazivom projekta. Poddirektorij će sadržavati lokalnu verziju Pythona i pip. Nudi fleksibilnost za instalaciju i konfiguraciju izoliranog Python okruženja za projekt.
Sljedeća naredba će aktivirati virtualno okruženje:
|
1 |
source viktor_project/bin/activate |
Naredbeni redak terminala će se promijeniti, što označava da radite unutar Python virtualnog okruženja. Sada kada smo unutar virtualnog okruženja, instalirat ćemo potrebne Python zahtjeve. Trebamo Django, Gunicorn i psycopg2 (PostgreSQL adapter). Sljedeća naredba će narediti lokalnom pip-u da instalira komponente:
|
1 |
pip install django gunicorn psycopg2-binary |
Čak i ako koristite Python 3, pip je ispravna naredba. To je zato što je unutar virtualnog okruženja pip3 preimenovan u pip.
Novi Django projekt
S postavljenim Python komponentama, možemo početi raditi sa stvarnim datotekama Django projekta.
-
Stvaranje Django projekta
Direktorij projekta je već uspostavljen. Reći ćemo Djangu da tamo instalira svoje datoteke. Ovaj postupak će generirati direktorij druge razine koji sadrži stvarni kod. Direktorij će također sadržavati skriptu za upravljanje. Ključ je u tome što Djangu eksplicitno govorimo ciljni direktorij umjesto da mu dopustimo da sam odredi direktorij u odnosu na trenutni:
|
1 |
django-admin.py startproject viktor_project ~/viktor_project |
Django će kreirati projekt u skladu s tim. Evo nekih od važnih datoteka i direktorija na koje ćemo se usredotočiti. Nazivi direktorija i datoteka koriste se prema demonstraciji.
~/viktor_project/manage.py: Skripta za upravljanje projektom koju koristi Django.~/viktor_project/viktor_project/: To je paket koji sadrži Django projekt. Trebao bi sadržavati datoteke __init__.py, settings.py, urls.py, asgi.py i wsgi.py.
-
Prilagođavanje postavki projekta
Nakon što je projekt kreiran, prva stvar koju treba učiniti je prilagoditi njegovu konfiguraciju. Otvorite settings.py u uređivaču teksta:
|
1 |
nano ~/viktor_project/viktor_project/settings.py |
Prva direktiva koju tražimo je ALLOWED_HOSTS. Ona definira poslužitelje ili nazive domena koji se mogu povezati s Django instancom. Ako bilo koji dolazni zahtjev s Host zaglavljem ne odgovara popisu ALLOWED_HOSTS, stvorit će se iznimka. Django to preporučuje kako bi se izbjegle određene vrste sigurnosnih ranjivosti:
|
1 |
ALLOWED_HOSTS = ['<server_ip_or_domain_name_1>',' server_ip_or_domain_name_2','localhost'] |
Sljedeći odjeljak na koji ćemo se usredotočiti je DATABASE. On upravlja pristupom bazi podataka. Prema zadanim postavkama, sadrži konfiguraciju za SQLite sustav baze podataka. Međutim, za projekt ćemo koristiti PostgreSQL bazu podataka. Django će koristiti psycopg2 adapter za komunikaciju s PostgreSQL-om:
|
1 2 3 4 5 6 7 8 9 10 |
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'viktor_project', 'USER': 'viktor_project_user', 'PASSWORD': 'password123', 'HOST': 'localhost', 'PORT': '', } } |
Sada prijeđite na dno datoteke. Dodajte sljedeće retke kako biste označili lokaciju statičkih datoteka. To pomaže Nginxu da obrađuje zahtjeve za ove stavke:
|
1 2 |
import os STATIC_ROOT = os.path.join(BASE_DIR, 'static/') |
Naš rad s settings.py je za sada završen. Spremite datoteku i zatvorite uređivač.
-
Dovršavanje početnog postavljanja projekta
Sada možemo migrirati početnu shemu baze podataka u namjensku PostgreSQL bazu podataka. Pokrenite sljedeću naredbu:
|
1 2 |
~/viktor_project/manage.py makemigrations ~/viktor_project/manage.py migrate |
Zatim moramo kreirati superkorisnika za projekt. Za generiranje superkorisnika pokrenite sljedeću naredbu:
|
1 |
~/viktor_project/manage.py createsuperuser |
Prikupite sve statičke datoteke na lokaciju koju smo odredili u settings.py. Statičke datoteke bit će prikupljene u zasebnom direktoriju pod nazivom „static” unutar direktorija projekta:
|
1 |
~/viktor_project/manage.py collectstatic |
Sada moramo prilagoditi vatrozid poslužitelja. Ako ste pratili vodič za konfiguraciju poslužitelja, već imate konfiguriran i aktiviran UFW. Kreirat ćemo iznimku za port 8000. To je zadani port koji Django koristi. Pogledajte ovaj vodič kako biste saznali više o osnovama i korištenju UFW vatrozida.
|
1 |
sudo ufw allow 8000 |
Zatim provjerite radnju:
|
1 |
sudo ufw status |
Na kraju, možemo testirati poslužitelj na djelu. Pokrenite Django razvojni poslužitelj:
|
1 |
~/viktor_project/manage.py runserver 0.0.0.0:8000 |
Ako je konfiguracija prošla uspješno, Django razvojni poslužitelj trebao bi se pokrenuti i prihvatiti dolazne zahtjeve. Otvorite preglednik i idite na IP/domenu vašeg poslužitelja na portu 8000:
|
1 |
http://<server_or_domain>:8000 |
Trebali biste dospjeti na zadanu početnu stranicu Djanga. Za pristup administratorskoj ploči, dodajte /admin na URL. Administratorska ploča dostupna je samo superkorisniku kojeg smo prethodno kreirali:
|
1 |
http://<server_or_domain>:8000/admin |
Nakon prijave, sletjet ćete na zadano Django administratorsko sučelje:
Završili smo s testiranjem za sada. Da biste zaustavili poslužitelj, pritisnite „Ctrl + C” u prozoru terminala.
-
Testiranje Gunicorna
Prije napuštanja virtualnog okruženja, želimo se uvjeriti da Gunicorn može posluživati aplikacije. Način za testiranje je korištenje Gunicorna za učitavanje WSGI modula projekta.
Naredba Gunicorn nalazi se unutar direktorija projekta:
|
1 2 |
cd ~/viktor_project gunicorn --bind 0.0.0.0:8000 viktor_project.wsgi |
To će pokrenuti Gunicorn na istom sučelju na kojem se vrtio Django. Možemo ponovno testirati aplikaciju iz običnog web preglednika. Imajte na umu da administratorsko sučelje neće imati primijenjene stilove jer Gunicorn još uvijek ne zna kako pronaći statički CSS sadržaj:
|
1 |
http://<server_or_domain>:8000 |
Kada završite, pritisnite „Ctrl + C” u prozoru terminala kako biste zaustavili Gunicorn poslužitelj.
-
Izlazak iz virtualnog okruženja
Konfiguracija Django aplikacije je završena. Pokrenite sljedeću naredbu za izlazak iz virtualnog okruženja:
|
1 |
deactivate |
Gunicorn socket i servisne datoteke
Potvrdili smo da Gunicorn može komunicirati s Django aplikacijom. Međutim, potreban nam je robusniji način upravljanja aplikacijskim poslužiteljem. Tu u igru ulazi systemd. Systemd je jedan od najpopularnijih init sustava dostupnih na Linuxu. Evo detaljnog vodiča o tome kako upravljati systemd uslugama i jedinicama.
Možemo stvoriti socket i servisne datoteke za Gunicorn kako bismo omogućili da systemd njime upravlja kao da je usluga. Prilikom pokretanja sustava, generirat će se Gunicorn socket. Socket će slušati dolazne veze. Kada dođe do veze, systemd će pokrenuti Gunicorn procese za rukovanje tom vezom.
-
Gunicorn socket
Započnimo stvaranjem Gunicorn socketa. Datoteka se mora stvoriti sa sudo privilegijama:
|
1 |
sudo nano /etc/systemd/system/gunicorn.socket |
Unesite sljedeći kod u datoteku:
|
1 2 3 4 5 6 7 |
[Unit] Description=gunicorn socket [Socket] ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target |
Kao što vidite, postoje tri odjeljka koda.
[Unit]:Ovaj odjeljak opisuje socket.[Socket]:Definira lokaciju socketa.[Install]:Ovaj dio osigurava da systemd stvori socket u pravo vrijeme.
Spremite datoteku i zatvorite uređivač.
-
Gunicorn usluga
Zatim ćemo stvoriti servisnu datoteku za Gunicorn. Slično kao i socket datoteka, i ona se mora stvoriti sa sudo privilegijama:
|
1 |
sudo nano /etc/systemd/system/gunicorn.service |
Unesite sljedeći kod:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[Unit] Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=cloudsigma Group=www-data WorkingDirectory=/home/cloudsigma/viktor_project ExecStart=/home/cloudsigma/viktor_project/viktor_project/bin/gunicorn \ --access-logfile - \ --workers 3 \ --bind unix:/run/gunicorn.sock \ viktor_project.wsgi:application [Install] WantedBy=multi-user.target |
Kod sadrži više odjeljaka:
[Unit]:Ovaj odjeljak specificira metapodatke i ovisnosti. Također opisuje pokretanje tek nakon što se dosegne mrežni cilj.[Service]:Ovaj odjeljak specificira korisnika i grupu pod kojima će se proces izvoditi. Vlasništvo nad grupom postavljeno je na „www-data” kako bi Nginx mogao komunicirati s Gunicornom. Također mapira radne direktorije i specificira naredbe za pokretanje.[Install]:Ovaj odjeljak govori systemd-u s čime povezati ovu uslugu ako je omogućena pri pokretanju sustava. Trebala bi se pokrenuti nakon što se pokrene uobičajeni višekorisnički sustav.
Zatim spremite datoteku i zatvorite uređivač.
-
Omogućavanje Gunicorn socketa
Gunicorn socket je spreman za upotrebu. Stoga možete pokrenuti sljedeće naredbe. Pokrenut će i omogućiti socket. Datoteka socketa bit će stvorena na /run/gunicorn.sock pri pokretanju sustava. Kada se uspostavi veza sa socketom, systemd će pokrenuti uslugu Gunicorn kako bi je obradio:
|
1 2 |
sudo systemctl start gunicorn.socket sudo systemctl enable gunicorn.socket |
Provjerite status Gunicorn socketa:
|
1 |
sudo systemctl status gunicorn.socket |
Sada provjerite postoji li datoteka socketa:
|
1 |
file /run/gunicorn.sock |
Ako status iz systemctl-a ukazuje na pogrešku ili datoteka gunicorn.sock nije pronađena, to znači da socket nije ispravno kreiran. Provjerite detaljan zapisnik za tragove:
|
1 |
sudo journalctl -u gunicorn.socket |
Ne zaboravite ponovno pogledati gunicorn.socket datoteku za potencijalne pogreške.
-
Aktivacija socketa
Do sada smo pokrenuli gunicorn.socket. Međutim, bez ikakvog zahtjeva za povezivanje, gunicorn.service se neće aktivirati. Zatim provjerite status Gunicorna:
|
1 |
sudo systemctl status gunicorn |
Mehanizam aktivacije socketa možemo testirati slanjem zahtjeva za povezivanje pomoću curl-a:
|
1 |
curl --unix-socket /run/gunicorn.sock localhost |
Trebali biste dobiti HTML izlaz iz aplikacije. To znači da se Gunicorn uspješno pokrenuo i da je mogao poslužiti Django aplikaciju. Provjerite trenutni status usluge Gunicorn:
|
1 |
sudo systemctl status gunicorn |
Ako dođe do neočekivanog ponašanja ili izlaza (što ukazuje na pogrešku), provjerite detaljne zapisnike za tragove:
|
1 |
sudo journalctl -u gunicorn |
Ako su napravljene promjene u datoteci gunicorn.service, tada morate ponovno učitati daemon kako bi ponovno pročitao definiciju usluge. To također zahtijeva ponovno pokretanje usluge Gunicorn:
|
1 2 |
sudo systemctl daemon-reload sudo systemctl restart gunicorn |
Konfiguriranje Nginxa
Sada ćemo konfigurirati Nginx za prosljeđivanje dolaznog prometa procesu. Prvo kreirajte novi blok poslužitelja u Nginxu:
|
1 |
sudo nano /etc/nginx/sites-available/viktor_project |
Zatim unesite sljedeći kod:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen 80; server_name 31.171.250.71; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/cloudsigma/viktor_project; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } } |
Ovdje se nalazi više blokova u konfiguraciji:
servis:Ovaj blok definira da bi poslužitelj trebao normalno slušati na portu 80 i odgovarati na naziv domene ili IP adresu poslužitelja.location:Ovo je prvi unos lokacije. Definira gdje se mogu pronaći statički resursi.location:Ovo je drugi unos lokacije. Ovaj blok definira standardne parametre proxyja i kako proslijediti promet na Gunicorn socket.
Spremite datoteku i zatvorite uređivač. Povežite datoteku s direktorijem „sites-enabled” za aktivaciju:
|
1 |
sudo ln -s /etc/nginx/sites-available/viktor_project /etc/nginx/sites-enabled |
Nakon toga testirajte postoji li sintaktička pogreška u konfiguraciji Nginxa:
|
1 |
sudo nginx -t |
Ako niste pronašli pogrešku, ponovno pokrenite Nginx kako biste primijenili promjenu:
|
1 |
sudo systemctl restart nginx |
Moramo ponovno izmijeniti UFW pravila. Više nam ne treba pristup razvojnom poslužitelju, pa možemo ukloniti iznimku za port 8000. Osim toga, želimo otvoriti port 80 za uobičajeni promet:
|
1 2 |
sudo ufw delete allow 8000 sudo ufw allow 'Nginx Full' |
Provjerite ove promjene pravila vatrozida:
|
1 |
sudo ufw status |
Poslužitelj bi sada trebao biti dostupan iz uobičajenog web preglednika.
Postupci rješavanja problema
Ako su svi koraci ispravno praćeni, aplikacija Django trebala bi biti dostupna putem interneta. Ako nije, to znači da instalacija nije prošla kako je planirano. Moramo riješiti problem kako bismo otkrili izvor poteškoće.
-
Nginx prikazuje zadanu stranicu
Ako Nginx prikazuje zadanu stranicu umjesto proxyja aplikacije, to obično znači da je server_name pogrešno konfiguriran u bloku poslužitelja.
U ovom primjeru, blok poslužitelja pohranjen je na sljedećoj lokaciji:
|
1 |
/etc/nginx/sites-available/viktor_project |
Stavka server_name određuje koji će blok poslužitelja Nginx koristiti za odgovaranje na zahtjeve. Ako se prikazuje zadana stranica, Nginx vjerojatno nije uspio uskladiti zahtjev s eksplicitnim blokom poslužitelja, pa se umjesto toga vraća na zadani blok:
|
1 |
/etc/nginx/sites-available/default |
Provjerite ima li blok poslužitelja vašeg Django projekta ispravan server_name.
-
502 Bad Gateway
Pogreška 502 ukazuje na to da Nginx nije uspio uspješno proslijediti zahtjev. Postoji širok raspon mogućih konfiguracijskih problema koji mogu dovesti do pogreške 502, pa su nam potrebni tragovi za ispravno rješavanje problema.
Primarni izvor tragova su Nginx zapisi o pogreškama. Općenito, oni će ukazati na uvjete koji su uzrokovali probleme tijekom prosljeđivanja. Provjerite Nginx zapisnik pogrešaka pomoću sljedeće naredbe:
|
1 |
sudo tail -F /var/log/nginx/error.log |
Nakon što se zapisnik otvori, pokušajte ponovno pristupiti poslužitelju. To bi trebalo generirati novu poruku o pogrešci u zapisniku. To može pomoći u sužavanju problema. Evo nekoliko mogućih poruka:
- connect() to unix:/run/gunicorn.sock failed (2: No such file or directory)
To ukazuje na to da Nginx nije mogao pronaći gunicorn.sock na lokaciji definiranoj u konfiguraciji. Lokacija je opisana direktivom proxy_pass unutar bloka web-mjesta. Provjerite ukazuje li proxy_pass na ispravnu lokaciju datoteke gunicorn.sock koju je generirala systemd jedinica gunicorn.socket:
|
1 |
/etc/nginx/sites-available/viktor_project |
Ako gunicorn.sock nije pronađen u direktoriju /run, to znači da ga systemd nije mogao generirati. Trebali biste ponovno provjeriti korake konfiguracije Gunicorn socket datoteke.
- connect() to unix:/run/gunicorn.sock failed (13: Permission denied)
To ukazuje na to da se Nginx nije mogao povezati s Gunicorn socketom zbog problema s dopuštenjima. To se može dogoditi ako je proces izveden kao root korisnik umjesto sudo korisnika. Iako je systemd uspješno generirao gunicorn.sock uspješno, Nginx ga ne može koristiti.
Jedan od mogućih uzroka mogu biti ograničena dopuštenja između korijenskog direktorija (/) i datoteke gunicorn.sock. Provjerite dopuštenja i vlasništvo nad socket datotekom i svakim od njezinih nadređenih direktorija:
|
1 |
namei -l /run/gunicorn.sock |
Prvi stupac opisuje dopuštenja datoteke. Drugi stupac opisuje korisnika vlasnika, a treći stupac grupu vlasnika. Ako bilo koji od direktorija koji vode do gunicorn.sock nema odgovarajuća dopuštenja za čitanje i izvršavanje, Nginx neće uspjeti pristupiti socketu.
-
Django prikazuje „could not connect to the server: Connection refused”
To ukazuje na to da se Django nije uspio povezati s PostgreSQL poslužiteljem. Provjerite je li PostgreSQL poslužitelj pokrenut i radi li:
|
1 |
sudo systemctl status postgresql |
Ako nije pokrenut, pokrenite sljedeće naredbe kako biste ga pokrenuli i omogućili:
|
1 2 |
sudo systemctl start postgresql sudo systemctl enable postgresql |
Ako i dalje imate ovu pogrešku, provjerite jesu li vjerodajnice baze podataka ispravno definirane pod settings.py:
|
1 |
~/viktor_project/viktor_project/settings.py |
Dodatno rješavanje problema
Za dodatno rješavanje problema postavljeni su različiti zapisi. Ti zapisi mogu pomoći u sužavanju izvora problema.
Evo popisa zapisa koji mogu pomoći:
- Nginx zapisi
|
1 |
sudo journalctl -u nginx |
- Zapisi pristupa-Nginx
|
1 |
sudo less /var/log/nginx/access.log |
- Zapisi pogrešaka-Nginx
|
1 |
sudo less /var/log/nginx/error.log |
- Zapisi aplikacije-Gunicorn
|
1 |
sudo journalctl -u gunicorn |
- Zapisi socketa-Gunicorn
|
1 |
sudo journalctl -u gunicorn.socket |
|
1 |
sudo systemctl restart gunicorn |
|
1 2 |
sudo systemctl daemon-reload sudo systemctl restart gunicorn.socket gunicorn.service |
|
1 2 |
sudo nginx -t sudo systemctl restart nginx |
Završne misli
Ovaj vodič uspješno prikazuje kako postaviti temelje za Django. Django pruža mnoge uobičajene komponente web aplikacije, omogućujući vam da se usredotočite na jedinstvene elemente. Projekt Django radit će unutar virtualnog okruženja. Gunicorn upravlja komunikacijom između zahtjeva klijenata i Djanga. Na kraju, Nginx djeluje kao reverzni proxy za rukovanje klijentskim vezama.
Sretno programiranje!










Komentari
Još nema komentara. Budite prvi.