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:
-
Un serveur Ubuntu 18.04 configuré en suivant lesInitial Server Setup Guide, y compris un utilisateur sudo non root.
-
Docker installé sur votre serveur. Vous pouvez y parvenir en suivant l'étape 1 desDocker Installation on Ubuntu 18.04 tutorial.
-
Docker Compose installé. Vous pouvez trouver des instructions à ce sujet à l'étape 1 deInstalling Docker Compose.
-
Node.js installed on your server. Vous pouvez accomplir cela en passant par la section PPA desInstalling Node.js tutorial.
[[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 section
databases
.
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
.
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.
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.