So verwenden Sie PostgreSQL mit Ihrer Django-Anwendung unter CentOS 7

Einführung

Django ist ein flexibles Framework zum schnellen Erstellen von Python-Anwendungen. Standardmäßig sind Django-Anwendungen so konfiguriert, dass Daten in einer kompakten SQLite-Datenbankdatei gespeichert werden. Während dies unter bestimmten Belastungen gut funktioniert, kann ein herkömmlicheres DBMS die Leistung in der Produktion verbessern.

In diesem Handbuch wird gezeigt, wie Sie PostgreSQL für Ihre Django-Anwendungen installieren und konfigurieren. Wir werden die erforderliche Software installieren, Datenbankanmeldeinformationen für unsere Anwendung erstellen und dann ein neues Django-Projekt starten und konfigurieren, um dieses Backend zu verwenden.

Voraussetzungen

Zu Beginn benötigen Sie eine saubere CentOS 7-Serverinstanz mit einem Benutzer ohne Rootberechtigung. Der Benutzer ohne Rootberechtigung muss mit "+ sudo +" - Berechtigungen konfiguriert sein. Weitere Informationen zum Einrichten finden Sie in unserem initial server setup guide.

Wenn Sie bereit sind fortzufahren, lesen Sie weiter.

Installieren Sie die Komponenten aus den CentOS- und EPEL-Repositorys

Unser erster Schritt wird die Installation aller Teile sein, die wir aus den Repositories benötigen. Wir werden + pip +, den Python-Paketmanager, installieren, um unsere Python-Komponenten zu installieren und zu verwalten. Wir werden auch die Datenbanksoftware und die zugehörigen Bibliotheken installieren, die für die Interaktion mit ihnen erforderlich sind.

Ein Teil der Software, die wir benötigen, befindet sich im EPEL-Repository, das zusätzliche Pakete enthält. Wir können dieses Repository einfach aktivieren, indem wir Folgendes binden:

sudo yum install epel-release

Wenn EPEL aktiviert ist, können wir die erforderlichen Komponenten installieren, indem wir Folgendes eingeben:

sudo yum install python-pip python-devel gcc postgresql-server postgresql-devel postgresql-contrib

Führen Sie die Erstkonfiguration von PostgreSQL durch

Nach der Installation müssen Sie die PostgreSQL-Datenbank initialisieren, indem Sie Folgendes eingeben:

sudo postgresql-setup initdb

Nachdem die Datenbank initialisiert wurde, können wir den PostgreSQL-Dienst starten, indem wir Folgendes eingeben:

sudo systemctl start postgresql

Nachdem die Datenbank gestartet wurde, müssen wir die Werte in einer der Konfigurationsdateien anpassen, die ausgefüllt wurden. Verwenden Sie Ihren Editor und den Befehl + sudo +, um die Datei jetzt zu öffnen:

sudo nano /var/lib/pgsql/data/pg_hba.conf

Diese Datei ist für die Konfiguration der Authentifizierungsmethoden für das Datenbanksystem verantwortlich. Derzeit ist es so konfiguriert, dass Verbindungen nur zugelassen werden, wenn der Systembenutzer mit dem Datenbankbenutzer übereinstimmt. Dies ist für lokale Wartungsaufgaben in Ordnung, aber in unserer Django-Instanz ist ein anderer Benutzer mit einem Kennwort konfiguriert.

Wir können dies konfigurieren, indem wir die beiden "+ host " - Zeilen am Ende der Datei ändern. Ändern Sie die letzte Spalte (die Authentifizierungsmethode) in " md5 +". Dies ermöglicht die Kennwortauthentifizierung:

. . .

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    all             all             127.0.0.1/32
IPv6 local connections:
#host    all             all             ::1/128                 ident
host    all             all             ::1/128

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Mit unseren neuen Konfigurationsänderungen müssen wir den Dienst neu starten. Wir werden auch PostgreSQL aktivieren, damit es beim Booten automatisch startet:

sudo systemctl restart postgresql
sudo systemctl enable postgresql

Erstellen Sie eine Datenbank und einen Datenbankbenutzer

Standardmäßig verwendet Postgres ein Authentifizierungsschema mit der Bezeichnung "Peer-Authentifizierung" für lokale Verbindungen. Wir konnten sehen, dass der "+ local" -Eintrag in der "+ pg_hba.conf" -Datei bearbeitet wurde. Grundsätzlich bedeutet dies, dass sich der Benutzer ohne weitere Authentifizierung anmelden kann, wenn der Benutzername des Betriebssystems des Benutzers mit einem gültigen Postgres-Benutzernamen übereinstimmt.

Während der Postgres-Installation wurde ein Betriebssystembenutzer mit dem Namen "+ postgres " erstellt, der dem administrativen Benutzer " postgres +" PostgreSQL entspricht. Wir müssen zu diesem Benutzer wechseln, um administrative Aufgaben auszuführen:

sudo su - postgres

Sie sollten sich jetzt in einer Shell-Sitzung für den Benutzer "+ postgres +" befinden. Melden Sie sich bei einer Postgres-Sitzung an, indem Sie Folgendes eingeben:

psql

Zunächst erstellen wir eine Datenbank für unser Django-Projekt. Jedes Projekt sollte aus Sicherheitsgründen eine eigene isolierte Datenbank haben. Wir werden unsere Datenbank in diesem Handbuch als "++" bezeichnen, aber es ist immer besser, etwas aussagekräftigeres auszuwählen:

CREATE DATABASE ;

Denken Sie daran, alle Befehle an einer SQL-Eingabeaufforderung mit einem Semikolon zu beenden.

Als Nächstes erstellen wir einen Datenbankbenutzer, mit dem wir eine Verbindung zur Datenbank herstellen und mit dieser interagieren. Stellen Sie das Passwort auf etwas Starkes und Sicheres ein:

CREATE USER  WITH PASSWORD '';

Anschließend ändern wir einige der Verbindungsparameter für den gerade erstellten Benutzer. Dies beschleunigt die Datenbankoperationen, sodass nicht bei jedem Verbindungsaufbau die richtigen Werte abgefragt und eingestellt werden müssen.

Wir setzen die Standardkodierung auf UTF-8, was Django erwartet. Wir setzen außerdem das Standard-Transaktionsisolationsschema auf "read commit", wodurch Lesevorgänge für nicht festgeschriebene Transaktionen blockiert werden. Zuletzt stellen wir die Zeitzone ein. Standardmäßig verwenden Ihre Django-Projekte "+ UTC":

ALTER ROLE  SET client_encoding TO 'utf8';
ALTER ROLE  SET default_transaction_isolation TO 'read committed';
ALTER ROLE  SET timezone TO 'UTC';

Jetzt müssen wir unseren Datenbankbenutzern nur noch Zugriffsrechte auf die von uns erstellte Datenbank gewähren:

GRANT ALL PRIVILEGES ON DATABASE  TO ;

Beenden Sie die SQL-Eingabeaufforderung, um zur Shell-Sitzung des postgres-Benutzers zurückzukehren:

\q

Beenden Sie die Benutzer-Shell-Sitzung "+ postgres", um zur normalen Benutzer-Shell-Sitzung zurückzukehren:

exit

Installieren Sie Django in einer virtuellen Umgebung

Nachdem unsere Datenbank eingerichtet ist, können wir Django installieren. Zur Verbesserung der Flexibilität werden wir Django und alle seine Abhängigkeiten in einer virtuellen Python-Umgebung installieren.

Sie erhalten das Paket "+ virtualenv +", mit dem Sie diese Umgebungen erstellen können, indem Sie Folgendes eingeben:

sudo pip install virtualenv

Erstellen Sie ein Verzeichnis für Ihr Django-Projekt. Gehen Sie anschließend in das Verzeichnis:

mkdir ~/
cd ~/

Wir können eine virtuelle Umgebung zum Speichern der Python-Anforderungen Ihres Django-Projekts erstellen, indem wir Folgendes eingeben:

virtualenv

Dies installiert eine lokale Kopie von Python und "+ pip " in ein Verzeichnis mit dem Namen "+" in Ihrem Projektverzeichnis.

Bevor wir Anwendungen in der virtuellen Umgebung installieren, müssen wir sie aktivieren. Sie können dies tun, indem Sie Folgendes eingeben:

source /bin/activate

Ihre Eingabeaufforderung ändert sich und zeigt an, dass Sie jetzt in der virtuellen Umgebung arbeiten. Es wird ungefähr so ​​aussehen: + () @: ~ / $ +.

Sobald Ihre virtuelle Umgebung aktiv ist, können Sie Django mit + pip + installieren. Wir werden auch das Paket + psycopg2 + installieren, mit dem wir die von uns konfigurierte Datenbank verwenden können:

pip install django psycopg2

Wir können jetzt ein Django-Projekt in unserem + myproject + Verzeichnis starten. Dadurch wird ein gleichnamiges untergeordnetes Verzeichnis erstellt, in dem sich der Code selbst befindet, und im aktuellen Verzeichnis wird ein Verwaltungsskript erstellt. Stellen Sie sicher, dass der Punkt am Ende des Befehls hinzugefügt wird, damit dies korrekt eingerichtet ist:

django-admin.py startproject  .

Konfigurieren Sie die Django-Datenbankeinstellungen

Nachdem wir ein Projekt haben, müssen wir es konfigurieren, um die von uns erstellte Datenbank zu verwenden.

Öffnen Sie die Einstellungsdatei für das Django-Hauptprojekt, die sich im untergeordneten Projektverzeichnis befindet:

nano ~///settings.py

Am Ende der Datei sehen Sie einen Abschnitt "+ DATABASES +", der so aussieht:

. . .

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.sqlite3',
       'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   }
}

. . .

Dies ist derzeit so konfiguriert, dass SQLite als Datenbank verwendet wird. Wir müssen dies ändern, damit stattdessen unsere PostgreSQL-Datenbank verwendet wird.

Ändern Sie zuerst die Engine so, dass sie auf das "+ postgresql_psycopg2 " - Backend anstelle des " sqlite3 " - Backends verweist. Verwenden Sie für " NAME " den Namen Ihrer Datenbank (in unserem Beispiel "+"). Wir müssen auch Anmeldeinformationen hinzufügen. Wir benötigen den Benutzernamen, das Passwort und den Host, um eine Verbindung herzustellen. Wir werden die Port-Option hinzufügen und leer lassen, damit die Standardeinstellung ausgewählt wird:

. . .

DATABASES = {
   'default': {
       'ENGINE': 'django.db.backends.',
       'NAME': '',
       'USER': '',
       'PASSWORD': '',
       'HOST': 'localhost',
       'PORT': '',
   }
}

. . .

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Migrieren Sie die Datenbank und testen Sie Ihr Projekt

Nachdem die Django-Einstellungen konfiguriert wurden, können wir unsere Datenstrukturen in unsere Datenbank migrieren und den Server testen.

Wir können damit beginnen, Migrationen zu erstellen und auf unsere Datenbank anzuwenden. Da wir noch keine tatsächlichen Daten haben, wird hiermit einfach die anfängliche Datenbankstruktur eingerichtet:

cd ~/
python manage.py makemigrations
python manage.py migrate

Nach dem Erstellen der Datenbankstruktur können wir ein Administratorkonto erstellen, indem wir Folgendes eingeben:

python manage.py createsuperuser

Sie werden aufgefordert, einen Benutzernamen auszuwählen, eine E-Mail-Adresse anzugeben und ein Kennwort für das Konto auszuwählen und zu bestätigen.

Sobald Sie ein Administratorkonto eingerichtet haben, können Sie testen, ob Ihre Datenbank ordnungsgemäß funktioniert, indem Sie den Django-Entwicklungsserver starten:

python manage.py runserver 0.0.0.0:8000

Besuchen Sie in Ihrem Webbrowser den Domainnamen oder die IP-Adresse Ihres Servers, gefolgt von "+: 8000 +", um die Standard-Django-Root-Seite zu erreichen:

http://:8000

Sie sollten die Standardindexseite sehen:

Fügen Sie "+ / admin +" an das Ende der URL an und Sie sollten in der Lage sein, auf den Anmeldebildschirm der Admin-Oberfläche zuzugreifen:

Geben Sie den Benutzernamen und das Passwort ein, die Sie gerade mit dem Befehl + createduperuser + erstellt haben. Sie werden dann zur Administrationsoberfläche weitergeleitet:

Wenn Sie mit den Nachforschungen fertig sind, können Sie den Entwicklungsserver stoppen, indem Sie in Ihrem Terminalfenster STRG-C drücken.

Durch den Zugriff auf die Administrationsoberfläche haben wir bestätigt, dass in unserer Datenbank unsere Benutzerkontoinformationen gespeichert sind und dass auf diese entsprechend zugegriffen werden kann.

Fazit

In diesem Handbuch wird gezeigt, wie Sie PostgreSQL als Backend-Datenbank für ein Django-Projekt installieren und konfigurieren. Während SQLite die Last während der Entwicklung und der Light Production-Nutzung problemlos bewältigen kann, profitieren die meisten Projekte von der Implementierung eines umfassenderen DBMS.