Django i razvoj
Docker i Django: objava aplikacije na Linux serveru
Osnove sigurnog postavljanja Django aplikacije u Dockeru: servis, baza, proxy, tajne i backup.
Datasoft · · 4 min čitanjaAžurirano:
Docker može pojednostavniti isporuku Django aplikacije tako da se aplikacija i njezine ovisnosti pakiraju u predvidljivo okruženje. Međutim, uspješna naredba docker compose up ne znači da je sustav spreman za produkciju. Treba riješiti mrežu, tajne, pohranu, nadzor, migracije i backup.
Što staviti u kontejnere?
Česta arhitektura uključuje Django aplikacijski servis, PostgreSQL bazu, po potrebi Redis ili broker zadataka, Celery worker i reverse proxy poput Nginxa. Svaki servis ima zasebne resurse, logove i mrežna pravila. Kontejneri olakšavaju ponovljivost, ali nisu automatski sigurnosna izolacija usporediva s zasebnim virtualnim strojevima.
Prije implementacije definirajte koje podatke treba trajno čuvati. PostgreSQL baza i korisnički privici ne smiju ovisiti o privremenom datotečnom sustavu aplikacijskog kontejnera. Koristite odgovarajuće volume i plan sigurnosnih kopija.
Produkcijski Django nije razvojni server
Django runserver služi razvoju. Za produkciju se koristi primjeren WSGI ili ASGI server, primjerice Gunicorn ili drugi kompatibilan servis, iza reverse proxyja. Postavite DEBUG=False, ALLOWED_HOSTS, HTTPS, sigurne kolačiće i zaštitu tajni. Pokrenite python manage.py check --deploy uz produkcijsku konfiguraciju kao jednu od provjera.
Statičke datoteke obradite namjenskim postupkom, kao što je collectstatic, i poslužujte ih preko odgovarajućeg sloja. Korisnički uploadi su nepouzdani sadržaj i trebaju kontrolu pristupa i sigurno posluživanje.
Docker Compose i mreže
Compose može opisati kako se servisi pokreću zajedno, kako ovise jedni o drugima i koje volume koriste. Bazu i Redis u pravilu nemojte objavljivati na svim javnim mrežnim sučeljima ako ih koriste samo unutarnji servisi. Izložite samo nužne ulazne portove, najčešće preko proxyja.
Provjerite da se servisi automatski oporavljaju nakon restarta hosta, ali nemojte pretpostaviti da depends_on sam jamči spremnost baze za upite. Koristite healthcheckove, ispravne retry mehanizme i jasan postupak inicijalizacije.
Nadogradnje i rollback
Sliku aplikacije vežite uz određenu verziju, a ne isključivo uz nepromjenjivi naziv latest. Prije objave testirajte novu sliku i plan migracija baze. U produkciji se kod može vratiti na prethodnu sliku, ali obrisani podaci ili nekompatibilna migracija neće se sami vratiti. Zbog toga backup i kompatibilnost sheme ostaju ključni.
Logove šaljite u odgovarajući sustav i postavite rotaciju kako disk ne bi bio ispunjen. Pratite zdravlje aplikacije, baze i radnika, a ne samo status samog kontejnera.
Kada Docker donosi vrijednost?
Ako imate više servisa, razvojno i produkcijsko okruženje te redovite objave, Docker može smanjiti razlike među instalacijama. Za vrlo jednostavnu aplikaciju klasičan sistemski servis može biti jednako dobar. Odaberite pristup koji vaš tim može pouzdano održavati, dokumentirati i vratiti u rad nakon kvara.
Primjer sigurnog prijelaza na kontejnere
Postojeća Django aplikacija radi kao sistemski servis. Tim želi uvesti Docker radi ponovljivih objava. Prvo definira sliku aplikacije i provjerava da su baza i privici izvan privremenog prostora kontejnera. Zatim testira pokretanje servisa, rad migracija, slanje e-pošte i sigurnosne kopije. Tek kada je novo okruženje uspoređeno sa starim, može se planirati migracija produkcije.
Posebno treba provjeriti mrežno izlaganje. Ako PostgreSQL ili Redis rade u Compose mreži, nema potrebe da njihovi portovi budu javno objavljeni. Proxy ostaje jedina javna ulazna točka, a aplikacijski računi dobivaju najmanje potrebne ovlasti.
Česta pitanja
Je li Docker zamjena za VPS? Ne. Docker može raditi na VPS-u, fizičkom serveru ili drugim podržanim platformama.
Rješava li Docker backup? Ne. Volumi i baza trebaju zaseban postupak kopiranja i obnove.
Treba li Kubernetes za jedan projekt? Obično ne. Jednostavniji Compose ili sistemski servisi često su održiviji za manji sustav.
Što mora biti provjereno prije Docker produkcije?
Kontejnerska arhitektura korisna je samo ako se može pouzdano održavati. Ne treba optimizirati broj kontejnera radi dojma moderne infrastrukture. Važnije je znati gdje su podaci, kako se servis podiže nakon restarta i tko provjerava uspješnost novih verzija. To je posebno važno za manje timove koji nemaju zasebnu DevOps službu.
- Jesu li aplikacijska slika i sve važne ovisnosti vezane uz kontrolirane verzije umjesto nepredvidivih oznaka?
- Nalaze li se PostgreSQL podaci i korisnički privici na trajnoj pohrani s dokumentiranim postupkom sigurnosnog kopiranja?
- Jesu li interna mreža i javno izloženi portovi postavljeni tako da baza i broker nisu nepotrebno dostupni internetu?
- Pokreće li se Django kroz odgovarajući produkcijski WSGI ili ASGI server uz ispravne HTTPS postavke?
- Jesu li migracije,
collectstatic, zdravlje workera i rad proxyja obuhvaćeni ponovljivim postupkom objave? - Može li se usluga obnoviti na drugom serveru koristeći dokumentiranu konfiguraciju, odgovarajuće tajne i provjeren backup?
Dobar Docker deployment onaj je koji drugi administrator može razumjeti, sigurno nadograditi i ponovno pokrenuti nakon incidenta.
