هر نرمافزار سازمانی علاوه بر منطق کسبوکار، نیازمند مجموعهای از تنظیمات اجرایی است که نحوه اتصال به زیرساختها، سرویسها و موتورهای مختلف را مشخص میکند.
در ZFrame این مسئولیت بر عهده ZFCONFIG است؛ مکانیزمی که تمامی تنظیمات پلتفرم را بهصورت متمرکز مدیریت کرده و امکان اجرای یک نرمافزار در محیطهای مختلف را بدون نیاز به تغییر در کد فراهم میسازد.
ZFCONFIG تنها یک فایل تنظیمات نیست؛ بلکه بخشی از معماری ZFrame است که با پشتیبانی از چندین منبع پیکربندی، فرآیند استقرار، نگهداری و مدیریت سامانههای Enterprise را سادهتر و استانداردتر میکند.
فلسفه طراحی ZFCONFIG
در بسیاری از سامانهها، اطلاعات مربوط به اتصال پایگاه داده، سرویسها و تنظیمات اجرایی در داخل برنامه قرار میگیرد. این وابستگی، فرآیند توسعه و استقرار را پیچیده کرده و انتقال نرمافزار میان محیطهای مختلف را دشوار میکند.
ZFCONFIG با جداسازی کامل تنظیمات از منطق برنامه، امکان مدیریت مستقل پیکربندی را فراهم میسازد. در نتیجه، یک نسخه از نرمافزار میتواند بدون تغییر در کد، در محیطهای Development، Test، Staging، Production یا زیرساختهای ابری اجرا شود.
معماری مدیریت تنظیمات
(File)
Variables
(Database)
منابع پیکربندی (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 بهگونهای طراحی شده است که علاوه بر استقرارهای سنتی، بهطور کامل با معماریهای مدرن نیز سازگار باشد.
این انعطافپذیری به سازمانها امکان میدهد بدون تغییر در کد نرمافزار، زیرساخت اجرایی خود را تغییر دهند.
ویژگیهای معماری
مزایای ZFCONFIG
- جداسازی کامل تنظیمات از کد برنامه
- مدیریت متمرکز تمامی پارامترهای اجرایی
- پشتیبانی از چندین منبع پیکربندی
- سازگاری کامل با Docker و Kubernetes
- کاهش پیچیدگی فرآیند استقرار
- امکان تغییر محیط اجرا بدون بازنویسی نرمافزار
- افزایش امنیت اطلاعات حساس از طریق Environment Variables و Secret Management
- استانداردسازی مدیریت تنظیمات در پروژههای Enterprise
- آمادگی کامل برای معماریهای Cloud-Native و DevOps
جایگاه ZFCONFIG در معماری ZFrame
ZFCONFIG نقطه شروع اجرای هر سامانه مبتنی بر ZFrame است. پیش از راهاندازی موتورهای متادیتا، منطق کسبوکار، گردشکار، هوش مصنوعی یا یکپارچهسازی، تمامی تنظیمات موردنیاز از طریق این لایه بارگذاری و اعتبارسنجی میشوند.
این رویکرد باعث میشود تمامی اجزای پلتفرم بر پایه یک مکانیزم پیکربندی واحد عمل کنند و فرآیند توسعه، استقرار و نگهداری سامانههای Enterprise سادهتر، استانداردتر و قابل اطمینانتر شود.
مرجع کامل تنظیمات ZFCONFIG
در ادامه مرجع کاملی از کلیدهای پیکربندی ZFCONFIG به همراه توضیح و مقادیر پیشفرض ارائه شده است.
SYSTEM — تنظیمات سیستم
| کلید | نوع | پیشفرض | توضیح |
|---|---|---|---|
| Project | String | - | نام پروژه |
| DataBaseTypeID | String | 1 | نوع دیتابیس (1=MSSQL, 2=Oracle, 3=DB2, 4=MySQL, 5=PostgreSQL) |
| DBUserName | String | - | نام کاربری دیتابیس |
| DBPassword | String | - | رمز عبور دیتابیس (حساس) |
| ProjectConnectionString | String | - | رشته اتصال دیتابیس |
| System_ID | String | - | شناسه سیستم |
| SetupUserName | String | admin | نام کاربری setup |
| SetupPassword | String | admin | رمز عبور setup (حساس) |
| WebUrl | String | http://localhost:8080/ | آدرس وب اپلیکیشن |
| FileDatabasePath | String | - | مسیر پایه فایل دیتابیس |
DEBUG — تنظیمات اشکالزدایی
| کلید | نوع | پیشفرض | توضیح |
|---|---|---|---|
| Debug | String | 0 | حالت Debug (0=off, 1=on) |
| TraceLevel | Integer | 99 | سطح Trace (-1=disabled, 99=maximum) |
DB CONNECTION POOL — تنظیمات Connection Pool
| کلید | نوع | پیشفرض | توضیح |
|---|---|---|---|
| ConnectionPool | Integer | 0 | سایز Connection Pool |
| ThreadPoolCount | Integer | 300 | تعداد Thread pool |
| MaxQueryTimeoutSecond | Integer | 0 | Timeout کوئری (ثانیه) |
| PageLoadTimeout | Integer | 0 | Timeout بارگذاری صفحه (ms) |
| ServiceTimeout | Integer | 0 | Timeout سرویس (ms) |
| MetaDataConnectionPoolCount | Integer | 0 | Connection pool متادیتا |
| LogConnectionPoolCount | Integer | 0 | Connection pool لاگ |
SECURITY — تنظیمات امنیت
| کلید | نوع | پیشفرض | توضیح |
|---|---|---|---|
| EnableJWT | Integer | 0 | فعالسازی JWT |
| JWTSessionTimeout | Integer | 15 | Timeout نشست JWT (دقیقه) |
| Enable_FULL_XSS | Integer | 0 | فعالسازی محافظت XSS |
| Access_Control_Allow_Origin_Domain | String | * | Domain مجاز CORS |
| Content_Security_Policy | String | default | Content Security Policy |
AI ENGINE — تنظیمات موتور هوش مصنوعی
| کلید | نوع | پیشفرض | توضیح |
|---|---|---|---|
| Z_Enable_AI_Engine | Integer | 0 | فعالسازی AI Engine |
| Z_AI_Engine_Port | Integer | 0 | پورت AI Engine |
| Z_AI_Engine_IP | String | 127.0.0.1 | آدرس IP موتور هوش مصنوعی |
| MCP_Enabled | Integer | 0 | فعالسازی MCP |
BPMS — تنظیمات موتور فرآیندها
| کلید | نوع | پیشفرض | توضیح |
|---|---|---|---|
| BPMS | Integer | 0 | فعالسازی BPMS |
| BPMS_Server_IP | String | 127.0.0.1 | IP سرور BPMS |
| BPMS_Server_Port | Integer | 1360 | پورت سرور BPMS |
| BPMS_Server_Timeout | Integer | 0 | Timeout BPMS (ms) |
UI — تنظیمات رابط کاربری
| کلید | نوع | پیشفرض | توضیح |
|---|---|---|---|
| MultiLanguage | Integer | 0 | فعالسازی چندزبانه |
| JavaScriptCache | Integer | 0 | فعالسازی کش JS |
| Save_Error | Integer | 1 | ذخیره خطاها در دیتابیس |
| MaxRecordForExcelCOutput | Integer | 5000 | حداکثر رکورد خروجی اکسل |
پیکربندی فایل (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 فراهم میکند.
