Как вручную настроить сервер Prisma в Ubuntu 18.04

Автор выбрал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.

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

Вы успешно настроили и развернули свой сервер 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
  }
}

Как только вы нажмете кнопку воспроизведения, вы увидите результаты в правой части страницы.
GraphQL Playground Creating a New User

Впоследствии, если вы хотите найти пользователя, используя столбецID в базе данных, вы можете выполнить следующий запрос:

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

Теперь у вас есть сервер и сервис Prisma, работающий на вашем сервере, и вы выполнили тестовые запросы в среде IDE GraphQL.

Заключение

У вас есть работающая настройка Prisma на вашем сервере. Вы можете увидеть некоторые дополнительные варианты использования Prisma и следующие шаги вGetting Started Guide или изучить набор функций Prisma вPrisma Docs. После того, как вы выполнили все шаги в этом руководстве, у вас есть несколько вариантов проверки вашего подключения к базе данных, одна из которых - использованиеPrisma Client.

Related