Налаштування PlanetScale для веб-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування PlanetScale для веб-застосунку
Середня
від 1 робочого дня до 3 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування PlanetScale для веб-додатку

PlanetScale — управляна MySQL на основі Vitess (та ж технологія, що масштабує YouTube та Slack). Головна особливість — branching для схеми бази даних: як git-гілки, але для структури таблиць. Deploy requests дозволяють робити schema changes без downtime та без страху заблокувати production.

Створення проекту

# Встановлення CLI
curl -fsSL https://raw.githubusercontent.com/planetscale/cli/main/install.sh | bash

# Аутентифікація
pscale auth login

# Створення бази
pscale database create myapp --region eu-central

# Гілка за умовчанням — main (це production)
pscale branch list myapp

Підключення до production

# Проксі для локальної роботи
pscale connect myapp main --port 3309

# Connection string
DATABASE_URL="mysql://[email protected]:3309/myapp"

Для production додатку — отримати credentials у dashboard: Settings → Passwords → New password. PlanetScale не підтримує прямі підключення без TLS.

DATABASE_URL="mysql://username:[email protected]/myapp?sslaccept=strict"

Branching для міграцій

# Створити гілку для нової фічі
pscale branch create myapp add-user-profiles

# Підключитися до гілки
pscale connect myapp add-user-profiles --port 3309

# Застосувати міграцію до гілки
mysql -u root -h 127.0.0.1 -P 3309 myapp < migrations/add_profiles.sql

# Створити deploy request (як pull request для схеми)
pscale deploy-request create myapp add-user-profiles

# Посмотреть diff
pscale deploy-request diff myapp 1

# Задеплоїти
pscale deploy-request deploy myapp 1

Prisma + PlanetScale

PlanetScale не підтримує foreign keys на рівні бази (обмеження Vitess) — лише application-level обмеження.

// schema.prisma
datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL")
  relationMode = "prisma"  // емуляція FK на рівні Prisma
}

model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String
  posts     Post[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  @@index([email])
}

model Post {
  id        String   @id @default(cuid())
  title     String
  content   String?  @db.Text
  authorId  String
  author    User     @relation(fields: [authorId], references: [id])
  createdAt DateTime @default(now())

  @@index([authorId])  // обов'язково при relationMode = "prisma"
}
# Створити міграцію (не застосовуйте до main напрямую)
prisma migrate diff \
  --from-empty \
  --to-schema-datamodel prisma/schema.prisma \
  --script > migrations/0001_init.sql

# Застосувати до гілки
pscale connect myapp dev --port 3309
prisma db push  # або вручну через mysql-client

Робота з даними

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient({
  datasources: {
    db: { url: process.env.DATABASE_URL }
  },
  log: process.env.NODE_ENV === 'development' ? ['query'] : ['error']
})

// Запит з розбиванням на сторінки
async function getPosts(page: number, limit = 20) {
  const [posts, total] = await Promise.all([
    prisma.post.findMany({
      skip: (page - 1) * limit,
      take: limit,
      include: { author: { select: { id: true, name: true } } },
      orderBy: { createdAt: 'desc' }
    }),
    prisma.post.count()
  ])
  return { posts, total, pages: Math.ceil(total / limit) }
}

Insights — аналітика запитів

PlanetScale Dashboard → Insights показує топ запитів за навантаженням. Не потрібно налаштовувати slow query log вручную. Запити без індексів виділяються окремо.

Обмеження PlanetScale

  • Нема підтримки хранимих процедур та тригерів
  • Нема foreign key constraints на рівні БД
  • Нема SELECT ... FOR UPDATE у деяких конфігураціях
  • Максимальний розмір рядка — 65535 байт
  • Безплатний план: 5 ГБ сховища, 1 млрд row reads/місяць

Бэкапи

PlanetScale автоматично створює щоденні бэкапи на платних планах. Ручний експорт:

pscale database dump myapp main --output ./backup_$(date +%Y%m%d)

Терміни

Налаштування PlanetScale проекту, підключення Prisma та конфігурація branching workflow: 1 день. Інтеграція з CI/CD (автоматичні deploy requests з гілки): ще 1 день. Повне налаштування для нового проекту — 1–2 дні.