Автор выбралthe Electronic Frontier Foundation для получения пожертвования в рамках программыWrite for DOnations.
Вступление
Prisma - это уровень данных, который заменяет традиционные инструменты объектно-реляционного сопоставления (ORM) в вашем приложении. Предлагая поддержку как для построения серверов GraphQL, так и для REST API, Prisma упрощает доступ к базе данных с акцентом наtype safety и включаетdeclarative database migrations. Безопасность типов помогает уменьшить потенциальные ошибки и несоответствия кода, а декларативные миграции баз данных позволяют хранить вашу модель данных в системе управления версиями. Эти функции помогают разработчикам сократить время, затрачиваемое на настройку доступа к базам данных, миграций и рабочих процессов управления данными.
Вы можете несколькими способами развернуть сервер Prisma, который выступает в качестве прокси-сервера для вашей базы данных, и разместить его удаленно или локально. Через сервис Prisma вы можете получить доступ к своим данным и подключиться к своей базе данных с помощью API-интерфейса GraphQL, который позволяет выполнять операции в реальном времени и создавать, обновлять и удалять данные. GraphQL - это язык запросов для API, который позволяет пользователям отправлять запросы для доступа к точным данным, которые им требуются на их сервере. Сервер Prisma - это автономный компонент, который располагается поверх вашей базы данных.
В этом руководстве вы вручную установите сервер Prisma в Ubuntu 18.04 и запустите тестовый запрос GraphQL вGraphQL Playground. Вы будете размещать свой установочный код Prisma и разработку локально - там, где вы на самом деле создадите свое приложение - при запуске Prisma на удаленном сервере. Запустив установку вручную, вы получите более глубокое понимание и возможность настройки базовой инфраструктуры вашей установки.
Хотя в этом руководстве рассматриваются ручные шаги по развертыванию Prisma на сервере Ubuntu 18.04, вы также можете выполнить это более автоматизированным способом с помощью Docker Machine, следуя этомуtutorial на сайте Prisma.
Note: установка, описанная в этом разделе, не включает функции, которые вы обычно ожидаете от готовых к работе серверов, таких как автоматическое резервное копирование и активное аварийное переключение.
Предпосылки
Для завершения этого урока вам понадобится:
-
Сервер Ubuntu 18.04, настроенный в соответствии сInitial Server Setup Guide, включая пользователя sudo без полномочий root.
-
Docker установлен на вашем сервере. Вы можете добиться этого, выполнив шаг 1Docker Installation on Ubuntu 18.04 tutorial.
-
Docker Compose установлен. Вы можете найти инструкции для этого на шаге 1Installing Docker Compose.
-
Node.js installed on your server. Вы можете сделать это, пройдя через раздел PPA файлаInstalling Node.js tutorial.
[[step-1 -—- start-the-prisma-server]] == Шаг 1. Запуск сервера Prisma
CLI Prisma - это основной инструмент, используемый для развертывания и управления службами Prisma. Чтобы запустить службы, вам нужно настроить необходимую инфраструктуру, которая включает сервер Prisma и базу данных для подключения к ней.
Docker Compose позволяет вам управлять и запускать мультиконтейнерные приложения. Вы будете использовать его для настройки инфраструктуры, необходимой для службы Prisma.
Вы начнете с создания файлаdocker-compose.yml
для хранения конфигурации службы Prisma на вашем сервере. Вы будете использовать этот файл для автоматического запуска Prisma, связанной базы данных, и для настройки необходимых деталей, и все это за один шаг. После запуска файла с помощью Docker Compose он настроит пароли для ваших баз данных, поэтому не забудьте заменить пароли дляmanagementAPIsecret
иMYSQL_ROOT_PASSWORD
чем-нибудь безопасным. Выполните следующую команду, чтобы создать и отредактировать файлdocker-compose.yml
:
sudo nano docker-compose.yml
Добавьте следующее содержимое в файл, чтобы определить службы и тома для установки 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:
Эта конфигурация делает следующее:
-
Он запускает две службы:
prisma-db
иdb
. -
Это тянет в последней версии Prisma. На момент написания статьи это Prisma 1.20.
-
Он устанавливает порты, на которых будет доступна Prisma, и указывает все учетные данные для подключения к базе данных MySQL в разделе
databases
.
Файлdocker-compose.yml
устанавливаетmanagementApiSecret
, что предотвращает доступ других пользователей к вашим данным, зная о вашей конечной точке. Если вы используете это руководство для чего-либо, кроме тестового развертывания, вам следует изменитьmanagementAPIsecret
на что-то более безопасное. Когда вы это сделаете, обязательно запомните его, чтобы вы могли ввести его позже в процессеprisma init
.
Этот файл также извлекает образ MySQL Docker и также устанавливает эти учетные данные. В целях данного руководства этот файл Docker Compose раскручивает образ MySQL, но вы также можете использовать PostgreSQL с Prisma. Оба изображения Docker доступны на Docker-хабе:
Сохраните и выйдите из файла.
Теперь, когда вы сохранили все детали, вы можете запустить Docker-контейнеры. Команда-d
указывает контейнерам работать в автономном режиме, то есть они будут работать в фоновом режиме:
sudo docker-compose up -d
Это позволит получить образы Docker как дляprisma
, так и дляmysql
. Вы можете проверить, что контейнеры Docker работают, с помощью следующей команды:
sudo docker ps
Вы увидите вывод, который выглядит примерно так:
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
После настройки сервера и базы данных Prisma вы готовы к локальной работе по развертыванию службы Prisma.
[[step-2 -—- install-prisma-locally]] == Шаг 2. Локальная установка Prisma
Сервер Prisma предоставляет среды выполнения для ваших служб Prisma. Теперь, когда у вас запущен сервер Prisma, вы можете развернуть службу Prisma. Вы будете выполнять эти шаги локально, а не на своем сервере.
Для начала создайте отдельную папку, содержащую все файлы Prisma:
mkdir prisma
Затем перейдите в эту папку:
cd prisma
Вы можете установить Prisma с Homebrew, если вы используете MacOS. Для этого выполните следующую команду, чтобы добавить хранилище Prisma:
brew tap prisma/prisma
Затем вы можете установить Prisma с помощью следующей команды:
brew install prisma
Или, наоборот, сnpm
:
npm install -g prisma
Если Prisma установлена локально, вы готовы к загрузке новой службы Prisma.
[[step-3 -—- created-the-configuration-for-a-new-prisma-service]] == Шаг 3. Создание конфигурации для новой службы Prisma
После установки вы можете использоватьprisma init
для создания файловой структуры для нового API базы данных Prisma, который генерирует файлы, необходимые для создания вашего приложения с Prisma. Ваша конечная точка автоматически будет в файлеprisma.yml
, аdatamodel.prisma
уже будет содержать образец модели данных, которую вы можете запросить на следующем шаге. Модель данных служит основой для вашего API Prisma и определяет модель для вашего приложения. На данный момент вы только создаете файлы и образец модели данных. Вы не вносите никаких изменений в базу данных, пока не запуститеprisma deploy
позже на этом шаге.
Теперь вы можете запустить следующую команду локально, чтобы создать новую файловую структуру:
prisma init hello-world
После запуска этой команды вы увидите интерактивное приглашение. При появлении запроса выберитеUse other server
и нажмитеENTER
:
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
Затем вы предоставите конечную точку вашего сервера, который действует как сервер Prisma. Это будет выглядеть примерно так:http://SERVER_IP_ADDRESS:4466
. Это ключ к тому, что конечная точка начинается с http (или https) и имеет номер порта.
OutputEnter the endpoint of your Prisma server http://SERVER_IP_ADDRESS:4466
Для секрета API управления введите фразу или пароль, которые вы указали ранее в файле конфигурации:
OutputEnter the management API secret my-secret
Для последующих опций вы можете выбрать переменные по умолчанию, нажавENTER
дляservice name
иservice stage
:
OutputChoose a name for your service hello-world
Choose a name for your stage dev
Вам также будет предоставлен выбор языка программирования для клиента Prisma. В этом случае вы можете выбрать предпочитаемый язык. Вы можете узнать больше о клиентеhere.
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
После того, как вы завершили запрос, вы увидите следующий вывод, который подтверждает ваш выбор:
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
Перейдите в каталогhello-world
:
cd hello-world
Синхронизируйте эти изменения со своим сервером с помощьюprisma deploy
. Это отправляет информацию на сервер Prisma с вашего локального компьютера и создает службу Prisma на сервере Prisma:
prisma deploy
Note: повторный запускprisma deploy
обновит вашу службу Prisma.
Ваш вывод будет выглядеть примерно так:
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
Вывод показывает, что Prisma обновила вашу базу данных в соответствии с вашей моделью данных (созданной на шагеprisma init
) с помощьюtypeUser
. Типы являются неотъемлемой частью модели данных; они представляют элемент из вашего приложения, и каждый тип содержит несколько полей. Для вашей модели данных связаны поля, описывающие пользователя: идентификатор пользователя, имя, время его создания и время его обновления.
Если вы столкнулись с проблемами на этом этапе и получили другой вывод, дважды проверьте правильность ввода всех полей в интерактивном режиме. Вы можете сделать это, просмотрев содержимое файлаprisma.yml
.
С запущенной службой Prisma вы можете подключиться к двум различным конечным точкам:
-
Интерфейс управления, доступный на
http://SERVER_IP_ADDRESS:4466/management
, где вы можете управлять и развертывать службы Prisma. -
API GraphQL для вашего сервиса Prisma, доступный по адресу
http://SERVER_IP_ADDRESS:4466/hello-world/dev
.
Вы успешно настроили и развернули свой сервер Prisma. Теперь вы можете исследовать запросы и мутации в GraphQL.
[[step-4 -—- running-an-example-query]] == Шаг 4. Выполнение примера запроса
Чтобы изучить другой вариант использования Prisma, вы можете поэкспериментировать с инструментомGraphQL playground, который представляет собой интегрированную среду разработки GraphQL с открытым исходным кодом (IDE) на вашем сервере. Чтобы получить к нему доступ, перейдите на свою конечную точку в браузере с предыдущего шага:
http://SERVER_IP_ADDRESS:4466/hello-world/dev
mutation - это термин GraphQL, который описывает способ изменения - создания, обновления или удаления (CRUD) - данных в бэкэнде через GraphQL. Вы можете отправить мутацию, чтобы создать нового пользователя и изучить функциональность. Для этого запустите следующую мутацию в левой части страницы:
mutation {
createUser(data: { name: "Alice" }) {
id
name
}
}
Как только вы нажмете кнопку воспроизведения, вы увидите результаты в правой части страницы.
Впоследствии, если вы хотите найти пользователя, используя столбецID
в базе данных, вы можете выполнить следующий запрос:
query {
user(where: { id: "cjkar2d62000k0847xuh4g70o" }) {
id
name
}
}
Теперь у вас есть сервер и сервис Prisma, работающий на вашем сервере, и вы выполнили тестовые запросы в среде IDE GraphQL.
Заключение
У вас есть работающая настройка Prisma на вашем сервере. Вы можете увидеть некоторые дополнительные варианты использования Prisma и следующие шаги вGetting Started Guide или изучить набор функций Prisma вPrisma Docs. После того, как вы выполнили все шаги в этом руководстве, у вас есть несколько вариантов проверки вашего подключения к базе данных, одна из которых - использованиеPrisma Client.