Django je bezplatný a open source webový vývojový rámec napsaný v Pythonu. Používá se pro vývoj složitých a databázově řízených aplikací Pythonu. Dodává se se sadou skriptů Python pro vytváření projektů Python. Lze jej spustit na jakémkoli operačním systému, na kterém lze spustit Python, včetně Windows, macOS, Linux/Unix a Solaris. Pomáhá vývojářům psát méně kódu a vytvářet nové webové stránky v krátkém čase.
V tomto tutoriálu vysvětlím, jak nastavit Django ve virtuálním prostředí Pythonu pomocí databáze PostgreSQL na Debianu 11. Poté nainstalujeme a nakonfigurujeme Nginx jako reverzní proxy pro Django.
Předpoklady
- Server se systémem Debian 11.
- Platný název domény s adresou IP vašeho serveru.
- Na serveru je nakonfigurováno heslo uživatele root.
Začínáme
Než začnete, je dobré aktualizovat systémové balíčky na nejnovější verzi. Můžete to udělat pomocí následujícího příkazu:
apt-get update -y
Jakmile jsou všechny balíčky aktualizovány, nainstalujte další nástroje Pythonu a balíček Nginx pomocí následujícího příkazu:
apt-get install python3-pip python3-dev libpq-dev curl nginx -y
Jakmile jsou všechny požadované balíčky nainstalovány, můžete přejít k dalšímu kroku.
Instalovat databázový server PostgreSQL
Zde použijeme PostgreSQL jako databázový backend. Pojďme jej tedy nainstalovat pomocí následujícího příkazu:
apt-get install postgresql postgresql-contrib -y
Jakmile je PostgreSQL nainstalován, připojte se k prostředí PostgreSQL pomocí následujícího příkazu:
su - postgres
psql
Dále vytvořte databázi a uživatele pro Django pomocí následujícího příkazu:
CREATE DATABASE django;
CREATE USER django WITH PASSWORD 'password';
Dále udělte některé požadované role pomocí následujícího příkazu:
ALTER ROLE django SET client_encoding TO 'utf8';
ALTER ROLE django SET default_transaction_isolation TO 'read committed';
ALTER ROLE django SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE django TO django;
Dále ukončete prostředí PostgreSQL pomocí následujícího příkazu:
\q
exit
V tuto chvíli je databáze PostgreSQL připravena pro Django. Nyní můžete přejít k dalšímu kroku.
Vytvoření virtuálního prostředí Python
Dále budete muset vytvořit virtuální prostředí Pythonu, abyste mohli vytvořit projekt Django.
Nejprve upgradujte balíček PIP na nejnovější verzi pomocí následujícího příkazu:
pip3 install --upgrade pip
Dále ověřte verzi PIP pomocí následujícího příkazu:
pip --version
Ukázkový výstup:
pip 21.2.4 from /usr/local/lib/python3.9/dist-packages/pip (python 3.9)
Dále nainstalujte balíček virtuálního prostředí pomocí následujícího příkazu:
pip3 install virtualenv
Dále vytvořte adresář pro projekt Django a vytvořte virtuální prostředí Django:
mkdir ~/djangoapp
cd ~/djangoapp
virtualenv djangoenv
Dále aktivujte virtuální prostředí Django pomocí příkazu níže:
source djangoenv/bin/activate
Dále nainstalujte balíčky Django, Gunicorn a další pomocí následujícího příkazu:
pip install django gunicorn psycopg2-binary
V tomto okamžiku je Django nainstalován ve virtuálním prostředí Pythonu. Nyní můžete přejít k dalšímu kroku.
Instalovat a konfigurovat Django
Django poskytuje django-admin.py skript pro vytvoření projektu. Pro vytvoření projektu Django můžete spustit následující příkaz:
django-admin.py startproject djangoapp ~/djangoapp
Dále budete muset upravit soubor settings.py a definovat nastavení databáze:
nano ~/djangoapp/djangoapp/settings.py
Na následujícím řádku změňte název své domény:
ALLOWED_HOSTS = ['django.example.com', 'localhost']
Odkomentujte výchozí backend databáze a přidejte nastavení databáze PostgreSQL:
#DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': BASE_DIR / 'db.sqlite3', # } #} DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'django', 'USER': 'django', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } }
Na konec souboru přidejte následující řádky:
STATIC_URL = '/static/' import os STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Uložte a zavřete soubor a poté migrujte počáteční schéma databáze do databáze PostgreSQL:
./manage.py makemigrations
./manage.py migrate
Ukázkový výstupL:
Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK
Dále vytvořte superuživatelský účet pro Django pomocí následujícího příkazu:
./manage.py createsuperuser
Nastavte své uživatelské jméno a heslo správce, jak je uvedeno níže:
Username (leave blank to use 'root'): dadmin Email address: [email protected] Password: Password (again): Superuser created successfully.
Dále shromážděte veškerý statický obsah do adresáře:
./manage.py collectstatic
Spusťte vývojový server Django
V tomto okamžiku je Django nainstalován a nakonfigurován. Nyní můžete spustit vývojový server Django pomocí následujícího příkazu:
./manage.py runserver 0.0.0.0:8000
Pokud je vše v pořádku, měli byste získat následující výstup:
Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). August 27, 2021 - 10:02:05 Django version 3.2.6, using settings 'djangoapp.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
Nyní otevřete webový prohlížeč a otevřete svůj projekt Django pomocí adresy URL http://django.example.com:8000/admin/ . Budete přesměrováni na přihlašovací stránku Django:
Zadejte své administrátorské uživatelské jméno, heslo a klikněte na Přihlásit . Na následující stránce byste měli vidět řídicí panel Django:
Nyní se vraťte do svého terminálu a stiskněteCTRL + C zastavit vývojový server Django.
Ověřit Djanga pomocí Gunicorn
Dále budete také muset vyzkoušet, zda Gunicorn může sloužit Django nebo ne. Django můžete spustit pomocí serveru Gunicorn pomocí následujícího příkazu:
gunicorn --bind 0.0.0.0:8000 djangoapp.wsgi
Pokud je vše v pořádku, měli byste získat následující výstup:
[2021-08-27 10:04:22 +0000] [47383] [INFO] Starting gunicorn 20.1.0 [2021-08-27 10:04:22 +0000] [47383] [INFO] Listening at: http://0.0.0.0:8000 (47383) [2021-08-27 10:04:22 +0000] [47383] [INFO] Using worker: sync [2021-08-27 10:04:22 +0000] [47384] [INFO] Booting worker with pid: 47384
Stiskněte CTRL + C pro zastavení serveru Gunicorn.
Dále deaktivujte z virtuálního prostředí Pythonu pomocí následujícího příkazu:
deactivate
Vytvoření souboru Systemd Service pro Gunicorn
Dále budete muset vytvořit servisní soubor systemd pro Gunicorn ke spuštění a zastavení aplikačního serveru Django.
Gunicorna můžete vytvořit pomocí následujícího příkazu:
nano /etc/systemd/system/gunicorn.socket
Přidejte následující řádky:
[Unit] Description=gunicorn socket [Socket] ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target
Uložte a zavřete soubor a poté vytvořte soubor služby pro Gunicorn:
nano /etc/systemd/system/gunicorn.service
Přidejte následující řádky, které odpovídají vaší cestě projektu Django:
[Unit] Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=root Group=www-data WorkingDirectory=/root/djangoapp ExecStart=/root/djangoapp/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock djangoapp.wsgi:application [Install] WantedBy=multi-user.target
Uložte a zavřete soubor a poté nastavte správná oprávnění k adresáři projektu Django:
chown -R www-data:root ~/djangoapp
Dále znovu načtěte démona systemd pomocí následujícího příkazu:
systemctl daemon-reload
Dále spusťte službu Gunicorn a povolte její spuštění při restartu systému:
systemctl start gunicorn.socket
systemctl enable gunicorn.socket
Dále zkontrolujte stav Gunicornu pomocí příkazu níže:
systemctl status gunicorn.socket
Měli byste získat následující výstup:
? gunicorn.socket - gunicorn socket Loaded: loaded (/etc/systemd/system/gunicorn.socket; disabled; vendor preset: enabled) Active: active (listening) since Fri 2021-08-27 10:05:46 UTC; 6s ago Triggers: ? gunicorn.service Listen: /run/gunicorn.sock (Stream) CGroup: /system.slice/gunicorn.socket Aug 27 10:05:46 debian11 systemd[1]: Listening on gunicorn socket.
Nakonfigurujte Nginx jako reverzní proxy pro Django
Dále budete muset nakonfigurovat Nginx jako reverzní proxy pro obsluhu Django.
Chcete-li tak učinit, vytvořte konfigurační soubor Nginx:
nano /etc/nginx/conf.d/django.conf
Přidejte následující řádky:
server { listen 80; server_name django.example.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /root/djangoapp; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }
Uložte a zavřete soubor a poté ověřte, zda Nginx neobsahuje nějakou chybu konfigurace:
nginx -t
Output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Nakonec restartujte službu Nginx, aby se změny projevily:
systemctl restart nginx
Chcete-li zkontrolovat stav Nginx, spusťte:
systemctl status nginx
Ukázkový výstup:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2021-08-27 10:06:59 UTC; 6s ago Docs: man:nginx(8) Process: 47494 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 47495 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 47496 (nginx) Tasks: 2 (limit: 2341) Memory: 2.5M CPU: 49ms CGroup: /system.slice/nginx.service ??47496 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??47497 nginx: worker process Aug 27 10:06:59 debian11 systemd[1]: Starting A high performance web server and a reverse proxy server... Aug 27 10:06:59 debian11 systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Aug 27 10:06:59 debian11 systemd[1]: Started A high performance web server and a reverse proxy server.
Nyní můžete přistupovat k aplikaci Django pomocí adresy URL http://django.example.com/admin . K aplikaci Django můžete také přistupovat pomocí adresy URL http://django.example.com/ .
Závěr
Gratulujeme! úspěšně jste nainstalovali aplikaci Django s Gunicorn a Nginx jako reverzní proxy. Nyní můžete začít nasazovat svou aplikaci Python pomocí rámce Django.