Üretim Ortamı ve Dağıtım Rehberi

CopyPatch v2, doğrudan ana web uygulamanızın sunucusu içinde barındırılır. API rotası aynı HTTPS kökeni (same-origin) altında /__copypatch/api/v2 adresinde çalıştığı için ek süreçler, açık portlar veya CORS reverse proxy kuralları gerektirmez.

1. Kalıcılık (Depolama) Yapılandırması

Seçenek A: SQLite (Tek Node Sunucusu / VPS / Konteyner)

SQLite tek sunuculu yapılar için son derece hızlı, işlemsel ve sıfır bakım maliyetlidir:

lib/copypatch.ts (SQLite)
import { createSQLitePersistence } from '@copypatch/storage-sqlite';

const persistence = createSQLitePersistence({
  filename: process.env.COPYPATCH_SQLITE_PATH ?? './data/copypatch.sqlite',
  busyTimeoutMs: 5_000,
});

// Sunucu başlarken şema migrasyonlarını çalıştırın
await persistence.migrate();
  • Kalıcı Disk (Persistent Volume): Docker veya Kubernetes üzerinde veritabanı dosyasını ve WAL yan dosyalarını (.sqlite-wal ve .sqlite-shm) korumak için kalıcı bir dizin (örn. /data) bağlayın.
  • WAL Modu: @copypatch/storage-sqlite yüksek eşzamanlılık için WAL (Write-Ahead Logging) modunu ve meşgul yeniden deneme sürelerini otomatik olarak yönetir.

Seçenek B: PostgreSQL (Çoklu Sunucu Kümeleri / Sunucusuz Mimari)

PostgreSQL, birden fazla sunucu örneğinde metinleri, taslakları ve hız sınırlarını senkronize eder:

lib/copypatch.ts (PostgreSQL)
import { Pool } from 'pg';
import { createPostgresPersistence } from '@copypatch/storage-postgres';

const pool = new Pool({
  connectionString: process.env.DATABASE_URL!,
  max: 10,
  idleTimeoutMillis: 30000,
  ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: true } : false,
});

const persistence = createPostgresPersistence({
  pool,
  schema: 'copypatch',
});

// Idempotent şema migrasyonları (PostgreSQL advisory transaction kilitleri ile korunur)
await persistence.migrate();
  • Advisory Kilitleri: Şema migrasyonları PostgreSQL transaction advisory kilitleri kullanarak eşzamanlı konteyner dağıtımlarında mükerrer migrasyon riskini engeller.
  • Bağlantı Havuzu: Mevcut bir pg.Pool nesnesini aktararak ana uygulamanızla veritabanı bağlantılarını paylaşabilirsiniz.

2. Ortam Değişkenleri Referansı

Değişken Zorunluluk Açıklama
COPYPATCH_PASSPHRASE_HASH Evet (Dahili auth için) copypatch hash --stdin ile üretilmiş Argon2id parola özeti.
COPYPATCH_SQLITE_PATH Hayır (SQLite için) SQLite veritabanı dosyasının mutlak veya göreli yolu (varsayılan: ./data/copypatch.sqlite).
DATABASE_URL Evet (Postgres için) PostgreSQL bağlantı dizgisi (örn. postgres://user:pass@host:5432/dbname).
NODE_ENV Önerilir Güvenli çerez bayraklarını ve HTTPS kurallarını etkinleştirmek için production olarak ayarlayın.

3. Sağlık Denetimi ve İzleme

CopyPatch, /__copypatch/api/v2/health adresinde hafif bir sağlık uç noktası sağlar:

Sağlık Denetimi
// Sağlık denetimi uç noktası
// curl -i https://siteniz.com/__copypatch/api/v2/health
// HTTP/1.1 200 OK
// Content-Type: application/json
{
  "status": "ok",
  "version": "2.0.0",
  "storage": "ready"
}

4. Üretim Dağıtım Kontrol Listesi

  • HTTPS Zorunluluğu: Secure ve __Host- oturum çerezlerinin çalışması için uygulamanızı HTTPS üzerinden sunun.
  • Açılışta Migrasyon: Trafik kabul etmeden önce sunucu başlatma kodunuzda await persistence.migrate() fonksiyonunu çağırın.
  • Statik SSG ile Düzenleme Yapılamaz: Barındırma ortamınızın API rotasını Node.js veya sunucusuz fonksiyon olarak yürüttüğünden emin olun.
  • Düzenli Yedekleme: SQLite disk hacminizi veya PostgreSQL veritabanınızı otomatik periyodik yedekleme planınıza dahil edin.