Налаштування Neon (Serverless Postgres) для веб-застосунку

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Neon (Serverless Postgres) для веб-застосунку
Середня
від 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

Neon Serverless Postgres для веб-приложення

Neon — serverless PostgreSQL з розділенням хранилища та compute, бранчингом баз даних та автоматичним scale-to-zero. Compute екземпляр запускається за ~500ms при першому запиті й зупиняється після періоду простою. Платіть тільки за активний час, а не за 24/7 запущений сервер.

Ключові можливості

Scale-to-zero: корисно для dev/staging — не платити за простаювальні екземпляри. Production з постійним трафіком від scale-to-zero не виграє — cold start затримка неприйнятна для користувачів.

Branching: миттєві копії бази через copy-on-write. Кожна гілка — повноцінна PostgreSQL endpoint:

# Гілка для PR-preview
neon branches create --name preview/pr-123 --parent main

# Гілка для розробки
neon branches create --name dev/feature-payments --parent main

Serverless Driver: HTTP-транспорт замість TCP. Обов'язковий для edge runtimes (Cloudflare Workers, Vercel Edge Functions), де немає постійних TCP-з'єднань:

import { neon } from '@neondatabase/serverless';

const sql = neon(process.env.DATABASE_URL!);

// Верхнеуровневий await у edge функції
export default async function handler(req: Request) {
  const posts = await sql`SELECT id, title FROM posts WHERE published = true LIMIT 10`;
  return Response.json(posts);
}

Підключення з Prisma

npm install @prisma/client @neondatabase/serverless prisma
// schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
  // Neon використовує ?sslmode=require в URL
}
// lib/prisma.ts — у Edge Runtime використовуємо HTTP-адаптер
import { PrismaClient } from '@prisma/client';
import { Pool, neonConfig } from '@neondatabase/serverless';
import { PrismaNeon } from '@prisma/adapter-neon';
import ws from 'ws';

neonConfig.webSocketConstructor = ws; // для Node.js

const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const adapter = new PrismaNeon(pool);

export const prisma = new PrismaClient({ adapter });

Connection pooling

Бессерверні функції не утримують довгоживучих з'єднань — кожен invocation відкриває нове. Neon має вбудований PgBouncer:

# Звичайне з'єднання (прямо до PostgreSQL)
postgresql://user:[email protected]/mydb

# Через пулер (для serverless)
postgresql://user:[email protected]/mydb?pgbouncer=true

Для Next.js serverless функцій використовуйте pooler URL. Для довгоживучих процесів (cron jobs, workers) — прямо з'єднання.

Branching у CI/CD

# GitHub Actions — створити гілку для кожного PR
- name: Create Neon branch
  uses: neondatabase/create-branch-action@v5
  id: create-branch
  with:
    project_id: ${{ vars.NEON_PROJECT_ID }}
    api_key: ${{ secrets.NEON_API_KEY }}
    branch_name: preview/pr-${{ github.event.pull_request.number }}
    parent: main

- name: Run migrations on branch
  env:
    DATABASE_URL: ${{ steps.create-branch.outputs.db_url }}
  run: npx prisma migrate deploy

- name: Deploy Preview
  env:
    DATABASE_URL: ${{ steps.create-branch.outputs.db_url }}
  run: vercel deploy --env DATABASE_URL=$DATABASE_URL

# При закритті PR — видалити гілку
- name: Delete Neon branch
  if: github.event.action == 'closed'
  uses: neondatabase/delete-branch-action@v3
  with:
    project_id: ${{ vars.NEON_PROJECT_ID }}
    branch: preview/pr-${{ github.event.pull_request.number }}
    api_key: ${{ secrets.NEON_API_KEY }}

Обмеження

  • Максимальний розмір рядка 8 КБ (стандартний PostgreSQL)
  • Не підтримує деякі PostgreSQL розширення (PostGIS підтримується, btree_gist — так, pgaudit — ні)
  • Scale-to-zero cold start ~500ms — неприйнятний для production з SLA < 1 секунди
  • Вартість на високих навантаженнях може перевищити dedicated PostgreSQL

Коли вибирати Neon

Підходить:

  • Next.js / Vercel програми зі змінною нагрузкою
  • Стартапи з низьким початковим трафіком
  • Preview окремення для кожного PR
  • Бессерверні функції на edge

Не підходить:

  • Високонавантажені production системи (>1000 req/sec до БД)
  • Програми з жорсткими latency вимогами
  • Довгоживучі з'єднання (PostgreSQL LISTEN/NOTIFY, logical replication)

Графік

Налаштування Neon проекту, Prisma + HTTP-адаптер, CI pipeline з branching per PR, pooler для serverless: 1–2 дні.