DeenruvDeenruv
Wdrożenie

Przegląd wdrożenia

Dowiedz się, jak wdrożyć Deenruv na produkcję, w tym wymagania serwerowe, konfiguracja i strategie wdrożeniowe

Ten poradnik omawia kluczowe zagadnienia i kroki związane z wdrożeniem aplikacji e-commerce Deenruv w środowisku produkcyjnym.

Wymagania wstępne

Przed wdrożeniem upewnij się, że posiadasz:

  • Node.js v18+ zainstalowany na serwerze
  • Obsługiwaną bazę danych — PostgreSQL jest rekomendowany do produkcji (MySQL i MariaDB są również obsługiwane)
  • Redis — wymagany w przypadku korzystania z pluginu kolejki zadań BullMQ (zalecany dla produkcji)
  • Usługę przechowywania obiektów dla zasobów (np. S3, MinIO lub kompatybilny dostawca) — lub wystarczającą przestrzeń dyskową dla strategii lokalnego przechowywania zasobów
  • Reverse proxy, taki jak Nginx lub Caddy, do terminacji TLS i równoważenia obciążenia

Konfiguracja produkcyjna

Przy przejściu z developmentu na produkcję kilka zmian konfiguracyjnych jest niezbędnych:

Baza danych

Przejdź z SQLite (jeśli używany w developmencie) na PostgreSQL do produkcji:

src/deenruv-config.ts
import { DeenruvConfig } from '@deenruv/core';

export const config: DeenruvConfig = {
    dbConnectionOptions: {
        type: 'postgres',
        // Używaj zmiennych środowiskowych dla wrażliwych wartości
        host: process.env.DB_HOST,
        port: +(process.env.DB_PORT || 5432),
        username: process.env.DB_USERNAME,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        // WAŻNE: wyłącz synchronize na produkcji
        synchronize: false,
        migrations: [path.join(__dirname, 'migrations/*.js')],
    },
};

Nigdy nie ustawiaj synchronize: true na produkcji. Ta opcja automatycznie modyfikuje schemat bazy danych i może spowodować utratę danych. Zawsze używaj migracji.

Uwierzytelnianie

Zaktualizuj domyślne dane logowania superadmina i ustawienia uwierzytelniania:

src/deenruv-config.ts
export const config: DeenruvConfig = {
    authOptions: {
        tokenMethod: ['bearer', 'cookie'],
        requireVerification: true,
        superadminCredentials: {
            identifier: process.env.SUPERADMIN_IDENTIFIER || 'superadmin',
            password: process.env.SUPERADMIN_PASSWORD,
        },
        cookieOptions: {
            secret: process.env.COOKIE_SECRET,
        },
    },
};

Opcje API

Wyłącz narzędzia debugowania na produkcji:

src/deenruv-config.ts
export const config: DeenruvConfig = {
    apiOptions: {
        port: +(process.env.PORT || 3000),
        adminApiPlayground: false,
        adminApiDebug: false,
        shopApiPlayground: false,
        shopApiDebug: false,
    },
};

Przechowywanie zasobów

Skonfiguruj zewnętrzną strategię przechowywania zasobów (np. S3) zamiast lokalnego przechowywania plików:

src/deenruv-config.ts
import { AssetServerPlugin, configureS3AssetStorage } from '@deenruv/asset-server-plugin';

export const config: DeenruvConfig = {
    plugins: [
        AssetServerPlugin.init({
            route: 'assets',
            assetUploadDir: '/tmp/deenruv-assets',
            assetUrlPrefix: process.env.ASSET_URL_PREFIX,
            storageStrategyFactory: configureS3AssetStorage({
                bucket: process.env.S3_BUCKET,
                credentials: {
                    accessKeyId: process.env.S3_ACCESS_KEY_ID,
                    secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
                },
                nativeS3Configuration: {
                    region: process.env.S3_REGION,
                },
            }),
        }),
    ],
};

Kolejka zadań

Użyj pluginu kolejki zadań BullMQ z Redis do obciążeń produkcyjnych:

src/deenruv-config.ts
import { BullMQJobQueuePlugin } from '@deenruv/job-queue-plugin/package/bullmq';

export const config: DeenruvConfig = {
    plugins: [
        BullMQJobQueuePlugin.init({
            connection: {
                host: process.env.REDIS_HOST,
                port: +(process.env.REDIS_PORT || 6379),
                password: process.env.REDIS_PASSWORD,
            },
        }),
    ],
};

Wymagania zasobów serwera

Minimalne zalecane zasoby serwera do produkcyjnego wdrożenia Deenruv:

KomponentMinimumZalecane
CPU1 vCPU2+ vCPU
Pamięć1 GB RAM2+ GB RAM
Dysk10 GBZależy od rozmiaru katalogu i przechowywania zasobów
Baza danychPostgreSQL 14+PostgreSQL 16+ z dedykowanymi zasobami

Te wymagania zakładają wdrożenie na pojedynczym serwerze z umiarkowanym ruchem. Dla sklepów z dużym ruchem rozważ skalowanie horyzontalne z load balancerem i oddzielnym serwerem bazy danych.

Zmienne środowiskowe

Używaj zmiennych środowiskowych dla wszystkich wrażliwych i specyficznych dla środowiska konfiguracji:

ZmiennaOpis
DB_HOSTNazwa hosta serwera bazy danych
DB_PORTPort serwera bazy danych
DB_USERNAMENazwa użytkownika bazy danych
DB_PASSWORDHasło do bazy danych
DB_NAMENazwa bazy danych
REDIS_HOSTNazwa hosta serwera Redis
REDIS_PORTPort serwera Redis
REDIS_PASSWORDHasło Redis
COOKIE_SECRETSekret do podpisywania ciasteczek sesji
SUPERADMIN_IDENTIFIERIdentyfikator logowania superadmina
SUPERADMIN_PASSWORDHasło logowania superadmina
S3_BUCKETNazwa bucketu S3 do przechowywania zasobów
S3_ACCESS_KEY_IDKlucz dostępu S3
S3_SECRET_ACCESS_KEYSekretny klucz S3
S3_REGIONRegion S3
ASSET_URL_PREFIXPubliczny prefiks URL dla zasobów

Wdrażanie panelu administracyjnego

Panel administracyjny Deenruv może być wdrożony na kilka sposobów:

Dołączony do serwera

Domyślnie AdminUiPlugin serwuje panel administracyjny z tego samego serwera:

AdminUiPlugin.init({
    route: 'admin',
    port: 3002,
}),

Do produkcji należy prekompilować panel administracyjny podczas etapu budowania, aby uniknąć kompilacji na serwerze produkcyjnym:

# Podczas procesu budowania
pnpm build

Jako samodzielna aplikacja statyczna

Alternatywnie możesz zbudować panel administracyjny jako samodzielną aplikację statyczną i hostować go oddzielnie (np. na CDN):

AdminUiPlugin.init({
    route: 'admin',
    port: 3002,
    app: compileUiExtensions({
        outputPath: path.join(__dirname, '../admin-ui'),
        devMode: false,
    }),
}),

Następnie wdróż zawartość katalogu admin-ui u dostawcy hostingu statycznego.

Następne kroki

Na tej stronie