Aplikacija radi na tvom računaru; sada je postavljamo na server da bi je svi koristili. Pokazujemo dva besplatna načina – Render (PostgreSQL, automatsko ažuriranje sa GitHub-a) i PythonAnywhere (najjednostavniji, SQLite) – i šta mora da se promeni u projektu pre objave.
Pre nego što počneš: potrebno predznanje – čuvanje logoa, objavljivanje statičkog sajta. Kako da učiš: radi u svom projektu korak po korak i posle svake lekcije proveri da li server radi; zadatak na kraju prvo uradi sam/a. Kod je za Django 5.2 (LTS) i Python 3.12+; svaki deo upiši u fajl naveden u komentaru na vrhu primera.
Šta je drugačije na serveru
Razvoj (tvoj računar)
Server
pokreće aplikaciju
runserver
Gunicorn (WSGI server)
statički fajlovi
Django ih sam služi
collectstatic + WhiteNoise
baza
SQLite fajl
PostgreSQL (Render) ili SQLite (PythonAnywhere)
DEBUG
True
False
tajne
u settings.py
promenljive okruženja
Heroku: prva verzija projekta je postavljena na Heroku. Heroku od novembra 2022. nema besplatan paket, pa za školske projekte koristimo platforme ispod. Uslovi besplatnih paketa se menjaju – pre početka proveri ih na sajtu platforme.
# logo_kreator/settings.py – podešavanja za rad na internetu
# dodaj NA KRAJ fajla; postojeće SECRET_KEY, DEBUG, ALLOWED_HOSTS i DATABASES iz gornjeg dela obriši
import os
import dj_database_url
SECRET_KEY = os.environ.get("SECRET_KEY", "samo-za-razvoj-promeni-me") # na serveru: promenljiva okruženja
DEBUG = os.environ.get("DEBUG", "0") == "1" # na serveru isključeno
ALLOWED_HOSTS = ["localhost", "127.0.0.1"]
RENDER_HOST = os.environ.get("RENDER_EXTERNAL_HOSTNAME") # Render ga sam postavlja
if RENDER_HOST:
ALLOWED_HOSTS.append(RENDER_HOST)
CSRF_TRUSTED_ORIGINS = [f"https://{RENDER_HOST}"]
# WhiteNoise služi statičke fajlove (CSS, JS, slike) bez posebnog servera
MIDDLEWARE.insert(1, "whitenoise.middleware.WhiteNoiseMiddleware") # odmah posle SecurityMiddleware
STATIC_ROOT = BASE_DIR / "staticfiles"
STORAGES = {
"default": {"BACKEND": "django.core.files.storage.FileSystemStorage"},
"staticfiles": {"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage"},
}
# baza: na serveru iz DATABASE_URL (PostgreSQL), kod kuće SQLite
DATABASES = {
"default": dj_database_url.config(default=f"sqlite:///{BASE_DIR / 'db.sqlite3'}", conn_max_age=600)
}
Napravi i fajl build.sh u korenu projekta – komande koje Render izvrši pri svakom postavljanju:
#!/usr/bin/env bash
# build.sh – Render ga pokreće pri svakom postavljanju
set -o errexit # prekini na prvoj grešci
pip install -r requirements.txt
python manage.py collectstatic --no-input
python manage.py migrate
collectstatic skupi CSS, JS i slike svih aplikacija (i admin panela) u folder staticfiles, odakle ih služi WhiteNoise. Proveri lokalno: python manage.py check --deploy nabraja bezbednosna podešavanja koja nedostaju.
Render korak po korak
Postavi projekat na GitHub (bez .venv i db.sqlite3 – vidi .gitignore iz lekcije 2).
Na render.com napravi nalog i New → PostgreSQL → ime logo-kreator-baza → Free. Kopiraj Internal Database URL.
Environment → dodaj promenljive: DATABASE_URL (adresa baze iz koraka 2), SECRET_KEY (dugačak slučajan niz – Render ima dugme Generate), PYTHON_VERSION (npr. 3.13.1).
Create Web Service – posle nekoliko minuta aplikacija je na https://logo-kreator.onrender.com (ime zavisi od tvog servisa).
Administrator na serveru: u kartici Shell servisa pokreni python manage.py createsuperuser.
Svaki novi git push na GitHub automatski ponovo postavlja aplikaciju. Besplatan servis „zaspi“ posle neaktivnosti, pa prvo otvaranje traje i do minut.
PythonAnywhere – najjednostavnije
PythonAnywhere je dobar izbor za prvi put: ima besplatan nalog, Python je već instaliran, a baza može ostati SQLite.
Napravi besplatan nalog (Beginner).
U Consoles → Bash: git clone tvog repozitorijuma, napravi .venv i pip install -r requirements.txt.
Web → Add a new web app → Manual configuration → izaberi verziju Python-a; u podešavanju upiši putanju do .venv i izmeni WSGI fajl da učitava logo_kreator.settings.
U Static files poveži /static/ sa folderom staticfiles i pokreni python manage.py collectstatic i migrate.
U ALLOWED_HOSTS dodaj korisnicko-ime.pythonanywhere.com i klikni Reload.
Detaljno uputstvo za Django je u njihovoj dokumentaciji.
Najčešće greške posle postavljanja
Simptom
Uzrok i rešenje
DisallowedHost / Bad Request (400)
domen nije u ALLOWED_HOSTS
strana bez CSS-a, admin bez stila
nije pokrenut collectstatic ili nije dodat WhiteNoise
CSRF verification failed pri prijavi
nedostaje CSRF_TRUSTED_ORIGINS sa https:// adresom
Server Error (500)
pogledaj Logs na platformi; često zaboravljena migracija ili promenljiva okruženja
no such table / relation does not exist
na serveru nije pokrenut migrate
Video: postavljanje na Heroku (prva verzija)
Napomena uz video: Heroku više nema besplatan paket. Video pokazuje isti tok (GitHub → platforma → promenljive okruženja → baza), pa pomaže da razumeš korake, ali za projekat prati uputstvo za Render ili PythonAnywhere sa ove strane.
Zadaci za vežbu
Za svaki zadatak postoji primer, uputstvo i rešenje.
ZADATAK 01Težina: lako
Lista pre objave
Pre postavljanja proveri projekat: python manage.py check --deploy, python manage.py test, da li je requirements.txt ažuran i da li .gitignore isključuje .venv, db.sqlite3 i staticfiles. Zapiši šta si morao/la da ispraviš.
Uputstvo
check --deploy javlja upozorenja (W...) – sa DEBUG=False i podešavanjima sa ove strane većina nestaje. Upozorenja o HSTS i SSL preusmerenju su opciona za školski projekat.
Rešenje
> set DEBUG=0
> python manage.py check --deploy
System check identified some issues:
WARNINGS:
?: (security.W004) You have not set a value for the SECURE_HSTS_SECONDS setting.
?: (security.W008) Your SECURE_SSL_REDIRECT setting is not set to True.
?: (security.W012) SESSION_COOKIE_SECURE is not set to True.
?: (security.W016) CSRF_COOKIE_SECURE is not set to True.
Ispravljeno (settings.py, samo kada DEBUG nije uključen):
if not DEBUG:
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
> python manage.py test
....
Ran 4 tests ... OK
.gitignore: dodat staticfiles/
requirements.txt: ponovo napravljen posle instalacije gunicorn i whitenoise
Česte greške i saveti
Nikad ne postavljaj projekat sa DEBUG = True i tajnim ključem u kodu.
Posle izmene modela, migracije moraju biti u repozitorijumu – server ih samo primenjuje (migrate), ne pravi ih.
Fajlove koje korisnici otpremaju (slike) besplatni servisi ne čuvaju trajno – Logo kreator zato čuva podatke o logou u bazi, a sliku crta iz njih.
Proveri znanje
Otvori kviz
Postavljanje na internet
1. Koji program pokreće Django aplikaciju na serveru umesto runserver-a?
2. Šta radi python manage.py collectstatic?
3. Gde se na serveru čuva SECRET_KEY?
KREIRANJE DJANGO WEB APLIKACIJE- HEROKU PLATFORMA
Da bi neko preko interneta mogao da pristupi web aplikaciji, potrebno je postaviti aplikaciju na nekom hosting-u, u našem slučaju to je Heroku web platforma. Da bi se to uradilo potrebno je da krisnik na sajtu: www.heroku.com/ kreira nalog, a zatim prijavi na sajt, kako bi za odabran programski jezik, mogao da kreira aplikaciju. Takođe je potrebno povezati skladište(repositorium engl.) tj. folder u kome se nalazi aplikacija na lokalu, sa aplikacijom na web platformi, da bi se preko prethodno instaliranog Heroku CLI(Command Line Interface) i instalisanog alata Git, moglo daljinski upravljati razvijanjem aplikacije na udaljenom web serveru, odnosno u ovom slučaju na Heroku platformi.
Heroku platforma - video
Krenimo ispočetka, tj. da bi se kreirao nalog na heroku web sajtu treba kliknuti na signup dugme i pojaviće se strana za registraciju, kao što je prikazano na sledećoj slici:
Slika 1: Kreiranje Django web aplikacije-Heroku platforma
Posle registracije, a zatim prijavljivanja, proverava se autentifikacija korisničkog naloga i ako prođe, otvoriće se web strana kao na sledećoj slici:
Slika 2: Heroku platforma-kontrolna tabla
Pre kreiranja samih aplikacija poželjno je kreirati Pipeline(grupa međusobno povezanih aplikacija, koje se mogu povezati sa određenim repozitorijumom na GitHub-u i tako ažurirati projekti koji se skladište tamo. Projekti na istom pipeline dele zajedničku bazu kodova, određene biblioteke i nalaze se u zajedničkom repozitorijumu. Sa leve strane je dat primer već kreiranog pipeline pod imenom simulacije, koje u sebi povezuje 5 aplikacija, što je maksimalan broj aplikacija, ako se odabere besplatna verzija naloga na Heroku. Sa desne se vidi prikazan meni sa izborom naredbi. U okviru pipeline može se uočiti da postoji više faza u kreiranju aplikacije: deploy, staging, production. Na slici ispod se vide dva projekta koja su “staging” fazi.
Slika 3: Heroku platforma-pipeline
Aplikacija se može kreirati direktno na web platformi klikom na dugme addApp, i automatski povezati sa lokalnim računarom pomoću komande deploy ili se kasnije povezati sa lokalom preko odgovarajuće komande iz Heroku command line interfejsa(CLI). Na početku se aplikacija nalazi na pozornici(stage-u), i tu dalje ostaje sve dok je u fazi razvoja, da bi se na kraju prebacila u mod “production”, kada bude potpuno završena. Klikom na naziv aplikacija otvara se stranica kao na sledećoj slici:
Slika 4: Heroku platforma-Razvoj aplikacije
Kroz različite kartice (zaokružene crvenom linijom) mogu se podešavati razne opcije, upravljati resursima, vršiti ažuriranje aplikacije i na lokalnom računaru i na webserveru. Na slici je otvorena kartica overview gde se vidi pregled istorije izmena i trenutna podešavanja vezano za aplikaciju.Više detalja o ovome pogledajte u videu. Preko Deploy kartice, može se povezati pipeline sa repozitorijumom na GitHub-u i omogućiti ažuriranje promena u aplikaciji u skladu sa promenama na GitHub-u. Takođe se definiše automatsko ili ručno razvijanje aplikacije, odnosno njene odabrane grane nag it aplikaciji koja je zadužena za kontrolu različitih verzija u toku razvoja aplikacije. Podrazumevana grana je Master(Branch). Sledeća slika prikazuje izgled Deploy kartice:
Slika 5: Heroku platforma-Kartica Razvoj (Deploy)
I u nastavku drugi deo webstrane:
Slika 6: Heroku platforma-Kartica Razvoj (Deploy), 2. deo
Promenu imena aplikacije, brisanje, dodavanje konfiguracionih promenljivih , podešavanje programskog paketa, url adresu na github-u možemo upravljati na kartici settings:
Slika 7: Heroku platforma-Kartica podešavanja(Settings)
Da bi aplikacija na lokalu mogla povezati sa kreiranom aplikacijom na server i daljinski razvijati preko command prompt-a na lokalnom računaru, potrebno je instalirati Heroku CLI, i Git.
Instalacija git-a
Odgovarajući instaler za git se može preuzeti sa git-scm.com/download/winTo je program koji omogućava komunikaciju između udaljenog servera i lokalnog foldera (repozitorijuma). To je zapravo version control system.
Drugi način je da se instalira github desktop aplikacija, koja onda instalira i git: desktop.github.com
Git remote je veryija repozitorijuma koji se nalazi na heroku serveru koji je povezan sa lokalnim(na lokalnom računaru). Da bi ovo kreirali u command prompt-u treba otkucati:
heroku create
ili
heroku create logo_kreator
U prvom slučaju će se kreirati aplikacija na serveru pod nasumično dodeljenim imenom. U drugom slučaju tačno je određeno kreirano ime aplikacije na udaljenom serveru. Da bi smo proverili da li postoji daljinska veza lokalne i verzije na serveru kucamo:
git remote -v
Ako je ova veza uspešno kreirana onda prebacujemo fajlove na server po master grani:
git push heroku master
Ovo isto se može uraditi i korišćenjem windows interfejsa na sledeći način. U fajl eksploreru dovesti do foldera repozitorijuma i onda desni klik na folder projekta, pa kliknuti u okviru kontekst menija na komandu Git commit ->master:
Slika 8: Razvijanje web aplikacije na heroku platformi-Tortoise Git
Kreiranje daljinskog sa već kreirane aplikacije na serveru koja još nije povezana sa aplikacijom na lokalnom računaru
Ovo se može povezati komandom u command promptu u okviru foldera projekta: Prvo se moramo ulogovati
heroku login
a zatim:
heroku git:remote -a logo_kreator
Pokretanje aplikacije na udaljenom serveru
Da bi sada pokrenuli aplikaciju na udaljenom serveru kao i na lokalu treba otkucati:
heroku open
Podešavanje aplikacije na heroku serveru i povezivanje sa github-om
Na web strani dashboard.heroku.com/appsMožemo videti aplikacije koje razvijamo na heroku. Da bi one bile povezane sa repozitorijumom na github-u, potrebno je kreirati pipeline i ubaciti aplikaciju u isti. Pipeline se po vezuje sa određenim repozitorijumom na github-u.
Slika 9: Razvijanje web aplikacije na heroku platformi-Aplikacije
Na slici se vide dva pipeline koji su povezani sa dva različita repozitorijuma na github-u. Ako na github-u ti repozitorijumi nisu kreirani onda ih prethodno treba kreirati. Potrebno je registrovati se na github.com , a zatim se ulogovati. Posle kreiranja 2 repozitorijuma:
Slika 10: Razvijanje web aplikacije na heroku platformi-GitHub
Podešavanje pipeline na heroku
Dodate su dve aplikacije u pipeline pod nazivom simulacije, na pozornicu(stage):
Slika 11: Razvijanje web aplikacije na heroku platformi-faze
Koristimo kolačiće da bismo vam pružili najbolje moguće iskustvo. Takođe nam omogućavaju da analiziramo ponašanje korisnika kako bismo stalno poboljšavali veb lokaciju za vas.