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:
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:
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:
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:
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:
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:
| Komponent | Minimum | Zalecane |
|---|---|---|
| CPU | 1 vCPU | 2+ vCPU |
| Pamięć | 1 GB RAM | 2+ GB RAM |
| Dysk | 10 GB | Zależy od rozmiaru katalogu i przechowywania zasobów |
| Baza danych | PostgreSQL 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:
| Zmienna | Opis |
|---|---|
DB_HOST | Nazwa hosta serwera bazy danych |
DB_PORT | Port serwera bazy danych |
DB_USERNAME | Nazwa użytkownika bazy danych |
DB_PASSWORD | Hasło do bazy danych |
DB_NAME | Nazwa bazy danych |
REDIS_HOST | Nazwa hosta serwera Redis |
REDIS_PORT | Port serwera Redis |
REDIS_PASSWORD | Hasło Redis |
COOKIE_SECRET | Sekret do podpisywania ciasteczek sesji |
SUPERADMIN_IDENTIFIER | Identyfikator logowania superadmina |
SUPERADMIN_PASSWORD | Hasło logowania superadmina |
S3_BUCKET | Nazwa bucketu S3 do przechowywania zasobów |
S3_ACCESS_KEY_ID | Klucz dostępu S3 |
S3_SECRET_ACCESS_KEY | Sekretny klucz S3 |
S3_REGION | Region S3 |
ASSET_URL_PREFIX | Publiczny 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 buildJako 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
- Wdrożenie Docker — wdrażanie za pomocą Docker i Docker Compose