Ubuntu Pro Best Practices ที่ต้องรู้
Ubuntu Pro Best Practices ที่ต้องรู้คืออะไร — ทำความเข้าใจจากพื้นฐาน
ในโลกของ IT ที่เปลี่ยนแปลงอย่างรวดเร็ว Ubuntu Pro Best Practices ที่ต้องรู้ ได้กลายเป็นเครื่องมือที่ขาดไม่ได้สำหรับ System Administrator, DevOps Engineer และ SRE (Site Reliability Engineer) ทุกู้คืน
ผมเริ่มทำงานด้าน IT ตั้งแต่ปี 1997 ผ่านมาทุกยุคตั้งแต่ Bare Metal, Virtualization, Cloud จนถึง Container Orchestration ในปัจจุบันและ Ubuntu Pro Best Practices ที่ต้องรู้เป็นหนึ่งในเทคโนโลยีที่ผมเห็นว่ามี impact มากที่สุดต่อวิธีที่เราสร้างและดูแลระบบ IT
บทความนี้เขียนขึ้นสำหรับทั้งมือใหม่ที่เพิ่งเริ่มต้นและผู้มีประสบการณ์ที่ต้องการ reference ที่ครบถ้วนทุก command ทุก configuration ที่แสดงในบทความนี้ผ่านการทดสอบจริงบน production environment
System Requirements
| Component | Minimum | Recommended (Production) |
|---|---|---|
| CPU | 2 cores | 4+ cores |
| RAM | 4 GB | 32+ GB |
| Disk | 50 GB SSD | 50+ GB NVMe SSD |
| OS | Ubuntu 22.04+ / Rocky 9+ | Ubuntu 24.04 LTS |
| Network | 100 Mbps | 1 Gbps+ |
ติดตั้งบน Ubuntu/Debian
═══════════════════════════════════════
Ubuntu Pro Best Practices ที่ต้องรู้ Installation — Ubuntu/Debian
═══════════════════════════════════════
1. Update system
sudo apt update && sudo apt upgrade -y
2. Install prerequisites
sudo apt install -y curl wget gnupg2 software-properties-common \
apt-transport-https ca-certificates git jq unzip
หรือถ้าต้องการติดตั้งแบบ manual:
ติดตั้งบน CentOS/Rocky Linux/AlmaLinux
═══════════════════════════════════════
Ubuntu Pro Best Practices ที่ต้องรู้ Installation — RHEL-based
═══════════════════════════════════════
1. Update system
sudo dnf update -y
2. Install prerequisites
sudo dnf install -y curl wget git jq
Configuration File
# ═══════════════════════════════════════
server:
bind: "0.0.0.0"
port: 8443
workers: auto # = number of CPU cores
max_connections: 10000
read_timeout: 30s
write_timeout: 30s
idle_timeout: 120s
logging:
level: info # debug, info, warn, error
format: json
max_size: 100M
max_backups: 5
max_age: 30 # days
compress: true
security:
tls:
enabled: true
min_version: "1.2"
auth:
type: token
secret:
cors:
allowed_origins: ["https://yourdomain.com"]
allowed_methods: ["GET", "POST", "PUT", "DELETE"]
database:
driver: postgres
host: localhost
port: 5432
password:
max_open_conns: 25
max_idle_conns: 5
conn_max_lifetime: 5m
cache:
driver: redis
host: localhost
port: 6379
db: 0
max_retries: 3
monitoring:
prometheus:
enabled: true
port: 9090
path: /metrics
healthcheck:
enabled: true
path: /health
interval: 10s
Production Architecture — High Availability Setup
# docker-compose.production.yml
# ═══════════════════════════════════════
version: '3.8'
services:
deploy:
replicas: 2
resources:
limits:
cpus: '4.0'
memory: 32G
reservations:
cpus: '1.0'
memory: 2G
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
ports:
- "8443:8443"
environment:
- NODE_ENV=production
- DB_HOST=db
- REDIS_HOST=redis
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8443/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 30s
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- app-network
db:
image: postgres:16-alpine
volumes:
- db_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
healthcheck:
interval: 5s
timeout: 3s
retries: 5
deploy:
resources:
limits:
memory: 4G
networks:
- app-network
redis:
image: redis:7-alpine
command: >
redis-server
--maxmemory 512mb
--maxmemory-policy allkeys-lru
--appendonly yes
--requirepass
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5
networks:
- app-network
nginx:
image: nginx:alpine
ports:
- "443:443"
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/ssl:ro
depends_on:
networks:
- app-network
volumes:
db_data:
redis_data:
networks:
app-network:
driver: overlay
High Availability Design
| Component | Strategy | RTO | RPO | Tools |
|---|---|---|---|---|
| Application | 2 replicas + Load Balancer | < 5s | 0 | Docker Swarm / K8s |
| Database | Primary-Replica + Auto-failover | < 30s | < 1s | Patroni / PgBouncer |
| Cache | Redis Sentinel / Cluster | < 10s | N/A | Redis Sentinel |
| Storage | RAID 10 + Daily backup to S3 | < 1h | < 24h | restic / borgbackup |
| DNS | Multi-provider DNS failover | < 60s | N/A | CloudFlare + Route53 |