Django Python Framework installeren op CentOS 8

Django is een gratis, open-source en hoog-niveau web raamwerk dat gebruikt wordt voor het ontwikkelen van Python Web Applicaties. Het wordt geleverd met een set gereedschappen die je helpt veilige en schaalbare webapplicaties te bouwen. Het belangrijkste doel is om het maken van complexe toepassingen te vergemakkelijken en zorgt voor de interne structuur.

In deze zelfstudie leren we hoe je Django installeert en Nginx configureert als reverse proxy voor Django op CentOS 8.

Vereisten

  • Een server die CentOS 8 draait.
  • Een root wachtwoord is op je server ingesteld.

Installeer de vereiste pakketten

Django is een op Python gebaseerd raamwerk, dus je zult Python en PIP in je systeem moeten installeren. Je kunt ze installeren door het volgende commando uit te voeren:

dnf install python36 python3-pip -y

Als beide pakketten geïnstalleerd zijn, kun je verder gaan met de volgende stap.

Installeer Django

Je kunt Django installeren met het PIP commando zoals hieronder te zien is:

pip3 install Django

Na de installatie van Django kun je de versie van Django controleren met het volgende commando:

django-admin --version

Je zou de Django versie moeten zien in de volgende uitvoer:

3.0.3

Maak een Django Project

Op dit punt is Django geïnstalleerd. Nu is het tijd om een nieuwe Django applicatie te maken.

Je kunt een nieuwe Django applicatie maken met het django-admin commando binnen de /opt directory, zoals hieronder te zien is:

cd /opt
django-admin startproject djangoproject

Als het django-project is gemaakt, verander je de directory in djangoproject en migreer je de veranderingen met het volgende commando:

cd djangoproject
python3 manage.py migrate

Je zou de volgende uitvoer moeten krijgen:

Operations to perform:
  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 sessions.0001_initial... OK

Vervolgens moet je een admin gebruikersaccount aanmaken voor het beheer van het Django project. Je kunt die aanmaken met het volgende commando:

python3 manage.py createsuperuser

Je wordt gevraagd je gebruikersnaam, e-mail en wachtwoord op te geven. Je kunt ze naar eigen keuze opgeven zoals hieronder te zien is:

Username (leave blank to use 'root'): dadmin
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Als je klaar bent, kun je verder gaan met de volgende stap.

Start de Django toepassing

Standaard kan de Django applicatie niet benaderd worden vanaf de remote hosts. Je zult Django dus moeten toestaan voor externe hosts. Je kunt dat doen door het IP van je server toe te voegen in settings.py:

nano /opt/djangoproject/djangoproject/settings.py

Verander de volgende regel:

ALLOWED_HOSTS = ['your-server-ip']

Sla het bestand op en sluit het. Start dan de Django applicatie met het volgende commando:

cd /opt/djangoproject
python3 manage.py runserver 0.0.0.0:8000

Je zou de volgende uitvoer moeten zien:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
March 03, 2020 - 02:31:19
Django version 3.0.3, using settings 'djangoproject.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

Django application is now started and runs on port 8000. 

Op dit punt is de Django toepassing nu gestart en draait op poort 8000. Je kunt nu verder gaan met de volgende stap.

Configureer SELinux en Firewall

Vervolgens moet je poort 8000 en 80 via firewalld toestaan. Je kunt ze toestaan met het volgende commando:

firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

Configureer vervolgens SELinux met het volgende commando:

setsebool httpd_can_network_connect on -P

Als je klaar bent, kun je verder gaan met de volgende stap.

Toegang tot de Django toepassing

Je kunt de Django applicatie benaderen door de URL http://your-server-ip:8000 te bezoeken. Je zou de volgende pagina moeten zien:

Django toepassing

Je kunt ook de Django admin interface benaderen via de URL http://your-server-ip:8000/admin. Je zou de volgende pagina moeten zien:

Django admin login

Geef je admin gebruikersnaam en wachtwoord op en klik op de knop Log in. Je zou de volgende pagina moeten zien:

Django admin dashboard

Installeer Nginx en Gunicorn

In dit gedeelte zullen we Gunicorn installeren om Django service te maken en te beheren, en Nginx om Django applicatie te serveren.

Installeer eerst Nginx met het volgende commando:

dnf install nginx -y

Installeer vervolgens Gunicorn met het PIP commando zoals hieronder:

pip3 install gunicorn

Zodra beide pakketten geïnstalleerd zijn, start je de Nginx dienst en schakel je hem in om te starten na een herstart van het systeem met het volgende commando:

systemctl start nginx
systemctl enable nginx

Verander vervolgens het eigendom van de map /opt/djangoproject in Nginx zoals hieronder getoond:

chown -R nginx:nginx /opt/djangoproject

Maak een Systemd dienstbestand voor Django

Maak vervolgens een systemd dienstbestand om de Django dienst te beheren met het volgende commando:

nano /etc/systemd/system/django.service

Voeg de volgende regels toe:

[Unit]
Description=django daemon
After=network.target

[Service]
User=nginx
Group=nginx
WorkingDirectory=/opt/djangoproject
ExecStart=/usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:application

[Install]
WantedBy=multi-user.target

Bewaar en sluit het bestand en herlaad dan de systemd daemon met het volgende commando:

systemctl daemon-reload

Start vervolgens de Django dienst en zet hem aan om te starten na herstarten van het systeem met het volgende commando:

systemctl start django
systemctl enable django

Je kunt nu de status van de Django dienst controleren met het volgende commando:

systemctl status django

Je zou de volgende uitvoer moeten zien:

? django.service - django daemon
   Loaded: loaded (/etc/systemd/system/django.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-02 22:27:51 EST; 3min 32s ago
 Main PID: 960 (django)
    Tasks: 4 (limit: 25028)
   Memory: 95.2M
   CGroup: /system.slice/django.service
           ??960 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??964 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??965 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>
           ??966 /usr/bin/python3.6 /usr/local/bin/gunicorn --workers 3 --bind unix:/opt/djangoproject/djangoproject.sock djangoproject.wsgi:a>

Mar 02 22:27:51 centos8 systemd[1]: Started django daemon.
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Starting django 20.0.4
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Listening at: unix:/opt/djangoproject/djangoproject.sock (960)
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [960] [INFO] Using worker: sync
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [964] [INFO] Booting worker with pid: 964
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [965] [INFO] Booting worker with pid: 965
Mar 02 22:27:52 centos8 django[960]: [2020-03-02 22:27:52 -0500] [966] [INFO] Booting worker with pid: 966
h pid: 966

Configureer Nginx voor Django

Vervolgens moet je Nginx configureren als een reverse proxy voor Django. Maak daartoe een nieuw Nginx configuratiebestand aan met het volgende commando:

nano /etc/nginx/conf.d/django.conf

Voeg de volgende regels toe:

server {
    listen 80;
    server_name your-server-ip

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /opt/djangoproject;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/opt/djangoproject/djangoproject.sock;
    }
}

Sla het bestand op en sluit het als je klaar bent. Test dan de nginx op een eventuele syntaxfout met het volgende commando:

nginx -t

Als alles in orde is, zou je de volgende uitvoer moeten krijgen:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Herstart vervolgens de Nginx dienst om de veranderingen door te voeren:

systemctl start nginx

Je kunt de Nginx ook verifiëren met het volgende commando:

systemctl status nginx

Je zou de volgende uitvoer moeten krijgen:

? nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-03-02 22:28:13 EST; 4min 14s ago
  Process: 984 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 982 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 980 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 985 (nginx)
    Tasks: 3 (limit: 25028)
   Memory: 5.5M
   CGroup: /system.slice/nginx.service
           ??985 nginx: master process /usr/sbin/nginx
           ??986 nginx: worker process
           ??987 nginx: worker process

Mar 02 22:28:12 centos8 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 02 22:28:12 centos8 nginx[982]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Mar 02 22:28:12 centos8 nginx[982]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Mar 02 22:28:13 centos8 systemd[1]: Started The nginx HTTP and reverse proxy server.

Je kunt nu je Django applicatie benaderen met de URL http://your-server-ip.

Conclusie

In deze gids leerden we hoe Django te installeren op CentOS 8. We leerden ook hoe je Gunicorn gebruikt om de Django dienst te maken en te beheren en Nginx in te stellen als reverse proxy om Django toepassing te serveren.