تنظیمات محیط توسعه و تولید
این راهنما نحوه تنظیم و مدیریت محیطهای توسعه (Development) و تولید (Production) در فریمورک کیمیا را توضیح میدهد.
نمای کلی تنظیمات
فریمورک کیمیا از سه سطح تنظیمات پشتیبانی میکند:
- تنظیمات پایه: فایلهای
dev.tsوprod.tsدر دایرکتوریcore/settings/ - تنظیمات JSON: فایل
settings.jsonبرای بازنویسی تنظیمات - متغیرهای محیطی: برای تنظیمات حساس و پویا
نحوه بارگذاری تنظیمات
انتخاب محیط اجرا
سرویس بر اساس پارامتر خط فرمان محیط اجرا را تعیین میکند:
# محیط توسعه
npm start dev
# محیط تولید (پیشفرض)
npm start
اولویت بارگذاری تنظیمات
- تنظیمات پایه محیط (dev.ts یا prod.ts)
- تنظیمات فایل JSON (settings.json)
- متغیرهای محیطی
تنظیمات محیط توسعه
فایل 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,
});
نکات امنیتی
برای محیط تولید
- غیرفعال کردن DEBUG_MODE
- استفاده از SECRET_KEY قوی
- تنظیم TRUST_PROXY صحیح
- فعال کردن HTTPS
- استفاده از دیتابیس امن
- تنظیم محدودیتهای آپلود
مثال تنظیمات امنیتی
{
"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
توسعه بیشتر
برای تنظیمات پیشرفتهتر میتوانید:
- هوکهای تنظیمات سفارشی اضافه کنید
- تنظیمات محیطی چندگانه تعریف کنید
- سیستم تنظیمات پویا پیادهسازی کنید
- تنظیمات را در دیتابیس ذخیره کنید