ZFrame Configuration

مدیریت متمرکز تنظیمات پلتفرم
انعطاف‌پذیری در استقرار، سادگی در مدیریت

هر نرم‌افزار سازمانی علاوه بر منطق کسب‌وکار، نیازمند مجموعه‌ای از تنظیمات اجرایی است که نحوه اتصال به زیرساخت‌ها، سرویس‌ها و موتورهای مختلف را مشخص می‌کند.

در ZFrame این مسئولیت بر عهده ZFCONFIG است؛ مکانیزمی که تمامی تنظیمات پلتفرم را به‌صورت متمرکز مدیریت کرده و امکان اجرای یک نرم‌افزار در محیط‌های مختلف را بدون نیاز به تغییر در کد فراهم می‌سازد.

ZFCONFIG تنها یک فایل تنظیمات نیست؛ بلکه بخشی از معماری ZFrame است که با پشتیبانی از چندین منبع پیکربندی، فرآیند استقرار، نگهداری و مدیریت سامانه‌های Enterprise را ساده‌تر و استانداردتر می‌کند.

فلسفه طراحی ZFCONFIG

در بسیاری از سامانه‌ها، اطلاعات مربوط به اتصال پایگاه داده، سرویس‌ها و تنظیمات اجرایی در داخل برنامه قرار می‌گیرد. این وابستگی، فرآیند توسعه و استقرار را پیچیده کرده و انتقال نرم‌افزار میان محیط‌های مختلف را دشوار می‌کند.

ZFCONFIG با جداسازی کامل تنظیمات از منطق برنامه، امکان مدیریت مستقل پیکربندی را فراهم می‌سازد. در نتیجه، یک نسخه از نرم‌افزار می‌تواند بدون تغییر در کد، در محیط‌های Development، Test، Staging، Production یا زیرساخت‌های ابری اجرا شود.

معماری مدیریت تنظیمات

ZFrame Configuration Manager
zf.configdata
(File)
Environment
Variables
SYS_SERVER_CONFIG
(Database)
└──────┼──────┘
Configuration Resolver
ZFrame Runtime Engine

منابع پیکربندی (Configuration Sources)

ZFCONFIG اطلاعات موردنیاز سیستم را از سه منبع مستقل دریافت می‌کند. این منابع با اولویت مشخص بررسی می‌شوند تا مناسب‌ترین مقدار برای هر تنظیم انتخاب شود.

۱. فایل تنظیمات (zf.configdata)

اولین و بالاترین اولویت مربوط به فایل zf.configdata است.

این فایل معمولاً در کنار برنامه قرار گرفته و مناسب‌ترین گزینه برای توسعه، تست، استقرارهای مستقل و محیط‌های محلی است.

ساختار فایل بسیار ساده بوده و هر تنظیم به‌صورت Key = Value تعریف می‌شود.

۲. متغیرهای محیطی (Environment Variables)

در محیط‌های Container-Based مانند Docker و Kubernetes، استفاده از متغیرهای محیطی روش استاندارد مدیریت تنظیمات است.

ZFCONFIG تمامی تنظیمات را با پیشوند ZFRAME_ شناسایی کرده و به‌صورت خودکار جایگزین مقادیر فایل می‌کند.

این قابلیت امکان مدیریت تنظیمات بدون تغییر فایل‌های برنامه را فراهم می‌سازد و برای استقرارهای ابری و DevOps ایده‌آل است.

۳. بانک اطلاعاتی (SYS_SERVER_CONFIG)

سومین منبع، جدول SYS_SERVER_CONFIG در پایگاه داده است.

این روش برای تنظیماتی مناسب است که نیاز به مدیریت متمرکز یا تغییر در زمان اجرا دارند.

از آنجا که مقادیر موجود در فایل و متغیرهای محیطی اولویت بیشتری دارند، اطلاعات این جدول تنها زمانی استفاده می‌شوند که مقدار متناظر در منابع بالاتر وجود نداشته باشد.

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

ZFCONFIG همواره تنظیمات را بر اساس ترتیب زیر بارگذاری می‌کند:

اولویتمنبع
۱ (بالاترین)zf.configdata (فایل)
۲ (متوسط)Environment Variables (Docker/Kubernetes)
۳ (پایین‌ترین)SYS_SERVER_CONFIG (Database)

این مکانیزم باعث می‌شود رفتار سیستم در تمامی محیط‌های اجرایی قابل پیش‌بینی و کنترل باشد.

دسته‌بندی تنظیمات

ZFCONFIG تمامی پارامترهای اجرایی ZFrame را در گروه‌های مشخص سازماندهی می‌کند.

  • تنظیمات سیستم — مشخصات پروژه، نوع پایگاه داده، اطلاعات اتصال، شناسه سیستم و مسیرهای اجرایی
  • تنظیمات پایگاه داده — مدیریت اتصال به پایگاه داده اصلی و پایگاه داده ثبت رخدادها، تنظیمات Connection Pool، مدیریت Statementها و پارامترهای مربوط به عملکرد Database Engine
  • تنظیمات امنیت — پیکربندی JWT، CSRF، CORS، سیاست‌های امنیت محتوا (Content Security Policy)، احراز هویت و مجوزهای امنیتی
  • تنظیمات موتور هوش مصنوعی — فعال‌سازی AI Engine، تنظیمات ارتباط با سرویس هوش مصنوعی، پشتیبانی از MCP و پارامترهای ارتباطی مربوط به مدل‌های هوشمند
  • تنظیمات Workflow و BPMS — مدیریت ارتباط با موتور فرآیندهای سازمانی، مشخصات سرور BPMS، زمان انتظار و تنظیمات مربوط به اجرای فرآیندها
  • تنظیمات رابط کاربری — پیکربندی قابلیت‌های چندزبانه، کش JavaScript، فرم‌های پویا، قالب‌ها و رفتار رابط کاربری
  • تنظیمات REST و Integration — پارامترهای مربوط به سرویس‌های REST، Headerها، پیام‌های استاندارد و ارتباط با سرویس‌های خارجی
  • تنظیمات مانیتورینگ و ثبت رخدادها — کنترل سطح Debug، Trace، ثبت خطاها، پایگاه داده لاگ و سایر امکانات مرتبط با پایش سامانه
  • تنظیمات صوت و هوش مصنوعی — پیکربندی مدل‌های تشخیص گفتار، مدل‌های برداری و سایر سرویس‌های مرتبط با پردازش زبان طبیعی

سازگاری با معماری Cloud-Native

ZFCONFIG به‌گونه‌ای طراحی شده است که علاوه بر استقرارهای سنتی، به‌طور کامل با معماری‌های مدرن نیز سازگار باشد.

DockerDocker ComposeKubernetesVirtual MachinesBare Metal ServersHybrid CloudPrivate Cloud

این انعطاف‌پذیری به سازمان‌ها امکان می‌دهد بدون تغییر در کد نرم‌افزار، زیرساخت اجرایی خود را تغییر دهند.

ویژگی‌های معماری

Centralized Configuration ManagementConfiguration as Code ReadyCloud-Native ArchitectureEnvironment-Aware ConfigurationSecure Configuration ManagementRuntime FlexibilityContainer ReadyDevOps Friendly

مزایای ZFCONFIG

  • جداسازی کامل تنظیمات از کد برنامه
  • مدیریت متمرکز تمامی پارامترهای اجرایی
  • پشتیبانی از چندین منبع پیکربندی
  • سازگاری کامل با Docker و Kubernetes
  • کاهش پیچیدگی فرآیند استقرار
  • امکان تغییر محیط اجرا بدون بازنویسی نرم‌افزار
  • افزایش امنیت اطلاعات حساس از طریق Environment Variables و Secret Management
  • استانداردسازی مدیریت تنظیمات در پروژه‌های Enterprise
  • آمادگی کامل برای معماری‌های Cloud-Native و DevOps

جایگاه ZFCONFIG در معماری ZFrame

ZFCONFIG نقطه شروع اجرای هر سامانه مبتنی بر ZFrame است. پیش از راه‌اندازی موتورهای متادیتا، منطق کسب‌وکار، گردش‌کار، هوش مصنوعی یا یکپارچه‌سازی، تمامی تنظیمات موردنیاز از طریق این لایه بارگذاری و اعتبارسنجی می‌شوند.

این رویکرد باعث می‌شود تمامی اجزای پلتفرم بر پایه یک مکانیزم پیکربندی واحد عمل کنند و فرآیند توسعه، استقرار و نگهداری سامانه‌های Enterprise ساده‌تر، استانداردتر و قابل اطمینان‌تر شود.

مرجع کامل تنظیمات ZFCONFIG

در ادامه مرجع کاملی از کلیدهای پیکربندی ZFCONFIG به همراه توضیح و مقادیر پیش‌فرض ارائه شده است.

SYSTEM — تنظیمات سیستم

کلیدنوعپیش‌فرضتوضیح
ProjectString-نام پروژه
DataBaseTypeIDString1نوع دیتابیس (1=MSSQL, 2=Oracle, 3=DB2, 4=MySQL, 5=PostgreSQL)
DBUserNameString-نام کاربری دیتابیس
DBPasswordString-رمز عبور دیتابیس (حساس)
ProjectConnectionStringString-رشته اتصال دیتابیس
System_IDString-شناسه سیستم
SetupUserNameStringadminنام کاربری setup
SetupPasswordStringadminرمز عبور setup (حساس)
WebUrlStringhttp://localhost:8080/آدرس وب اپلیکیشن
FileDatabasePathString-مسیر پایه فایل دیتابیس

DEBUG — تنظیمات اشکال‌زدایی

کلیدنوعپیش‌فرضتوضیح
DebugString0حالت Debug (0=off, 1=on)
TraceLevelInteger99سطح Trace (-1=disabled, 99=maximum)

DB CONNECTION POOL — تنظیمات Connection Pool

کلیدنوعپیش‌فرضتوضیح
ConnectionPoolInteger0سایز Connection Pool
ThreadPoolCountInteger300تعداد Thread pool
MaxQueryTimeoutSecondInteger0Timeout کوئری (ثانیه)
PageLoadTimeoutInteger0Timeout بارگذاری صفحه (ms)
ServiceTimeoutInteger0Timeout سرویس (ms)
MetaDataConnectionPoolCountInteger0Connection pool متادیتا
LogConnectionPoolCountInteger0Connection pool لاگ

SECURITY — تنظیمات امنیت

کلیدنوعپیش‌فرضتوضیح
EnableJWTInteger0فعال‌سازی JWT
JWTSessionTimeoutInteger15Timeout نشست JWT (دقیقه)
Enable_FULL_XSSInteger0فعال‌سازی محافظت XSS
Access_Control_Allow_Origin_DomainString*Domain مجاز CORS
Content_Security_PolicyStringdefaultContent Security Policy

AI ENGINE — تنظیمات موتور هوش مصنوعی

کلیدنوعپیش‌فرضتوضیح
Z_Enable_AI_EngineInteger0فعال‌سازی AI Engine
Z_AI_Engine_PortInteger0پورت AI Engine
Z_AI_Engine_IPString127.0.0.1آدرس IP موتور هوش مصنوعی
MCP_EnabledInteger0فعال‌سازی MCP

BPMS — تنظیمات موتور فرآیندها

کلیدنوعپیش‌فرضتوضیح
BPMSInteger0فعال‌سازی BPMS
BPMS_Server_IPString127.0.0.1IP سرور BPMS
BPMS_Server_PortInteger1360پورت سرور BPMS
BPMS_Server_TimeoutInteger0Timeout BPMS (ms)

UI — تنظیمات رابط کاربری

کلیدنوعپیش‌فرضتوضیح
MultiLanguageInteger0فعال‌سازی چندزبانه
JavaScriptCacheInteger0فعال‌سازی کش JS
Save_ErrorInteger1ذخیره خطاها در دیتابیس
MaxRecordForExcelCOutputInteger5000حداکثر رکورد خروجی اکسل

پیکربندی فایل (zf.configdata)

فایل zf.configdata در ریشه برنامه قرار می‌گیرد:

# ============================================
# SYSTEM Configuration
# ============================================
Project = ATMC
DataBaseTypeID = 1
DBUserName = sa
DBPassword = MyPassword123
ProjectConnectionString = jdbc:sqlserver://localhost;databaseName=MyDB;
System_ID = 1

# ============================================
# Debug Configuration
# ============================================
Debug = 1
TraceLevel = 99

# ============================================
# Connection Pool Configuration
# ============================================
ConnectionPool = 10
ThreadPoolCount = 50
MaxQueryTimeoutSecond = 30

# ============================================
# Security Configuration
# ============================================
EnableJWT = 1
JWTSessionTimeout = 30
Access_Control_Allow_Origin_Domain = *

# ============================================
# AI Engine Configuration
# ============================================
Z_Enable_AI_Engine = 1
Z_AI_Engine_Port = 1361

# ============================================
# BPMS Configuration
# ============================================
BPMS = 1
BPMS_Server_IP = 127.0.0.1
BPMS_Server_Port = 2380

# ============================================
# UI Configuration
# ============================================
MultiLanguage = 1
JavaScriptCache = 1

Docker Compose — استقرار با متغیرهای محیطی

version: '3.8'
services:
  zframe-app:
    image: myapp:latest
    environment:
      ZFRAME_PROJECT: ATMC
      ZFRAME_DATABASE_TYPE: 1
      ZFRAME_DB_USERNAME: sa
      ZFRAME_DB_PASSWORD: MyPassword123
      ZFRAME_DB_CONNECTION: jdbc:sqlserver://mssql-server:1433;databaseName=ATMC_MD;
      ZFRAME_DEBUG: 1
      ZFRAME_AI_ENABLE: 1
      ZFRAME_BPMS_ENABLE: 1
      ZFRAME_CONTAINER_LIC: YOUR-LICENSE-KEY-12345
    ports:
      - "8080:8080"
    depends_on:
      - mssql-server

  mssql-server:
    image: mcr.microsoft.com/mssql/server:2019-latest
    environment:
      SA_PASSWORD: MyPassword123
      ACCEPT_EULA: Y
    ports:
      - "1433:1433"

Kubernetes — استقرار با ConfigMap و Secret

apiVersion: v1
kind: ConfigMap
metadata:
  name: zframe-config
data:
  ZFRAME_PROJECT: "ATMC"
  ZFRAME_DATABASE_TYPE: "1"
  ZFRAME_DEBUG: "1"
---
apiVersion: v1
kind: Secret
metadata:
  name: zframe-secrets
stringData:
  db-password: "MyPassword123"
  license-key: "YOUR-LICENSE-KEY-12345"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: zframe-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: zframe-app
  template:
    metadata:
      labels:
        app: zframe-app
    spec:
      containers:
      - name: zframe-app
        image: myapp:latest
        ports:
        - containerPort: 8080
        env:
        - name: ZFRAME_PROJECT
          valueFrom:
            configMapKeyRef:
              name: zframe-config
              key: ZFRAME_PROJECT
        - name: ZFRAME_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: zframe-secrets
              key: db-password

بانک اطلاعاتی (SYS_SERVER_CONFIG)

CREATE TABLE [DBO].[SYS_SERVER_CONFIG](
    [SYS_SERVER_CONFIG_ID] [NUMERIC](18, 0) IDENTITY(1,1) NOT NULL,
    [KEY_NAME] [NVARCHAR](500) NOT NULL,
    [KEY_VALUE] [NVARCHAR](4000) NULL,
    [IS_ACTIVE] [INT] DEFAULT 1,
    CONSTRAINT [PK_SYS_SERVER_CONFIG] PRIMARY KEY CLUSTERED ([SYS_SERVER_CONFIG_ID] ASC)
)

INSERT INTO SYS_SERVER_CONFIG (KEY_NAME, KEY_VALUE, IS_ACTIVE)
VALUES 
('Project', 'ATMC', 1),
('DataBaseTypeID', '1', 1),
('DBUserName', 'sa', 1),
('EnableJWT', '1', 1),
('MultiLanguage', '1', 1);

Best Practices

For Development:

Debug = 1, TraceLevel = 99, ConnectionPool = 5

از فایل محلی استفاده کنید

For Production (Docker):

ZFRAME_DEBUG: 0, ZFRAME_TRACE_LEVEL: -1

از Environment Variables استفاده کنید

For Production (Kubernetes):

ConfigMap + Secrets

اطلاعات حساس را در Secret ذخیره کنید

جمع‌بندی

ZFCONFIG زیرساخت مدیریت پیکربندی در ZFrame است. با پشتیبانی از فایل‌های محلی، متغیرهای محیطی و پایگاه داده، این مکانیزم امکان مدیریت متمرکز تنظیمات، استقرار در محیط‌های مختلف و توسعه نرم‌افزارهای Enterprise را بر پایه استانداردهای مدرن Cloud-Native و DevOps فراهم می‌کند.