پرش به مطلب اصلی

تنظیمات محیط توسعه و تولید

این راهنما نحوه تنظیم و مدیریت محیط‌های توسعه (Development) و تولید (Production) در فریمورک کیمیا را توضیح می‌دهد.

نمای کلی تنظیمات

فریمورک کیمیا از سه سطح تنظیمات پشتیبانی می‌کند:

  1. تنظیمات پایه: فایل‌های dev.ts و prod.ts در دایرکتوری core/settings/
  2. تنظیمات JSON: فایل settings.json برای بازنویسی تنظیمات
  3. متغیرهای محیطی: برای تنظیمات حساس و پویا

نحوه بارگذاری تنظیمات

انتخاب محیط اجرا

سرویس بر اساس پارامتر خط فرمان محیط اجرا را تعیین می‌کند:

# محیط توسعه
npm start dev

# محیط تولید (پیش‌فرض)
npm start

اولویت بارگذاری تنظیمات

  1. تنظیمات پایه محیط (dev.ts یا prod.ts)
  2. تنظیمات فایل JSON (settings.json)
  3. متغیرهای محیطی

تنظیمات محیط توسعه

فایل core/settings/dev.ts

export function load(): KimiaSettings {
const Settings: KimiaSettings = {
// تنظیمات پایه توسعه
DEBUG_MODE: true,
DEBUG_VERBOSE: true,
SERVER_PORT: 8081,
HOST_NAME: "http://localhost:8081",
SECRET_KEY: "_development_",

// ذخیره‌سازی محلی
STORAGE: {
type: "local",
localPath: PATH.join(__dirname, "..", "..", "storage"),
},

// مسیرهای موقت و کش
TMP_PATH: "/tmp",
CACHE_PATH: "/tmp/cache",

// دیتابیس SQLite برای توسعه
DATABASE_INFO: {
driver: "sqlite",
path: "database.db",
dbName: "v2",
},

// سایر تنظیمات...
};
return Settings;
}

ویژگی‌های کلیدی محیط توسعه

  • DEBUG_MODE: فعال برای نمایش اطلاعات اشکال‌زدایی
  • DEBUG_VERBOSE: فعال برای لاگ‌های مفصل
  • SERVER_PORT: پورت 8081 برای توسعه محلی
  • HOST_NAME: آدرس localhost
  • SECRET_KEY: کلید ساده برای توسعه
  • DATABASE_INFO: استفاده از SQLite برای سهولت توسعه

تنظیمات محیط تولید

فایل core/settings/prod.ts

export function load(): KimiaSettings {
const Settings = dev(); // بارگذاری تنظیمات توسعه به عنوان پایه

// بازنویسی تنظیمات برای تولید
Settings.DEBUG_MODE = false;
Settings.DEBUG_VERBOSE = false;

// تنظیمات ذخیره‌سازی
Settings.STORAGE = {
type: "local",
localPath: PATH.join(__dirname, "..", "..", "storage"),
};

// تنظیم مسیرها
Settings.APPS_PATH = PATH.join(__dirname, "..");
Settings.APPS_RESOURCES_PATH = Settings.APPS_PATH;
Settings.SHARED_PATH = PATH.join(__dirname, "..", "shared");

// غیرفعال کردن راه‌اندازی مجدد خودکار
Settings.SHUTDOWN_INSTEAD_REBOOT = true;

return Settings;
}

ویژگی‌های کلیدی محیط تولید

  • DEBUG_MODE: غیرفعال برای عملکرد بهتر
  • DEBUG_VERBOSE: غیرفعال برای کاهش لاگ‌ها
  • SHUTDOWN_INSTEAD_REBOOT: جلوگیری از راه‌اندازی مجدد خودکار
  • STORAGE: مسیرهای مطلق برای محیط تولید

تنظیمات JSON سفارشی

ایجاد فایل settings.json

در ریشه پروژه فایل settings.json ایجاد کنید:

{
"database": {
"driver": "mysql",
"host": "localhost",
"dbName": "kimia_prod",
"username": "kimia_user",
"password": "secure_password"
},
"server": {
"port": 3000,
"host": "0.0.0.0"
},
"cache": {
"enabled": true,
"type": "redis",
"host": "localhost",
"port": 6379
}
}

نحوه اعمال تنظیمات JSON

تنظیمات JSON به صورت بازگشتی با تنظیمات پایه ادغام می‌شوند:

// ادغام تنظیمات شیء
for (const key of Object.keys(jsonSettings)) {
if (Global.ServerSettings[key] && typeof Global.ServerSettings[key] === "object") {
// ادغام برای اشیاء تو در تو
for (const key1 of Object.keys(jsonSettings[key])) {
Global.ServerSettings[key][key1] = jsonSettings[key][key1];
}
} else {
// بازنویسی مستقیم
Global.ServerSettings[key] = jsonSettings[key];
}
}

متغیرهای محیطی

تعریف متغیرهای محیطی

# تنظیمات دیتابیس
export DB_HOST=production-db.example.com
export DB_PASSWORD=super_secret_password

# تنظیمات سرور
export SERVER_PORT=443
export SSL_CERT_PATH=/path/to/ssl/cert.pem

استفاده در کد

// دسترسی به متغیرهای محیطی
const dbHost = envVar("DB_HOST", "localhost");
const dbPassword = envVar("DB_PASSWORD");

تنظیمات مهم برای هر محیط

تنظیمات مشترک

{
// اطلاعات سرور
SERVER_PORT: 8081,
HOST_NAME: "http://localhost:8081",

// امنیت
SECRET_KEY: "_development_",
TRUST_PROXY: 1,

// مسیرها
API_PATH: "/api",
ASSETS_URL: "/assets",

// آپلود فایل
MAX_USER_UPLOAD: 1000000000, // 1GB

// نشست‌ها
SESSION_INFO: {
lifetime: 60 * 24 * 30, // 30 روز
refreshTokenLifeTime: 60 * 24 * 60, // 60 روز
driver: "database",
cookieName: "kimia_app_session",
},

// محدودیت نرخ
RATE_LIMIT: {
enabled: true,
windowMs: 15 * 60 * 1000, // 15 دقیقه
max: 100, // حداکثر 100 درخواست
}
}

تنظیمات توسعه

{
DEBUG_MODE: true,
DEBUG_VERBOSE: true,

// دیتابیس ساده
DATABASE_INFO: {
driver: "sqlite",
path: "database.db",
},

// کش حافظه
MEMORY_CACHE_INFO: {
maxMemoryCacheSize: 100 * 1000 * 1000, // 100MB
},

// چندپردازشی غیرفعال
MULTI_PROCESSING: {
enabled: false,
}
}

تنظیمات تولید

{
DEBUG_MODE: false,
DEBUG_VERBOSE: false,

// دیتابیس قدرتمند
DATABASE_INFO: {
driver: "mysql",
host: "localhost",
dbName: "kimia_prod",
username: "kimia_user",
password: "secure_password",
},

// کش Redis
CACHE: {
type: "redis",
host: "localhost",
port: 6379,
},

// چندپردازشی فعال
MULTI_PROCESSING: {
enabled: true,
workers: "auto", // تعداد CPUها
},

// لاگ پیشرفته
LOG_INFO: {
path: "/var/log/kimia",
canWriteOnFile: true,
maxDebugFileSize: 100 * 1000 * 1000, // 100MB
}
}

راه‌اندازی برنامه

راه‌اندازی با تنظیمات سفارشی

import { startMainApplication } from '@core';

// راه‌اندازی با تنظیمات JSON
startMainApplication('./config/settings.json', {
overrideSettings: {
DEBUG_MODE: true,
SERVER_PORT: 3001,
}
});

استفاده از Sequelize سفارشی

import { Sequelize } from 'sequelize';
import { startMainApplication } from '@core';

const customSequelize = new Sequelize({
dialect: 'postgres',
host: 'localhost',
database: 'kimia_db',
username: 'user',
password: 'password',
});

startMainApplication('./settings.json', {
Sequelize: customSequelize,
});

نکات امنیتی

برای محیط تولید

  1. غیرفعال کردن DEBUG_MODE
  2. استفاده از SECRET_KEY قوی
  3. تنظیم TRUST_PROXY صحیح
  4. فعال کردن HTTPS
  5. استفاده از دیتابیس امن
  6. تنظیم محدودیت‌های آپلود

مثال تنظیمات امنیتی

{
"DEBUG_MODE": false,
"SECRET_KEY": "your-super-secure-random-key-here",
"TRUST_PROXY": 1,
"HTTPS": {
"enabled": true,
"key": "/path/to/private.key",
"cert": "/path/to/certificate.crt"
},
"MAX_USER_UPLOAD": 50000000, // 50MB
"RATE_LIMIT": {
"enabled": true,
"windowMs": 900000, // 15 دقیقه
"max": 50
}
}

عیب‌یابی تنظیمات

بررسی تنظیمات بارگذاری شده

import { Global } from '@core/global';

// نمایش تنظیمات فعلی
console.log('Current Settings:', Global.ServerSettings);
console.log('Server Mode:', Global.ServerSettingsMode);

لاگ‌های تنظیمات

فریمورک به صورت خودکار تنظیمات بارگذاری شده را لاگ می‌کند:

[settings] loaded json settings from '/path/to/settings.json'
[start] start in 'development' mode

توسعه بیشتر

برای تنظیمات پیشرفته‌تر می‌توانید:

  • هوک‌های تنظیمات سفارشی اضافه کنید
  • تنظیمات محیطی چندگانه تعریف کنید
  • سیستم تنظیمات پویا پیاده‌سازی کنید
  • تنظیمات را در دیتابیس ذخیره کنید