- Home »

Как создать GraphQL API с Prisma и развернуть на DigitalOcean
Сегодня разберёмся, как быстро и без боли поднять современный GraphQL API с помощью Prisma и развернуть всё это добро на DigitalOcean. Почему это важно? Потому что GraphQL — это не просто модная штука, а реально удобный способ строить API, который экономит время и нервы как разработчикам, так и тем, кто обслуживает инфраструктуру. Prisma — это ORM нового поколения, который отлично дружит с TypeScript и позволяет не только быстро стартовать, но и поддерживать проект в долгую. А DigitalOcean — это тот самый хостинг, где можно за пару минут получить сервер и не тратить часы на бессмысленную настройку. В этой статье — только практика, никакой воды: как всё работает, как быстро всё настроить, какие грабли могут встретиться и как их обойти. Погнали!
Как это работает: GraphQL, Prisma и DigitalOcean
Давай разложим по полочкам, что тут вообще происходит:
- GraphQL — язык запросов к API, который позволяет клиенту самому выбирать, какие данные ему нужны. Забудь про REST-эндпоинты типа
/users/1/posts
— теперь всё через один запрос, гибко и удобно. - Prisma — это ORM (Object-Relational Mapping), который превращает работу с базой данных в удовольствие. Миграции, автогенерация типов, удобные запросы — всё из коробки.
- DigitalOcean — облачный провайдер, где можно быстро поднять VPS (или даже Managed DB), не заморачиваясь с инфраструктурой.
В связке это выглядит так: клиент (например, фронтенд на React или мобильное приложение) шлёт запросы на GraphQL API, который работает на сервере (Node.js). Сервер использует Prisma для общения с базой данных (PostgreSQL, MySQL, SQLite — на выбор). Всё это крутится на VPS от DigitalOcean.
Как быстро и просто всё настроить: пошаговая инструкция
Переходим к самому вкусному — как всё это поднять с нуля. Вот пошаговый гайд, который реально работает.
- Завести сервер на DigitalOcean
- Регистрируешься на DigitalOcean (или заходишь, если уже есть аккаунт).
- Создаёшь новый Droplet (VPS). Для теста хватит самого дешёвого варианта (1 ГБ RAM, 1 vCPU).
- Выбираешь Ubuntu 22.04 LTS (или свежую версию).
- Получаешь IP, логинишься по SSH.
- Если нужен сервер под ключ — заказать VPS или выделенный сервер.
- Установка Node.js, npm и git
- Обновляем систему:
- Ставим Node.js (лучше через nvm):
- Проверяем:
- Устанавливаем git:
sudo apt update && sudo apt upgrade -y
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install --lts
node -v
npm -v
sudo apt install git -y
- Установка PostgreSQL (или другой СУБД)
- Для примера — PostgreSQL:
- Создаём пользователя и базу:
sudo apt install postgresql postgresql-contrib -y
sudo -u postgres psql
CREATE USER myuser WITH PASSWORD 'mypassword';
CREATE DATABASE mydb OWNER myuser;
\q
- Инициализация проекта с Prisma и GraphQL
- Создаём папку и инициализируем проект:
- Ставим зависимости:
- Dev-зависимости:
- Инициализируем Prisma:
- В
prisma/schema.prisma
прописываем модель, например: - Обновляем
.env
с данными подключения к базе: - Генерируем миграцию:
mkdir my-graphql-api && cd my-graphql-api
npm init -y
npm install @prisma/client graphql-yoga graphql
npm install prisma ts-node typescript @types/node --save-dev
npx prisma init
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
DATABASE_URL="postgresql://myuser:mypassword@localhost:5432/mydb"
npx prisma migrate dev --name init
- Пишем GraphQL API
- Создаём файл
index.ts
: - Добавляем скрипт запуска в
package.json
: - Запускаем сервер:
- Проверяем
http://your_server_ip:4000/graphql
import { createServer } from 'node:http';
import { createYoga, createSchema } from 'graphql-yoga';
import { PrismaClient } from '@prisma/client';const prisma = new PrismaClient();
const typeDefs = `#graphql
type User {
id: ID!
email: String!
name: String
}
type Query {
users: [User!]!
}
type Mutation {
createUser(email: String!, name: String): User!
}
`;const resolvers = {
Query: {
users: () => prisma.user.findMany(),
},
Mutation: {
createUser: (_: any, args: any) => prisma.user.create({ data: args }),
},
};const yoga = createYoga({
schema: createSchema({
typeDefs,
resolvers,
}),
});createServer(yoga).listen(4000, () => {
console.log('GraphQL API ready at http://localhost:4000/graphql');
});
"scripts": {
"dev": "ts-node index.ts"
}
npm run dev
- Создаём файл
- Настройка деплоя и автозапуска
- Ставим pm2 для автозапуска:
- Собираем проект (если TypeScript):
- Запускаем через pm2:
- Сохраняем конфиг:
npm install -g pm2
npx tsc
pm2 start dist/index.js --name my-graphql-api
pm2 save
pm2 startup
- Настройка firewall (UFW)
- Открываем нужные порты:
sudo ufw allow OpenSSH
sudo ufw allow 4000/tcp
sudo ufw enable
Примеры, схемы, практические советы
Вот несколько кейсов из жизни, чтобы не наступать на грабли:
Кейс | Что пошло не так | Рекомендация |
---|---|---|
Миграции Prisma ломают базу | Миграция с ошибкой — база в неконсистентном состоянии | Делай бэкап перед миграциями, используй prisma migrate resolve для ручного контроля |
GraphQL API тормозит | Слишком сложные запросы, нет пагинации | Внедри пагинацию, лимиты, rate limiting (например, через express-rate-limit) |
Секреты в git | .env случайно закоммичен | Добавь .env в .gitignore , используй 12factor подход |
Сервер падает после рестарта | Нет автозапуска | Используй pm2/systemd, проверь pm2 save |
База недоступна снаружи | Postgres слушает только localhost | Оставь так для безопасности, если нужен внешний доступ — настрой VPN или SSH-туннель |
Похожие решения, программы и утилиты
- Hasura — автоматический GraphQL API поверх Postgres, но меньше гибкости, чем с Prisma + Yoga. Официальный сайт
- PostGraphile — похож на Hasura, но с акцентом на Postgres. Официальный сайт
- TypeORM, Sequelize — альтернативные ORM, но Prisma проще и быстрее для старта.
- Apollo Server — популярный GraphQL сервер, но Yoga проще для быстрого старта. Документация
Решение | Плюсы | Минусы |
---|---|---|
Prisma + Yoga | Гибкость, скорость, поддержка TypeScript, простота миграций | Нужно писать схему и резолверы вручную |
Hasura | Мгновенный GraphQL API, UI для админки | Сложнее кастомизировать бизнес-логику |
PostGraphile | Глубокая интеграция с Postgres, автоматизация | Меньше гибкости, чем у Prisma |
TypeORM/Sequelize | Много фич, поддержка разных БД | Более сложная настройка, устаревшие подходы |
Статистика, сравнение, интересные факты
- Prisma — один из самых быстрорастущих ORM-проектов на GitHub (более 35k звёзд).
- GraphQL используется в продакшене у Facebook, GitHub, Shopify, Twitter.
- DigitalOcean — один из самых популярных хостингов среди стартапов и pet-проектов (по данным Stack Overflow Developer Survey 2023).
- GraphQL позволяет уменьшить трафик между клиентом и сервером до 30-50% по сравнению с REST (по данным официального сайта).
- Prisma поддерживает не только PostgreSQL, но и MySQL, SQLite, MongoDB, CockroachDB.
- Yoga — это GraphQL сервер, который работает out-of-the-box, не требует сложной настройки и поддерживает Subscriptions (WebSocket) для real-time.
Нестандартные способы использования
- Можно использовать GraphQL API как внутренний слой между микросервисами — удобно для интеграции и оркестрации данных.
- Prisma CLI отлично подходит для автоматизации миграций в CI/CD пайплайнах (например, через GitHub Actions).
- GraphQL Subscriptions позволяют строить real-time приложения (чат, уведомления) без отдельного сокет-сервера.
- Можно генерировать типы для фронтенда (например, через GraphQL Code Generator) и получать автокомплит прямо в редакторе.
- Prisma поддерживает seed-скрипты для автоматического наполнения базы тестовыми данными — удобно для тестирования и демо.
Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?
- Быстрый деплой новых фич: меняешь схему, мигрируешь базу, обновляешь резолверы — и всё готово.
- Можно автоматизировать CI/CD: деплой, миграции, тесты — всё через скрипты и GitHub Actions.
- Гибкая интеграция с другими сервисами: GraphQL легко проксировать, объединять, расширять.
- Мониторинг и логирование: легко добавить middleware для логирования запросов, метрик, трейсинга.
- Масштабируемость: можно быстро клонировать инстансы, балансировать нагрузку через nginx или cloud load balancer.
- Безопасность: легко внедрять аутентификацию, авторизацию, rate limiting.
Вывод — заключение и рекомендации
Если тебе нужен современный, гибкий и быстрый API — GraphQL с Prisma на DigitalOcean это реально топовый стек. Ты получаешь:
- Быстрый старт (от идеи до деплоя — за вечер, если не отвлекаться на мемы).
- Простую поддержку и масштабирование.
- Гибкость для любых задач — от pet-проекта до продакшена.
- Возможность автоматизировать всё, что можно автоматизировать.
- Массу документации и комьюнити (если что — всегда можно найти ответ на Stack Overflow).
Рекомендую использовать этот подход для:
- Быстрого прототипирования новых сервисов.
- Интеграции с мобильными и SPA-приложениями.
- Построения внутренних API для микросервисов.
- Автоматизации и скриптов, где нужен быстрый доступ к данным.
Если хочется не возиться с настройкой сервера — заказать VPS или выделенный сервер можно прямо тут. А если хочется разобраться самому — выше есть все команды и советы, которые реально работают. Удачи в продакшене и пусть твой API всегда будет быстрым и надёжным!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.