Manuelles Einrichten eines Prisma-Servers unter Ubuntu 18.04

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:

[[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.ymlzu 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 Abschnittdatabasesan.

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 SiemanagementAPIsecretin 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 unterhttp://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 unterhttp://SERVER_IP_ADDRESS:4466/hello-world/dev.

GraphQL API exploring <em>Your Project</em>

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.
GraphQL Playground Creating a New User

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.