||

Konfiguracja środowiska Django (Linux – Apache2, MySQL) – cz. 1

Robisz aplikację w Django ale po pewnym czasie stwierdzasz, że to już ten moment by wdrożyć ją na produkcję lub chociaż zrobić środowisko „stage” by pokazać ją klientowi? Znam to aż za dobrze – dlatego przygotowałem wprowadzenie do konfiguracji.

Zacznijmy od krótkiego wprowadzenia czym są wymienione aplikacje:

  • Apache2 – jest jednym z szeroko stosowanych serwerów HTTP w internecie, oferującym przede wszystkim stosunkowo prostą konfigurację.
  • MariaDB – projekt założony przez programistów pracujących przy popularnym serwerze bazodanowym – MySQL. Jest on „forkiem” MySQLa rozbudowanym o nowe funkcje i zwiększone bezpieczeństwo jak i optymalizację.
  • Django – framework w języku Python, dzięki któremu tworzenie aplikacji internetowych jest bardzo uproszczone choćby dzięki obsłudze aplikacji Django Admin umożliwiającej zarządzanie danymi.

Aby rozpocząć potrzebujemy najpierw maszynę (do wyboru czy to VPS, czy to serwer dedykowany a może serwer wirtualny stworzony przez Virtualbox).

Moje środowisko wygląda następująco:

  • Debian 12 (Bookworm)
  • Pamięć RAM: 4 GB
  • Procesor: 2 vCore x 2 GHz
  • Dysk: 32 GB

Co potrzebujemy zainstalować?

  • Serwer WEB: Apache2 (apache2)
  • Serwer bazodanowy: MariaDB (mariadb-server)
  • Klient serwera baz danych MariaDB (mariadb-client)
  • Interpreter: Python 3.12 (python3)
  • Menadżer pakietów PIP 3 dla Python (python3-pip)
  • Moduł Python 3 Virtual Environment (python3-venv)
  • Moduł Python 3 Gunicorn – do obsługi Gunicorn przez Python 3 (python3-gunicorn)
  • certbot (jeżeli chcemy mieć certyfikat SSL a maszyna ma publiczny adres IP)
  • python3-certbot-apache – umożliwi nadawanie certyfikatów SSL bezpośrednio do serwera WEB
  • libmariadb-dev (umożliwi korzystanie z bazy danych MySQL)
  • gunicorn – do uruchomienia aplikacji w tle

To wstępnie wszystko. A więc – zaczynamy!

  1. Logujemy się na użytkownika mającego dostęp do sudo lub pełne uprawnienia systemowe (root)
  2. Wpisujemy:
    sudo apt update
  3. Po aktualizacji listy paczek wpisujemy:
    sudo apt upgrade -y
  4. Po aktualizacji samych paczek możemy przejść do instalacji potrzebnych paczek:
    sudo apt install apache2 mariadb-server mariadb-client libmariadb-dev python3 python3-pip python3-venv python3-gunicorn gunicorn certbot python3-certbot-apache
  5. Jak już zainstalują się wszystkie potrzebne nam paczki włączamy potrzebne moduły Apache2
    sudo a2enmod proxy proxy_http headers rewrite
  6. Tworzymy użytkownika oraz bazę danych:
    – logujemy się do serwera MySQL (MariaDB):
    sudo mysql
    – tworzymy użytkownika django:
    create user 'django'@'localhost' identified by 'Dj@ng0';
    – tworzymy bazę danych django:
    create database django; 
    – nadajemy uprawnienia do bazy django dla użytkownika django:
    grant all privileges on django.* to django@localhost;
    – czyścimy pamięć uprawnień i wychodzimy z konsoli mysql (komenda quit)
    flush privileges;
  7. Przejdźmy teraz do instalacji projektu Django. Dla większego bezpieczeństwa nie instalujemy go na użytkowniku root tylko na oddzielnym użytkowniku. Stwórzmy go więc:
    adduser django --disabled-password --gecos "Django"
  8. Logujemy się na utworzonego użytkownika i tworzymy wirtualne środowisko (Virtual Environment)
    su - django; python3 -m venv .venv
  9. Uruchamiamy utworzone środowisko
    source .venv/bin/activate
  10. Instalujemy Django oraz potrzebne paczki zależności:
    python -m pip install Django python-dotenv mysqlclient
    django-admin startproject django_space
  11. Przechodzimy do folderu z projektem i robimy zrzut użytych paczek do pliku requirements.txt
    cd django_space; python -m pip freeze > requirements.txt
  12. Tworzymy plik .env przez edytor tekstu, w którym zawrzemy podstawowe dane do bazy:
    DB_HOST=localhost
    DB_USER=django
    DB_PASS=Dj@ng0
    DB_NAME=django
  13. Przechodzimy do edycji ustawień projektu. Wchodzimy do pliku django_space/settings.py.
    – Dodajemy na początku pliku (pod from pathlib import path):
    from dotenv import load_dotenv
    load_dotenv()
    Dzięki temu inicjujemy zaczytanie konfiguracji z pliku .env
    – Dodajemy nazwę strony w liście „ALLOWED_HOSTS”
    ALLOWED_HOSTS = ['localhost', 'django.mojastrona.pl']
    – Zmieniamy konfigurację dotyczącą bazy danych. Zmieniamy:
    'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': BASE_DIR / 'db.sqlite3'
    }
    Na:
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': os.getenv('DB_NAME'),
    'USER': os.getenv('DB_USER'),
    'PASSWORD': os.getenv('DB_PASS'),
    'HOST': os.getenv('DB_HOST'),
    'PORT': 3306
    }
    – Zmieniamy strefę czasową oraz ustawienia językowe:
    LANGUAGE_CODE="pl-pl"
    TIME_ZONE = "Europe/Warsaw"
  14. Zapisujemy zmiany.
  15. Uruchamiamy migrację do bazy danych – utworzy ona podstawowe tabele używane przez Django:
    python manage.py migrate

Na tym kończymy część pierwszą.

Jeżeli uważasz wpis za przydatny – postaw wirtualną kawę! 🙂

Podobne wpisy

Dodaj komentarz