Der Autor hatthe Electronic Frontier Foundation ausgewählt, um eine Spende im Rahmen desWrite for DOnations-Programms zu erhalten.
Einführung
Prisma ist eine Datenschicht, die herkömmliche objektrelationale Zuordnungstools (ORMs) in Ihrer Anwendung ersetzt. Prisma bietet Unterstützung sowohl für den Aufbau von GraphQL-Servern als auch für REST-APIs und vereinfacht den Datenbankzugriff mit Schwerpunkt auftype safety und aktiviertdeclarative database migrations. Die Typensicherheit trägt zur Reduzierung potenzieller Codefehler und Inkonsistenzen bei, während die deklarativen Datenbankmigrationen das Speichern Ihres Datenmodells in der Versionskontrolle ermöglichen. Mithilfe dieser Funktionen können Entwickler den Zeitaufwand für die Einrichtung von Workflows für Datenbankzugriff, Migration und Datenverwaltung reduzieren.
Sie können den Prisma-Server, der als Proxy für Ihre Datenbank fungiert, auf verschiedene Arten bereitstellen und entweder remote oder lokal hosten. Über den Prisma-Dienst können Sie mit der GraphQL-API auf Ihre Daten zugreifen und eine Verbindung zu Ihrer Datenbank herstellen. Dies ermöglicht Echtzeitvorgänge und das Erstellen, Aktualisieren und Löschen von Daten. GraphQL ist eine Abfragesprache für APIs, mit der Benutzer Abfragen senden können, um auf die genauen Daten zuzugreifen, die sie von ihrem Server benötigen. Der Prisma-Server ist eine eigenständige Komponente, die sich auf Ihrer Datenbank befindet.
In diesem Tutorial installieren Sie manuell einen Prisma-Server unter Ubuntu 18.04 und führen eine GraphQL-Testabfrage inGraphQL Playground aus. Sie hosten Ihren Prisma-Setup-Code und die Entwicklung lokal, wo Sie Ihre Anwendung tatsächlich erstellen, während Sie Prisma auf Ihrem Remote-Server ausführen. Wenn Sie die Installation manuell ausführen, können Sie die zugrunde liegende Infrastruktur Ihres Setups besser verstehen und anpassen.
Während dieses Tutorial die manuellen Schritte zum Bereitstellen von Prisma auf einem Ubuntu 18.04-Server behandelt, können Sie dies mit Docker Machine auch automatisierter erreichen, indem Sie diesentutorialauf Prismas Website folgen.
Note: Das in diesem Abschnitt beschriebene Setup enthält keine Funktionen, die Sie normalerweise von produktionsbereiten Servern erwarten würden, z. B. automatisierte Sicherungen und aktives Failover.
Voraussetzungen
Um dieses Tutorial abzuschließen, benötigen Sie:
-
Ein Ubuntu 18.04-Server, der unter Befolgung derInitial Server Setup Guide eingerichtet wurde, einschließlich eines Sudo-Nicht-Root-Benutzers.
-
Docker auf Ihrem Server installiert. Sie können dies erreichen, indem Sie Schritt 1 derDocker Installation on Ubuntu 18.04 tutorial ausführen.
-
Docker Compose installiert. Anweisungen hierzu finden Sie in Schritt 1 vonInstalling Docker Compose.
-
Node.js installed on your server. Sie können dies erreichen, indem Sie den PPA-Abschnitt derInstalling Node.js tutorial durchgehen.
[[Schritt 1 - Starten des Prisma-Servers]] == Schritt 1 - Starten des Prisma-Servers
Die Prisma-CLI ist das Hauptwerkzeug für die Bereitstellung und Verwaltung Ihrer Prisma-Dienste. Um die Dienste zu starten, müssen Sie die erforderliche Infrastruktur einrichten, die den Prisma-Server und eine Datenbank enthält, mit der eine Verbindung hergestellt werden kann.
Mit Docker Compose können Sie Anwendungen mit mehreren Containern verwalten und ausführen. Sie werden es verwenden, um die für den Prisma-Service erforderliche Infrastruktur einzurichten.
Zunächst erstellen Sie die Dateidocker-compose.yml
, um die Prisma-Dienstkonfiguration auf Ihrem Server zu speichern. Mit dieser Datei können Sie Prisma, eine zugeordnete Datenbank, automatisch starten und die erforderlichen Details in einem Schritt konfigurieren. Sobald die Datei mit Docker Compose gestartet wurde, werden die Kennwörter für Ihre Datenbanken konfiguriert. Ersetzen Sie daher die Kennwörter fürmanagementAPIsecret
undMYSQL_ROOT_PASSWORD
durch etwas Sicheres. Führen Sie den folgenden Befehl aus, um die Dateidocker-compose.yml
zu erstellen und zu bearbeiten:
sudo nano docker-compose.yml
Fügen Sie der Datei den folgenden Inhalt hinzu, um die Dienste und Volumes für das Prisma-Setup zu definieren:
docker-compose.yml
version: "3"
services:
prisma:
image: prismagraphql/prisma:1.20
restart: always
ports:
- "4466:4466"
environment:
PRISMA_CONFIG: |
port: 4466
managementApiSecret: my-secret
databases:
default:
connector: mysql
host: mysql
port: 3306
user: root
password: prisma
migrations: true
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: prisma
volumes:
- mysql:/var/lib/mysql
volumes:
mysql:
Diese Konfiguration führt Folgendes aus:
-
Es werden zwei Dienste gestartet:
prisma-db
unddb
. -
Es zieht in der neuesten Version von Prisma. Zum jetzigen Zeitpunkt ist das Prisma 1.20.
-
Es legt die Ports fest, an denen Prisma verfügbar sein wird, und gibt alle Anmeldeinformationen für die Verbindung zur MySQL-Datenbank im Abschnitt
databases
an.
Die Dateidocker-compose.yml
richtetmanagementApiSecret
ein, wodurch verhindert wird, dass andere Benutzer mit Kenntnis Ihres Endpunkts auf Ihre Daten zugreifen. Wenn Sie dieses Lernprogramm nur für eine Testbereitstellung verwenden, sollten SiemanagementAPIsecret
in etwas Sichereres ändern. Wenn Sie dies tun, denken Sie daran, damit Sie es später während desprisma init
-Prozesses eingeben können.
Diese Datei ruft auch das MySQL Docker-Image auf und legt auch diese Anmeldeinformationen fest. In diesem Tutorial wird in dieser Docker Compose-Datei ein MySQL-Image erstellt. Sie können jedoch auch PostgreSQL mit Prisma verwenden. Beide Docker-Images sind im Docker-Hub verfügbar:
Speichern und schließen Sie die Datei.
Nachdem Sie alle Details gespeichert haben, können Sie die Docker-Container starten. Der Befehl-d
weist die Container an, im getrennten Modus ausgeführt zu werden. Dies bedeutet, dass sie im Hintergrund ausgeführt werden:
sudo docker-compose up -d
Dadurch werden die Docker-Bilder sowohl fürprisma
als auch fürmysql
abgerufen. Mit dem folgenden Befehl können Sie überprüfen, ob die Docker-Container ausgeführt werden:
sudo docker ps
Sie sehen eine Ausgabe, die ungefähr so aussieht:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
24f4dd6222b1 prismagraphql/prisma:1.12 "/bin/sh -c /app/sta…" 15 seconds ago Up 1 second 0.0.0.0:4466->4466/tcp root_prisma_1
d8cc3a393a9f mysql:5.7 "docker-entrypoint.s…" 15 seconds ago Up 13 seconds 3306/tcp root_mysql_1
Nachdem Sie Ihren Prisma-Server und Ihre Datenbank eingerichtet haben, können Sie nun lokal arbeiten, um den Prisma-Dienst bereitzustellen.
[[Schritt 2 - Installation von Prisma lokal]] == Schritt 2 - Prisma lokal installieren
Der Prisma-Server stellt die Laufzeitumgebungen für Ihre Prisma-Dienste bereit. Nachdem Sie Ihren Prisma-Server gestartet haben, können Sie Ihren Prisma-Dienst bereitstellen. Sie werden diese Schritte lokal ausführen, nicht auf Ihrem Server.
Erstellen Sie zunächst einen separaten Ordner, der alle Prisma-Dateien enthält:
mkdir prisma
Verschieben Sie dann in diesen Ordner:
cd prisma
Sie können Prisma mit Homebrew installieren, wenn Sie MacOS verwenden. Führen Sie dazu den folgenden Befehl aus, um das Prisma-Repository hinzuzufügen:
brew tap prisma/prisma
Sie können Prisma dann mit dem folgenden Befehl installieren:
brew install prisma
Oder alternativ mitnpm
:
npm install -g prisma
Wenn Prisma lokal installiert ist, können Sie den neuen Prisma-Dienst starten.
[[Schritt-3 - Erstellen der Konfiguration für einen neuen Prisma-Dienst]] == Schritt 3 - Erstellen der Konfiguration für einen neuen Prisma-Dienst
Nach der Installation können Sieprisma init
verwenden, um die Dateistruktur für eine neue Prisma-Datenbank-API zu erstellen, die die Dateien generiert, die zum Erstellen Ihrer Anwendung mit Prisma erforderlich sind. Ihr Endpunkt befindet sich automatisch in der Dateiprisma.yml
, unddatamodel.prisma
enthält bereits ein Beispieldatenmodell, das Sie im nächsten Schritt abfragen können. Das Datenmodell dient als Grundlage für Ihre Prisma-API und gibt das Modell für Ihre Anwendung an. Zu diesem Zeitpunkt erstellen Sie nur die Dateien und das Beispieldatenmodell. Sie nehmen keine Änderungen an der Datenbank vor, bis Sie später in diesem Schrittprisma deploy
ausführen.
Jetzt können Sie den folgenden Befehl lokal ausführen, um die neue Dateistruktur zu erstellen:
prisma init hello-world
Nachdem Sie diesen Befehl ausgeführt haben, wird eine interaktive Eingabeaufforderung angezeigt. Wenn Sie dazu aufgefordert werden, wählen SieUse other server
und drücken SieENTER
:
Output Set up a new Prisma server or deploy to an existing server?
You can set up Prisma for local development (based on docker-compose)
Use existing database Connect to existing database
Create new database Set up a local database using Docker
Or deploy to an existing Prisma server:
Demo server Hosted demo environment incl. database (requires login)
❯ Use other server Manually provide endpoint of a running Prisma server
Anschließend geben Sie den Endpunkt Ihres Servers an, der als Prisma-Server fungiert. Es sieht ungefähr so aus:http://SERVER_IP_ADDRESS:4466
. Es ist wichtig, dass der Endpunkt mit http (oder https) beginnt und die angegebene Portnummer hat.
OutputEnter the endpoint of your Prisma server http://SERVER_IP_ADDRESS:4466
Geben Sie für das Verwaltungs-API-Geheimnis den Satz oder das Kennwort ein, die Sie zuvor in der Konfigurationsdatei angegeben haben:
OutputEnter the management API secret my-secret
Für die nachfolgenden Optionen können Sie die Standardvariablen auswählen, indem SieENTER
fürservice name
undservice stage
drücken:
OutputChoose a name for your service hello-world
Choose a name for your stage dev
Sie können auch eine Programmiersprache für den Prisma-Client auswählen. In diesem Fall können Sie Ihre bevorzugte Sprache auswählen. Sie können mehr über den Clienthere lesen.
Output Select the programming language for the generated Prisma client (Use arrow keys)
❯ Prisma TypeScript Client
Prisma Flow Client
Prisma JavaScript Client
Prisma Go Client
Don't generate
Sobald Sie die Eingabeaufforderung ausgefüllt haben, wird die folgende Ausgabe angezeigt, die Ihre Auswahl bestätigt:
Output Created 3 new files:
prisma.yml Prisma service definition
datamodel.prisma GraphQL SDL-based datamodel (foundation for database)
.env Env file including PRISMA_API_MANAGEMENT_SECRET
Next steps:
1. Open folder: cd hello-world
2. Deploy your Prisma service: prisma deploy
3. Read more about deploying services:
http://bit.ly/prisma-deploy-services
Wechseln Sie in das Verzeichnishello-world
:
cd hello-world
Synchronisieren Sie diese Änderungen mitprisma deploy
auf Ihrem Server. Dadurch werden die Informationen von Ihrem lokalen Computer an den Prisma-Server gesendet und der Prisma-Dienst auf dem Prisma-Server erstellt:
prisma deploy
Note: Wenn Sieprisma deploy
erneut ausführen, wird Ihr Prisma-Dienst aktualisiert.
Ihre Ausgabe sieht ungefähr so aus:
OutputCreating stage dev for service hello-world ✔
Deploying service `hello-world` to stage 'dev' to server 'default' 468ms
Changes:
User (Type)
+ Created type `User`
+ Created field `id` of type `GraphQLID!`
+ Created field `name` of type `String!`
+ Created field `updatedAt` of type `DateTime!`
+ Created field `createdAt` of type `DateTime!`
Applying changes 716ms
Your Prisma GraphQL database endpoint is live:
HTTP: http://SERVER_IP_ADDRESS:4466/hello-world/dev
WS: ws://SERVER_IP_ADDRESS:4466/hello-world/dev
Die Ausgabe zeigt, dass Prisma Ihre Datenbank gemäß Ihrem Datenmodell (erstellt im Schrittprisma init
) mittypeUser
aktualisiert hat. Typen sind ein wesentlicher Bestandteil eines Datenmodells. Sie stellen ein Element aus Ihrer Anwendung dar und jeder Typ enthält mehrere Felder. Für Ihr Datenmodell sind die zugeordneten Felder, die den Benutzer beschreiben, folgende: Benutzer-ID, Name, Zeitpunkt der Erstellung und Zeitpunkt der Aktualisierung.
Wenn Sie zu diesem Zeitpunkt auf Probleme stoßen und eine andere Ausgabe erhalten, vergewissern Sie sich, dass Sie alle Felder bei der interaktiven Eingabeaufforderung korrekt eingegeben haben. Sie können dies tun, indem Sie den Inhalt derprisma.yml
-Datei überprüfen.
Während Ihr Prisma-Dienst ausgeführt wird, können Sie eine Verbindung zu zwei verschiedenen Endpunkten herstellen:
-
Die Verwaltungsoberfläche, verfügbar unter
http://SERVER_IP_ADDRESS:4466/management
, über die Sie Prisma-Dienste verwalten und bereitstellen können. -
Die GraphQL-API für Ihren Prisma-Dienst, verfügbar unter
http://SERVER_IP_ADDRESS:4466/hello-world/dev
.
Sie haben Ihren Prisma-Server erfolgreich eingerichtet und bereitgestellt. Sie können jetzt Abfragen und Mutationen in GraphQL untersuchen.
[[Schritt 4 - Ausführen einer Beispielabfrage]] == Schritt 4 - Ausführen einer Beispielabfrage
Um einen anderen Prisma-Anwendungsfall zu untersuchen, können Sie mit dem ToolGraphQL playgroundexperimentieren, einer Open-Source-IDE (GraphQL Integrated Development Environment) auf Ihrem Server. Um darauf zuzugreifen, besuchen Sie Ihren Endpunkt in Ihrem Browser aus dem vorherigen Schritt:
http://SERVER_IP_ADDRESS:4466/hello-world/dev
Amutation ist ein GraphQL-Begriff, der eine Möglichkeit beschreibt, Daten im Backend über GraphQL zu ändern, zu erstellen, zu aktualisieren oder zu löschen (CRUD). Sie können eine Mutation senden, um einen neuen Benutzer zu erstellen und die Funktionen zu erkunden. Führen Sie dazu die folgende Mutation auf der linken Seite der Seite aus:
mutation {
createUser(data: { name: "Alice" }) {
id
name
}
}
Sobald Sie die Wiedergabetaste drücken, werden die Ergebnisse auf der rechten Seite der Seite angezeigt.
Wenn Sie anschließend einen Benutzer mithilfe der SpalteID
in der Datenbank suchen möchten, können Sie die folgende Abfrage ausführen:
query {
user(where: { id: "cjkar2d62000k0847xuh4g70o" }) {
id
name
}
}
Sie haben jetzt einen Prisma-Server und einen Dienst, der auf Ihrem Server ausgeführt wird, und Sie haben Testabfragen in GraphQLs IDE ausgeführt.
Fazit
Sie haben ein funktionierendes Prisma-Setup auf Ihrem Server. Sie können einige zusätzliche Prisma-Anwendungsfälle und die nächsten Schritte inGetting Started Guide sehen oder Prismas Funktionsumfang inPrisma Docs erkunden. Nachdem Sie alle Schritte in diesem Lernprogramm ausgeführt haben, haben Sie eine Reihe von Optionen, um Ihre Verbindung zur Datenbank zu überprüfen. Eine Möglichkeit ist die Verwendung vonPrisma Client.