سیستم مستندات یکپارچه

DevOps Architecture

Reference Architecture Pattern / version 2.0

معماری DevOps و زیرساخت عملیاتی

این صفحه یک الگوی عمومی برای معماری DevOps و زیرساخت عملیاتی مستند می کند: مهاجرت مرحله ای از monolith به microservice، استقرار Docker روی VMهای ESXi، تفکیک Internet و Trusted Zone، مسیر استاندارد request از firewall تا API Gateway، و زنجیره ابزارهای CI/CD، monitoring، logging، backup و governance.

Strangler MigrationBFFAPI GatewayDocker DeploymentScale-outTrusted ZoneCI/CDObservability
لایه های اصلی5Network, Gateway, Runtime, Data, Operations
ابزارهای پوشش داده شده25لوگو/نقش/گروه عملیاتی
نقش‌های زیرساختی12نام و sizing برای پروژه شما باید نهایی شود
رویکرد مهاجرتStranglerانتقال مرحله ای قابلیت ها

رویکردهای معماری

رویکردتوضیحخروجی عملیاتی
BFFاز ابتدای توسعه، Back-end for Front-end برای جداسازی نیازهای clientها رعایت شده است.کاهش coupling بین UIها و سرویس های دامنه.
API GatewayKong به عنوان ورودی استاندارد APIها و محل routing درخواست ها اضافه می شود.یک نقطه کنترل برای policy، versioning، routing و observability.
Strangler Migrationmonolith فعلی به عنوان یک سرویس حفظ می شود و قابلیت ها به تدریج به microserviceهای جدید منتقل می شوند.مهاجرت مرحله ای بدون قطع سرویس فعلی.
Stateless Servicesmicroserviceها داده محلی نگه نمی دارند و state در database، cache یا object storage قرار می گیرد.امکان scale out و جایگزینی سریع instanceها.
Scale-out Firstافزایش ظرفیت با اضافه کردن سرور/VM و تقسیم بار انجام می شود؛ scale-up فقط گزینه تکمیلی است.آمادگی بهتر برای HA و رشد تدریجی بار.
Trusted Zoneابزارهای مدیریتی، دیتابیس ها و سرویس های حساس پشت VPN و zone امن نگه داشته می شوند.کاهش سطح attack و کنترل دسترسی داخلی.
CI/CDpipelineهای GitLab CI توسط runnerها build، quality gate، artifact publish و deploy را بین workerها توزیع می کنند.تحویل تکرارپذیر، قابل audit و قابل rollback.
Operations LoopZabbix، ELK/Kibana، Grafana، Veeam و Passbolt حلقه monitor، log، backup و secret را پوشش می دهند.قابلیت نگهداری و بازیابی بهتر در عملیات روزانه.

ابزارها و نقش ها

VMware ESXi

لایه مجازی سازی و مدیریت VMهای عملیاتی

Virtualization

Ubuntu

سیستم عامل پایه برای ماشین های مجازی

Operating System

Docker

استاندارد استقرار کانتینری سرویس ها و ابزارها

Deployment

Docker Swarm

orchestration و clustering برای اجرای سرویس های کانتینری روی چند node

Container Orchestration

Kong

API Gateway برای routing، policy و مرزبندی API

Gateway

HAProxy

Load balancing در مسیر درخواست های ورودی

Traffic

Nginx

Reverse proxy و توزیع بار در کنار HAProxy

Traffic

MikroTik

Firewall و Internet Gateway

Network

pfSense / OpenVPN

دسترسی امن کاربران trusted به ابزارهای داخلی

VPN

PostgreSQL

پایگاه داده رابطه ای stateful برای سرویس ها

Database

Redis

cache management و داده های کوتاه مدت

Cache

MinIO

Object storage داخلی برای فایل ها و تصاویر

Storage

S3-compatible Object Storage

ذخیره سازی آبجکت برای فایل، artifact و backup

Storage

GitLab CI

تعریف pipeline و اجرای CI/CD

Delivery

GitLab Runner

workerهای build و deploy

Delivery

SonarQube

static code analysis، security hotspot و quality gate در pipeline

Quality

Nexus Repository

مخزن artifact و package برای image، library و build output

Artifact Repository

Zabbix

monitoring، alarm و aggregation وضعیت سرویس ها

Observability

ELK / Kibana

جمع آوری، جستجو و مشاهده logها

Observability

Grafana

داشبوردهای عملیاتی و مشاهده metricها

Observability

Veeam

backup زمان بندی شده ماشین ها و سرویس ها

Backup

Jira

issue tracking و مدیریت تسک

Governance

Confluence

مدیریت دانش و مستندات تیمی

Governance

Passbolt

مدیریت امن password و credential تیمی

Security

Bind DNS

DNS master/slave برای resolve دامنه های داخلی

Network

Internet to Trusted Zone Request Flow

Firewall, Load Balancer, API Gateway, Microservices

flowchart LR
  Clients["Clients: Mobile, PWA, Web, Admin Panels"] -->|HTTPS REST API| Firewall["MikroTik Firewall / Internet GW"]
  Firewall --> LB["HAProxy / Nginx Load Balancer"]
  LB --> Kong["Kong API Gateway"]
  Kong --> MS1["Microservice A"]
  Kong --> MS2["Microservice B"]
  Kong --> MS3["Legacy Monolith as Service"]
  MS1 --> PG1[("PostgreSQL")]
  MS2 --> Redis[("Redis Cache")]
  MS2 --> Minio[("MinIO / Object Storage")]
  Trusted["Trusted Users: Dev, DBA, Ops"] --> VPN["pfSense / OpenVPN"]
  VPN --> Internal["Grafana, Zabbix, vCenter, Kibana, DB Admin"]
  classDef edge fill:#dbeafe,stroke:#2563eb,color:#0f172a
  classDef data fill:#dcfce7,stroke:#16a34a,color:#0f172a
  class PG1,Redis,Minio data

VM and Container Deployment Topology

ESXi, VM, Docker, runtime services

flowchart TB
  subgraph Hardware["Physical Server / ESXi"]
    ESX["VMware ESXi"]
    subgraph VMs["Virtual Machines"]
      VM1["VM: API Gateway / LB"]
      VM2["VM: Backend Services"]
      VM3["VM: Databases"]
      VM4["VM: Observability"]
      VM5["VM: Collaboration Tools"]
    end
  end
  ESX --> VMs
  VM1 --> C1["Docker: Kong / HAProxy / Nginx"]
  VM2 --> C2["Docker: Stateless Microservices"]
  VM3 --> C3["Docker: PostgreSQL / Redis"]
  VM4 --> C4["Docker: Zabbix / ELK / Grafana"]
  VM5 --> C5["Docker: GitLab / SonarQube / Nexus / Jira / Confluence / Passbolt"]
  C2 --> DB[("Stateful data layer")]
  C4 --> Alerts["Alarm / Dashboard / Log Search"]

CI/CD Delivery Flow

GitLab CI and Runner sequence

sequenceDiagram
  autonumber
  participant Dev as Developer
  participant Git as GitLab Repository
  participant CI as GitLab CI
  participant Runner as GitLab Runner
  participant Quality as SonarQube
  participant Nexus as Nexus Repository
  participant Image as Docker Image
  participant VM as Target VM
  participant Ops as Monitoring
  Dev->>Git: Push / Merge Request
  Git->>CI: Trigger pipeline
  CI->>Runner: Assign build job
  Runner->>Quality: Static analysis and quality gate
  Quality-->>Runner: Quality gate result
  Runner->>Image: Build and tag container
  Runner->>Nexus: Publish artifact / package
  Runner->>VM: Deploy service container
  VM->>Ops: Emit logs and metrics
  Ops-->>Dev: Alert / dashboard feedback

Observability, Backup and Governance Loop

Monitoring, logging, backup, password and knowledge tools

flowchart LR
  Services["Microservices / System Apps"] --> Logs["ELK / Kibana"]
  Services --> Metrics["Zabbix"]
  Metrics --> Grafana["Grafana Dashboards"]
  Metrics --> Alarm["Alarm and Aggregation"]
  VMs["Virtual Machines"] --> Veeam["Veeam Backup"]
  Veeam --> Backup["Offsite / Object Backup Storage"]
  Secrets["Credentials"] --> Passbolt["Passbolt"]
  Jira["Jira Issues"] --> Confluence["Confluence Knowledge Base"]
  Logs --> Incident["Incident Analysis"]
  Alarm --> Incident

Strangler Migration Roadmap

Monolith to microservices transition

flowchart LR
  Client["Clients"] --> Gateway["API Gateway"]
  Gateway --> Legacy["Current Monolith as one service"]
  Gateway --> NewA["New Microservice A"]
  Gateway --> NewB["New Microservice B"]
  Legacy --> DB[("Existing Data")]
  NewA --> DBA[("Service-owned DB")]
  NewB --> DBB[("Service-owned DB")]
  Legacy -. capability extracted .-> NewA
  Legacy -. capability extracted .-> NewB
  Legacy -. retired after migration .-> Archive["Decommission plan"]

Tooling Coverage Graph

Mermaid pie chart

pie showData
  title DevOps tooling coverage
  "Delivery and Source Control" : 5
  "Runtime and Traffic" : 8
  "Data and Storage" : 5
  "Observability and Backup" : 5
  "Governance, Quality and Security" : 5

نقش‌های زیرساختی پیشنهادی

این جدول نام ماشین‌های پروژه مرجع را تکرار نمی‌کند. هر ردیف یک نقش زیرساختی است که باید با نام‌گذاری، sizing و محیط‌های واقعی پروژه شما تکمیل شود.

Role IDنقشCPUMemory
api-gateway-vmAPI Gateway roleSizing TBDSizing TBD
load-balancer-vmLoad balancer roleSizing TBDSizing TBD
backend-runtime-vmProduction backend runtimeSizing TBDSizing TBD
logging-vmCentral logging roleSizing TBDSizing TBD
monitoring-vmMonitoring and alarmsSizing TBDSizing TBD
dashboard-vmOperational dashboardsSizing TBDSizing TBD
source-control-vmSource control and CI metadataSizing TBDSizing TBD
runner-vmBuild and deploy runnerSizing TBDSizing TBD
object-storage-vmObject storage roleSizing TBDSizing TBD
backup-vmBackup service roleSizing TBDSizing TBD
password-vault-vmPassword management roleSizing TBDSizing TBD
collaboration-vmIssue tracking and knowledge baseSizing TBDSizing TBD

قرارداد URL و عبور درخواست

قرارداد پیشنهادی به صورت generic تعریف می‌شود: {API_BASE_URL}/{service_name}/api/{version}/{context}/{endpoint}. مقدار API_BASE_URL، نام سرویس‌ها و context باید از قرارداد واقعی SAAN/IOT و تنظیمات API Gateway پروژه تکمیل شود.