Zintegrowany projekt aplikacji django na kontenerach dockera
- 🧐 O projekcie
- 📰 Założenia projektowe
- 🧑🔬 Technologia i metodyka
- 🚀 Uruchomienie
- 🌎 Endpointy
- 📜 Uwagi koncowe
Projekt aplikacji django na kontenerach dockera wraz z zintegrowana baza postgres oraz serwerem nginx
- Utworzenie spójnego modelu konteneryzacji z uwzględnieniem plików
Dockerfilew osobnych folderach dla każdego kontenera. - Utworzenie i skonfigurowanie bazy danych postgres na osobnym kontenerze dla aplikacji i testów
- Utworzenie kontenera dla serwera upstreamowego Nginx oraz wystawienie za jego pomoca dwuch serwerów - HTTP oraz HTTPS
- Dodatkowa konfiguracja serwera nginx - dodanie certyfikatów SSL oraz konfiguracja proxy-reverse
- Implementacja zmiennych środowiskowych w pliku
docker-compose.ymlza pomocą których, aplikacja oraz zależne od niej kontenery będą wstępnie prekonfigowalne na etapie developingu oraz wdrażania np. dla rozwiazania chmurowego - Utworzenie modułu inicjującego dla aplikacji Django celem radzenia sobie z typowymi operacjami na pliku
manage.py
- Przekonfigurowanie modelu logowania za pomocą email i hasła
- Dostarczenie przeglądarki API
- Python 3.8 z django
- Baza Postgres dla django
- Adminer
- Upstream server nginx
- Aplikacja wykonana wg metodyki TDD.
- Krycie testami na poziomie ~90%
- Projekt został zintegrowany z Travis CI -> https://travis-ci.org/github/coconutcake/djangorized
- Wersje zależności requirements -> https://requires.io/github/coconutcake/djangorized/requirements/?branch=main
- Projekt wykorzystuje konteneryzacje docker wraz composerem do uruchomienia środowisk tj: aplikacji django na pythonie 3.8, bazy danych postgresql, aplikacji adminer, oraz serwer upstream nginx
- Model usera został przebudowany w celu umozliwienia logowania za pomocą email
- W projekcie wykorzystano bibliteke wait-for-it w celu kolejkowania uruchamianych kontenerów
- Folder ./initial miescie pliki inicjujace w tym ustawienia nginxa,aplikacji django
- dostepna jest przegladarka API (Swagger)
- Za pomocą
docker-compose.ymlmożliwa jest konfiguracja stacku za pomocą zmiennych środowiskowych dla poszczególnych usług:
-
postgres:
# Nazwa bazy danych dla aplikacji POSTGRES_DB: app # Nazwa Usera django do logowania na baze postgres POSTGRES_USER: django_app # Hasło Usera aplikacji django do logowania na baze postgres POSTGRES_PASSWORD: asdasd123 -
djangoapp:
# Adres serwera django ADDRESS=0.0.0.0 # Port servera django PORT=8877 # Adres servera nginx na którego bedą wysyłane zapytania (Swagger), zmień na adres cloudowy jeśli pracujesz na chmurze! SERVER_URL=https://127.0.0.1:5555/ # Silnik bazodanowy dla django DB_ENGINE=django.db.backends.postgresql # Nazwa bazy danych postgres DB_NAME=app # Nazwa Usera django do logowania na baze postgres DB_USER=django_app # Hasło Usera aplikacji django do logowania na baze postgres DB_PASSWORD=asdasd123 # Adres kontenera z bazą danych DB_ADDRESS=postgres # Port bazy postgres DB_PORT=5432 # Nazwa bazy do testów DB_TESTS=tests # Typ uruchomianego serwera opcje: developer, production APPSERVER=developer -
nginx:
# Adres aplikacji django, która zostanie upstremowana do servera nginx UPSTREAM_APP_URL=djangoapp:8877 # Proxy pass PROXY_PASS=djangoapp # Port wystawianego servera HTTP HTTP_SERVER_PORT=8833 # Port wystawianego servera HTTPS HTTPS_SERVER_PORT=5555 # Ip lub domena severa (zmiana niekonieczna) SERVER_NAME=default_server_ip
-
Zainstaluj biblioteke
libseccomp2Mozesz doswiadczyc problemow z odpaleniem bazy postgres - (blad segmentacji 11). Aby rozwiazac ten problem doinstaluj konkrente biblioteki
libseccomp2:Zdalne:
wget http://ftp.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.5.1-1_armhf.deb && sudo dpkg -i libseccomp2_2.5.1-1_armhf.debBiblioteka jest wrzucona rowniez lokalnie w glownym folderze.
-
Przygotuj subsystem
Celem przygotowanie subsystemu z linuxem jest unikniecie problemow z kompatybilnoscia kodu, ktory jest zgodny z linuxowym. Dlatego pierwszym krokiem bedzie sprawdzenie czy mamy zainstalowany pakiet obslugujace te maszyny.
Powershell as admin:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-LinuxZainstaluj Debian:
wsl.exe --install -d DebianPrzekonwertuj wsl 1 na wsl 2:
wsl --set-version Debian 2Sprawdz zainstalowana wersje:
wsl -l -vJesli wersja wsl wskazuje na 2, przejdz do nastepnrgo kroku
-
Przygotowanie uzytkownika
Uruchom maszyne:
wsl --distribution Debian -
Zintegruj obsluge dockera z wsl:
-
Skonfiguruj VSCODE
Zainstaluj Docker i SSH na remote:
CTRL + SHIFT + X > Docker -
Podlacz do DEBIAN wsl
CTRL + SHIFT + P > wsl di -
Ustaw dostepy usera do docker.socket
Dodaj go do grupy docker:
sudo usermod -aG docker $USERNadaj dodatkowe prawa dla docker.socket:
sudo chmod 666 /var/run/docker.sock
-
Wykonaj klona jesli masz juz zainstalowanego dockera:
git clone https://github.com/coconutcake/djangorized.git -
Po pobraniu klona, przejdz do folderu i zbuduj obrazy poleceniem:
TIP: Mozesz wylaczyc trybbuildkitaby wyswietlic tryb debugowania:export DOCKER_BUILDKIT=0 && export COMPOSE_DOCKER_CLI_BUILD=0docker-compose up --buildAplikacja powinna być dostępna.
-
Aby zalogować sie na panel administracyjny należy pierw utworzyć konto superadmina.
docker exec -it djangoapp sh -c "python3 app/manage.py createsuperuser" -
Aby sworzyc token dla utworzonego usera - USER to login (email)
docker exec -it djangoapp sh -c "python3 app/manage.py drf_create_token USER"TIP: Możliwe jest równiez utworzenie tokena przez wbudowany CMS -
Zgraj pliki
static:docker exec -it djangoapp sh -c "python app/manage.py collectstatic"
- 🔐 HTTPS(nginx) -> https://127.0.0.1:5555/
- 🔓 HTTP(nginx) -> https://127.0.0.1:8833/
- Dla serwera lokalnego ADRES moze być adresem petli zwrotnej - 127.0.0.1, dla cloudowego bedzie do adres servera cloudowego. Pamietaj o konfiguracji
docker-compose.ymlopisanej w sekcji Konfiguracja. - Rekomendowane jest ustawienie maskarady
harpin natw celu uzywania adresu zewnetrznego. - pole <(pk)> w adreach to pk obiektu do ktorego sie odwołujemy





