Comment configurer manuellement un serveur Prisma sur Ubuntu 18.04

L'auteur a sélectionnéthe Electronic Frontier Foundation pour recevoir un don dans le cadre du programmeWrite for DOnations.

introduction

Prisma est une couche de données qui remplace les outils de mappage relationnel objet (ORM) traditionnels dans votre application. Offrant une prise en charge à la fois pour la création de serveurs GraphQL et pour les API REST, Prisma simplifie l'accès aux bases de données en mettant l'accent surtype safety et active lesdeclarative database migrations. La sécurité des types permet de réduire les erreurs de code et les incohérences potentielles, tandis que les migrations déclaratives de la base de données vous permettent de stocker votre modèle de données dans le contrôle de version. Ces fonctionnalités aident les développeurs à réduire le temps consacré à la configuration de l'accès aux bases de données, aux migrations et aux flux de travail de gestion des données.

Vous pouvez déployer le serveur Prisma, qui agit en tant que proxy pour votre base de données, de différentes manières et l'héberger à distance ou localement. Grâce au service Prisma, vous pouvez accéder à vos données et vous connecter à votre base de données avec l’API GraphQL, qui permet des opérations en temps réel et la possibilité de créer, mettre à jour et supprimer des données. GraphQL est un langage de requête pour les API qui permet aux utilisateurs d'envoyer des requêtes pour accéder aux données exactes dont ils ont besoin de leur serveur. Le serveur Prisma est un composant autonome qui repose sur votre base de données.

Dans ce didacticiel, vous allez installer manuellement un serveur Prisma sur Ubuntu 18.04 et exécuter une requête de test GraphQL dans le fichierGraphQL Playground. Vous hébergerez votre code de configuration et développement Prisma localement - où vous construirez réellement votre application - tout en exécutant Prisma sur votre serveur distant. En effectuant manuellement l'installation, vous aurez une compréhension plus profonde et une possibilité de personnalisation de l'infrastructure sous-jacente de votre configuration.

Bien que ce didacticiel couvre les étapes manuelles de déploiement de Prisma sur un serveur Ubuntu 18.04, vous pouvez également le faire de manière plus automatisée avec Docker Machine en suivant cestutorial sur le site de Prisma.

Note: la configuration décrite dans cette section n'inclut pas les fonctionnalités que vous attendez normalement des serveurs prêts pour la production, telles que les sauvegardes automatisées et le basculement actif.

Conditions préalables

Pour compléter ce tutoriel, vous aurez besoin de:

[[step-1 -—- starting-the-prisma-server]] == Étape 1 - Démarrage du serveur Prisma

L'interface de ligne de commande Prisma est le principal outil utilisé pour déployer et gérer vos services Prisma. Pour démarrer les services, vous devez configurer l'infrastructure requise, qui comprend le serveur Prisma et une base de données à laquelle il se connecte.

Docker Compose vous permet de gérer et d'exécuter des applications multi-conteneurs. Vous allez l'utiliser pour configurer l'infrastructure requise pour le service Prisma.

Vous commencerez par créer le fichierdocker-compose.yml pour stocker la configuration du service Prisma sur votre serveur. Vous utiliserez ce fichier pour faire tourner automatiquement Prisma, une base de données associée, et configurer les détails nécessaires, le tout en une seule étape. Une fois que le fichier est lancé avec Docker Compose, il configurera les mots de passe pour vos bases de données, alors assurez-vous de remplacer les mots de passe pourmanagementAPIsecret etMYSQL_ROOT_PASSWORD par quelque chose de sécurisé. Exécutez la commande suivante pour créer et modifier le fichierdocker-compose.yml:

sudo nano docker-compose.yml

Ajoutez le contenu suivant au fichier pour définir les services et les volumes pour l'installation de Prisma:

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:

Cette configuration a les effets suivants:

  • Il lance deux services:prisma-db etdb.

  • Il tire dans la dernière version de Prisma. À ce jour, c'est Prisma 1.20.

  • Il définit les ports sur lesquels Prisma sera disponible et spécifie toutes les informations d'identification pour se connecter à la base de données MySQL dans la sectiondatabases.

Le fichierdocker-compose.yml configure lesmanagementApiSecret, ce qui empêche les autres d'accéder à vos données en connaissant votre point de terminaison. Si vous utilisez ce didacticiel pour autre chose qu'un déploiement de test, vous devez remplacer lesmanagementAPIsecret par quelque chose de plus sécurisé. Lorsque vous le faites, assurez-vous de vous en souvenir afin de pouvoir le saisir plus tard pendant le processus deprisma init.

Ce fichier extrait également l'image MySQL Docker et définit également ces informations d'identification. Pour les besoins de ce didacticiel, ce fichier Docker Compose active une image MySQL, mais vous pouvez également utiliser PostgreSQL avec Prisma. Les deux images Docker sont disponibles sur le hub Docker:

Enregistrez et quittez le fichier.

Maintenant que vous avez enregistré tous les détails, vous pouvez démarrer les conteneurs Docker. La commande-d indique aux conteneurs de s’exécuter en mode détaché, ce qui signifie qu’ils s’exécuteront en arrière-plan:

sudo docker-compose up -d

Cela récupérera les images Docker pour lesprisma etmysql. Vous pouvez vérifier que les conteneurs Docker sont en cours d'exécution avec la commande suivante:

sudo docker ps

Vous verrez une sortie qui ressemble à ceci:

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

Une fois votre serveur et votre base de données Prisma configurés, vous êtes maintenant prêt à travailler localement pour déployer le service Prisma.

[[step-2 -—- installation-prisma-localement]] == Étape 2 - Installation locale de Prisma

Le serveur Prisma fournit les environnements d'exécution de vos services Prisma. Maintenant que votre serveur Prisma est démarré, vous pouvez déployer votre service Prisma. Vous exécuterez ces étapes localement, pas sur votre serveur.

Pour commencer, créez un dossier séparé contenant tous les fichiers Prisma:

mkdir prisma

Puis déplacez-vous dans ce dossier:

cd prisma

Vous pouvez installer Prisma avec Homebrew si vous utilisez MacOS. Pour ce faire, exécutez la commande suivante pour ajouter le référentiel Prisma:

brew tap prisma/prisma

Vous pouvez ensuite installer Prisma avec la commande suivante:

brew install prisma

Ou alternativement, avecnpm:

npm install -g prisma

Avec Prisma installé localement, vous êtes prêt à démarrer le nouveau service Prisma.

[[step-3 -—- creation-the-configuration-for-a-new-prisma-service]] == Étape 3 - Création de la configuration d'un nouveau service Prisma

Après l'installation, vous pouvez utiliserprisma init pour créer la structure de fichiers d'une nouvelle API de base de données Prisma, qui génère les fichiers nécessaires à la création de votre application avec Prisma. Votre point de terminaison sera automatiquement dans le fichierprisma.yml, etdatamodel.prisma contiendra déjà un exemple de modèle de données que vous pourrez interroger à l'étape suivante. Le modèle de données sert de base à votre API Prisma et spécifie le modèle de votre application. À ce stade, vous créez uniquement les fichiers et le modèle de données exemple. Vous n'apportez aucune modification à la base de données jusqu'à ce que vous exécutiezprisma deploy plus tard dans cette étape.

Maintenant, vous pouvez exécuter la commande suivante localement pour créer la nouvelle structure de fichier:

prisma init hello-world

Après avoir exécuté cette commande, une invite interactive s’affiche. Lorsque vous y êtes invité, sélectionnez,Use other server et appuyez surENTER:

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

Vous fournirez ensuite le noeud final de votre serveur qui agit en tant que serveur Prisma. Cela ressemblera à quelque chose comme:http://SERVER_IP_ADDRESS:4466. Il est essentiel que le noeud final commence par http (ou https) et que le numéro de port soit indiqué.

OutputEnter the endpoint of your Prisma server http://SERVER_IP_ADDRESS:4466

Pour le secret de l'API de gestion, entrez la phrase ou le mot de passe que vous avez indiqué précédemment dans le fichier de configuration:

OutputEnter the management API secret my-secret

Pour les options suivantes, vous pouvez choisir les variables par défaut en appuyant surENTER pour lesservice name etservice stage:

OutputChoose a name for your service hello-world
Choose a name for your stage dev

Vous aurez également le choix entre un langage de programmation pour le client Prisma. Dans ce cas, vous pouvez choisir votre langue préférée. Vous pouvez en savoir plus sur le clienthere.

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

Une fois l’invite complétée, vous verrez la sortie suivante qui confirme les sélections effectuées:

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

Accédez au répertoirehello-world:

cd hello-world

Synchronisez ces modifications sur votre serveur avecprisma deploy. Cela envoie les informations au serveur Prisma à partir de votre ordinateur local et crée le service Prisma sur le serveur Prisma:

prisma deploy

Note: exécuter à nouveauprisma deploy mettra à jour votre service Prisma.

Votre sortie ressemblera à quelque chose comme:

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

La sortie montre que Prisma a mis à jour votre base de données en fonction de votre modèle de données (créé à l'étapeprisma init) avec untypeUser. Les types sont une partie essentielle d'un modèle de données; ils représentent un élément de votre application et chaque type contient plusieurs champs. Pour votre modèle de données, les champs associés décrivant l’utilisateur sont: l’identifiant de l’utilisateur, son nom, l’heure à laquelle ils ont été créés et l’heure de leur mise à jour.

Si vous rencontrez des problèmes à ce stade et obtenez un résultat différent, vérifiez que vous avez correctement saisi tous les champs lors de l'invite interactive. Vous pouvez le faire en examinant le contenu du fichierprisma.yml.

Lorsque votre service Prisma est en cours d'exécution, vous pouvez vous connecter à deux ordinateurs d'extrémité différents:

  • L'interface de gestion, disponible àhttp://SERVER_IP_ADDRESS:4466/management, où vous pouvez gérer et déployer les services Prisma.

  • L'API GraphQL pour votre service Prisma, disponible àhttp://SERVER_IP_ADDRESS:4466/hello-world/dev.

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

Vous avez correctement configuré et déployé votre serveur Prisma. Vous pouvez maintenant explorer les requêtes et les mutations dans GraphQL.

[[step-4 -—- running-an-example-query]] == Étape 4 - Exécution d'un exemple de requête

Pour explorer un autre cas d'utilisation de Prisma, vous pouvez expérimenter l'outilGraphQL playground, qui est un environnement de développement intégré (IDE) GraphQL open-source sur votre serveur. Pour y accéder, visitez votre ordinateur d'extrémité dans votre navigateur à l'étape précédente:

http://SERVER_IP_ADDRESS:4466/hello-world/dev

Unmutation est un terme GraphQL qui décrit un moyen de modifier - créer, mettre à jour ou supprimer (CRUD) - des données dans le backend via GraphQL. Vous pouvez envoyer une mutation pour créer un nouvel utilisateur et explorer les fonctionnalités. Pour ce faire, exécutez la mutation suivante dans la partie gauche de la page:

mutation {
  createUser(data: { name: "Alice" }) {
    id
    name
  }
}

Une fois que vous appuyez sur le bouton de lecture, vous verrez les résultats sur le côté droit de la page.
GraphQL Playground Creating a New User

Par la suite, si vous souhaitez rechercher un utilisateur à l'aide de la colonneID dans la base de données, vous pouvez exécuter la requête suivante:

query {
  user(where: { id: "cjkar2d62000k0847xuh4g70o" }) {
    id
    name
  }
}

Vous avez maintenant un serveur Prisma et un service opérationnels sur votre serveur et vous avez exécuté des requêtes de test dans GraphQL IDE.

Conclusion

Vous avez une configuration Prisma fonctionnelle sur votre serveur. Vous pouvez voir quelques cas d'utilisation supplémentaires de Prisma et les étapes suivantes dans lesGetting Started Guide ou explorer l'ensemble des fonctionnalités de Prisma dans lesPrisma Docs. Une fois que vous avez terminé toutes les étapes de ce didacticiel, vous disposez d'un certain nombre d'options pour vérifier votre connexion à la base de données, une possibilité est d'utiliser lesPrisma Client.