107 lines
8.0 KiB
Markdown
107 lines
8.0 KiB
Markdown
# 08-Infrastructure
|
|
|
|
คู่มือการตั้งค่า Infrastructure สำหรับ **NAP-DMS LCBP3** (Laem Chabang Port Phase 3 - Document Management System)
|
|
|
|
> 📍 **Platform:** QNAP (Container Station) + ASUSTOR (Portainer)
|
|
> 🌐 **Domain:** `*.np-dms.work` (IP: 159.192.126.103)
|
|
> 🔒 **Network:** `lcbp3` (Docker External Network)
|
|
> 📄 **Version:** v2.0.0 (Refactored for Stability)
|
|
|
|
---
|
|
|
|
## 🏢 Hardware Infrastructure
|
|
|
|
### Server Role Separation
|
|
|
|
#### QNAP TS-473A
|
|
| (Application & Database Server)|||
|
|
| :--------------------- | :---------------- | :-------------------- |
|
|
| ✔ Application Runtime |✔ API / Web | ✔ Database (Primary) |
|
|
| ✔ High CPU / RAM usage | ✔ Worker / Queue | ✖ No long-term backup |
|
|
| Container Station (UI) | 32GB RAM (Capped) | AMD Ryzen V1500B |
|
|
|
|
#### ASUSTOR AS5403T
|
|
| (Infrastructure & Backup Server) |||
|
|
| :--------------------- | :---------------- | :------------------- |
|
|
| ✔ File Storage | ✔ Backup Target | ✔ Docker Infra |
|
|
|✔ Monitoring / Registry | ✔ Log Aggregation | ✖ No heavy App logic |
|
|
| Portainer (Manage All) | 16GB RAM | Intel Celeron @2GHz |
|
|
|
|
### Servers Specification & Resource Allocation
|
|
|
|
| Device | Model | CPU | RAM | Resource Policy | Role |
|
|
| :---------- | :------ | :---------------------- | :--- | :------------------ | :--------------------- |
|
|
| **QNAP** | TS-473A | AMD Ryzen V1500B | 32GB | **Strict Limits** | Application, DB, Cache |
|
|
| **ASUSTOR** | AS5403T | Intel Celeron @ 2.00GHz | 16GB | **Moderate Limits** | Infra, Backup, Monitor |
|
|
|
|
### Service Distribution by Server
|
|
|
|
#### QNAP TS-473A (Application Stack)
|
|
|
|
| Category | Service | Strategy | Resource Limit (Est.) |
|
|
| :-------------- | :------------------------ | :------------------------------ | :-------------------- |
|
|
| **Web App** | Next.js (Frontend) | Single Instance | 2.0 CPU / 2GB RAM |
|
|
| **Backend API** | NestJS | **2 Replicas** (Load Balanced) | 2.0 CPU / 1.5GB RAM |
|
|
| **Database** | MariaDB (Primary) | Performance Tuned (Buffer Pool) | 4.0 CPU / 5GB RAM |
|
|
| **Worker** | Redis + BullMQ Worker | **Standalone + AOF** | 2.0 CPU / 1.5GB RAM |
|
|
| **Search** | Elasticsearch | **Heap Locked (2GB)** | 2.0 CPU / 4GB RAM |
|
|
| **API Gateway** | NPM (Nginx Proxy Manager) | SSL Termination | 1.0 CPU / 512MB RAM |
|
|
| **Workflow** | n8n | Automation | 1.0 CPU / 1GB RAM |
|
|
| **Code** | Gitea | Git Repository | 1.0 CPU / 1GB RAM |
|
|
|
|
#### ASUSTOR AS5403T (Infrastructure Stack)
|
|
|
|
| Category | Service | Notes |
|
|
| :--------------- | :------------------ | :------------------------------ |
|
|
| **File Storage** | NFS / SMB | Shared volumes for backup |
|
|
| **Backup** | Restic / Borg | Pull-based Backup (More Safe) |
|
|
| **Docker Infra** | Registry, Portainer | Container image registry, mgmt |
|
|
| **Monitoring** | Uptime Kuma | Service availability monitoring |
|
|
| **Metrics** | Prometheus, Grafana | Cross-Server Scraping |
|
|
| **Log** | Loki / Syslog | Centralized logging |
|
|
|
|
---
|
|
|
|
## 🔄 Data Flow Architecture
|
|
┌──────────────┐
|
|
│ User │
|
|
└──────┬───────┘
|
|
│ HTTPS (443)
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ QNAP TS-473A │
|
|
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
│ │ Nginx Proxy Manager (NPM) │ │
|
|
│ │ SSL Termination + Round Robin LB │ │
|
|
│ └───────────────────────┬─────────────────────────────────┘ │
|
|
│ │ │
|
|
│ ┌───────────────────────▼─────────────────────────────────┐ │
|
|
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ | │
|
|
│ │ │ Next.js │─▶│ NestJS │ │ NestJS │ | │
|
|
│ │ │ (Frontend) │ │ (Replica 1) │ │ (Replica 2) │ │ │
|
|
│ │ └──────────────┘ └──────┬───────┘ └──────┬───────┘ │ │
|
|
│ │ │ │ │ │
|
|
│ │ ┌─────────────────────────┼────────────────┼────┐ │ │
|
|
│ │ ▼ ▼ ▼ ▼ │ │
|
|
│ │ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │ │
|
|
│ │ │ MariaDB │ │ Redis │ │Elasticsearch│ │ │
|
|
│ │ │ (Primary)│ │(Persist.)│ │ (Search) │ │ │
|
|
│ │ └────┬─────┘ └──────────┘ └─────────────┘ │ │
|
|
│ └──────┼──────────────────────────────────────────────────┘ │
|
|
│ └──────┼────────────────────────────────────────────────────┘
|
|
| Local Dump -> Restic Pull (Cross-Server)
|
|
▼
|
|
┌──────────────────────────────────────────────────────────────┐
|
|
│ ASUSTOR AS5403T │
|
|
│ ┌──────────────────────────────────────────────────────────┐ │
|
|
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
|
|
│ │ │ Backup │ │ Registry │ │ Uptime │ │ │
|
|
│ │ │ (Restic) │ │ (Docker) │ │ Kuma │ │ │
|
|
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
|
|
│ │ │ │
|
|
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
|
|
│ │ │Prometheus│───▶│ Grafana │ │ Loki │ │ │
|
|
│ │ │(Scraper) │ │(Dashboard)│ │ (Logs) │ │ │
|
|
│ │ └──────────┘ └──────────┘ └──────────┘ ││
|
|
│ └──────────────────────────────────────────────────────────┘│ └──────────────────────────────────────────────────────────────┘
|