หัวข้อขั้นสูง
คู่มือนี้ครอบคลุมตัวเลือกการตั้งค่าขั้นสูงและเทคนิคการเพิ่มประสิทธิภาพสำหรับ Suthep
การตั้งค่าขั้นสูง
การตั้งค่า Nginx แบบกำหนดเอง
ในขณะที่ Suthep สร้างการตั้งค่า Nginx อัตโนมัติ คุณสามารถปรับแต่งได้โดยแก้ไขไฟล์ที่สร้างขึ้น:
# แก้ไข config ที่สร้างขึ้น
sudo nano /etc/nginx/sites-available/example_com.confหมายเหตุ: การแก้ไขด้วยตนเองอาจถูกเขียนทับเมื่อ redeploy พิจารณาใช้ Nginx includes สำหรับการตั้งค่าแบบกำหนดเอง
การตั้งค่าตามสภาพแวดล้อม
ใช้ไฟล์การตั้งค่าต่างกันสำหรับสภาพแวดล้อมต่างๆ:
# Development
suthep deploy -f suthep.dev.yml
# Staging
suthep deploy -f suthep.staging.yml
# Production
suthep deploy -f suthep.prod.ymlกลยุทธ์การ Deploy หลายแบบ
ตั้งค่ากลยุทธ์ต่างๆ ต่อบริการ (ฟีเจอร์ในอนาคต):
services:
- name: api
deployment:
strategy: blue-green
- name: webapp
deployment:
strategy: rollingการเพิ่มประสิทธิภาพ
การเพิ่มประสิทธิภาพ Health Check
เพิ่มประสิทธิภาพช่วงเวลา health check ตามความสำคัญของบริการ:
# บริการที่สำคัญ - ตรวจสอบบ่อย
services:
- name: payment-api
healthCheck:
interval: 15 # ตรวจสอบทุก 15 วินาที
# บริการที่สำคัญน้อยกว่า - ตรวจสอบน้อยลง
services:
- name: analytics
healthCheck:
interval: 120 # ตรวจสอบทุก 2 นาทีการปรับแต่ง Deployment Timeout
ปรับ health check timeouts สำหรับบริการที่เริ่มช้า:
deployment:
healthCheckTimeout: 60000 # 60 วินาทีสำหรับบริการที่ช้าการจัดการทรัพยากร
ตรวจสอบและจัดการทรัพยากร:
# ตรวจสอบทรัพยากร Docker
docker stats
# ตรวจสอบการเชื่อมต่อ Nginx
sudo nginx -V # ตรวจสอบ worker processesวิธีปฏิบัติด้านความปลอดภัยที่ดี
การตั้งค่า SSL/TLS
ตรวจสอบการตั้งค่า SSL ที่แข็งแกร่ง:
-
ใช้ใบรับรอง Production
certbot: staging: false # ใช้ใบรับรอง production -
ตรวจสอบวันหมดอายุของใบรับรอง
sudo certbot certificates -
ตั้งค่า Auto-Renewal
# Certbot auto-renewal (มักตั้งค่าอัตโนมัติ) sudo certbot renew --dry-run
การตั้งค่า Firewall
ตั้งค่ากฎ firewall:
# อนุญาต HTTP และ HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# ปฏิเสธการเข้าถึงพอร์ตบริการโดยตรง
sudo ufw deny 3000/tcpความปลอดภัยของ Container
รักษาความปลอดภัย Docker containers:
services:
- name: api
docker:
image: myapp/api:latest
container: api-container
# พิจารณาเพิ่ม:
# - Resource limits
# - Security options
# - Network isolationการตรวจสอบและ Logging
Nginx Access Logs
ตรวจสอบรูปแบบการเข้าถึง:
# ตรวจสอบการเข้าถึงแบบ real-time
sudo tail -f /var/log/nginx/access.log
# วิเคราะห์รูปแบบการเข้าถึง
sudo cat /var/log/nginx/access.log | grep "GET /api"Docker Container Logs
ตรวจสอบ logs ของ container:
# ติดตาม logs
docker logs -f <container-name>
# ดู 100 บรรทัดสุดท้าย
docker logs --tail 100 <container-name>
# Logs พร้อม timestamps
docker logs -t <container-name>การตรวจสอบ Health Check
ตรวจสอบสถานะ health check:
# Health check ด้วยตนเอง
curl http://localhost:3000/health
# สคริปต์ตรวจสอบอัตโนมัติ
while true; do
curl -f http://localhost:3000/health || echo "Health check failed"
sleep 30
doneกลยุทธ์การขยาย
Horizontal Scaling
Deploy หลาย instances:
services:
- name: api
port: 3000
instances: 3 # Deploy 3 instances
domains:
- api.example.comหมายเหตุ: นี่เป็นตัวอย่างแนวคิด การใช้งานปัจจุบันจัดการ single instances ต่อบริการ
Load Balancing
ใช้ Nginx สำหรับ load balancing (ขั้นสูง):
upstream api_backend {
server localhost:3000;
server localhost:3001;
server localhost:3002;
}การสำรองข้อมูลและการกู้คืน
การสำรองข้อมูลการตั้งค่า
สำรองข้อมูลการตั้งค่าของคุณ:
# สำรองข้อมูลการตั้งค่า
cp suthep.yml suthep.yml.backup
# Version control
git add suthep.yml
git commit -m "Update deployment configuration"การสำรองข้อมูลการตั้งค่า Nginx
สำรองข้อมูลการตั้งค่า Nginx:
# สำรองข้อมูล configs ของ Nginx ทั้งหมด
sudo tar -czf nginx-configs-backup.tar.gz /etc/nginx/sites-available/การสำรองข้อมูล Container
สำรองข ้อมูล Docker containers:
# Export container
docker export <container-name> > container-backup.tar
# หรือ commit เป็น image
docker commit <container-name> backup-image:latestการทำงานอัตโนมัติและ CI/CD
สคริปต์การ Deploy
สร้างสคริปต์การ deploy:
#!/bin/bash
# deploy.sh
set -e
echo "Deploying services..."
# รัน tests
npm test
# Deploy
suthep deploy
echo "Deployment complete!"การรวม CI/CD
ตัวอย่าง workflow GitHub Actions:
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
- run: npm install -g suthep
- run: suthep deploy
env:
SSH_KEY: ${{ secrets.SSH_KEY }}การใช้ Docker ขั้นสูง
Multi-Stage Builds
ใช ้ multi-stage builds สำหรับ images ที่เพิ่มประสิทธิภาพ:
# Build stage
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Production stage
FROM node:16-alpine
WORKDIR /app
COPY /app/dist ./dist
COPY /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]การรวม Docker Compose
ใช้ Docker Compose ร่วมกับ Suthep:
# docker-compose.yml
version: '3'
services:
database:
image: postgres:14
# ... database configจากนั้นเชื่อมต่อ Suthep กับ container:
services:
- name: api
docker:
container: myapp_database_1 # จาก docker-compose
port: 5432การแก้ปัญหาขั้นสูง
Performance Debugging
ระบุจุดอ bottleneck ของประสิทธิภาพ:
# ตรวจสอบประสิทธิภาพ Nginx
sudo nginx -V # ตรวจสอบ compiled modules
sudo nginx -T # ทดสอบและแสดง config เต็ม
# ตรวจสอบทรัพยากรระบบ
htop
iostatNetwork Debugging
แก้ปัญหาปัญหาเครือข่าย:
# ตรวจสอบ port binding
sudo netstat -tulpn | grep 3000
# ทดสอบการเชื่อมต่อ
curl -v http://localhost:3000
# ตรวจสอบ DNS
dig example.com
nslookup example.comContainer Debugging
แก้ปัญหาปัญหา container:
# ตรวจสอบ container
docker inspect <container-name>
# รันคำสั่งใน container
docker exec -it <container-name> /bin/sh
# ตรวจสอบเครือข่า ย container
docker network ls
docker network inspect bridgeสรุปวิธีปฏิบัติที่ดี
- ใช้ Version Control - ติดตามการเปลี่ยนแปลงการตั้งค่า
- ทดสอบใน Staging - ทดสอบเสมอก่อน production
- ตรวจสอบ Health Checks - ตั้งค่าช่วงเวลาที่เหมาะสม
- สำรองข้อมูลการตั้งค่า - สำรองข้อมูลเป็นประจำ
- รักษาความปลอดภัยการเข้าถึง - ใช้ HTTPS, ตั้งค่า firewalls
- เพิ่มประสิทธิภาพทรัพยากร - ตรวจสอบและเพิ่มประสิทธิภาพการใช้งาน
- บันทึกการเปลี่ยนแปลง - เก็บ deployment logs
- ทำงานอัตโนมัติการ Deploy - ใช้ CI/CD pipelines
ขั้นตอนถัดไป
- ตรวจสอบ ตัวอย่าง สำหรับกรณีการใช้งานจริง
- ดู การแก้ปัญหา สำหรับปัญหาที่พบบ่อย
- อ้างอิง คู่มือการตั้งค่า สำหรับตัวเลือกทั้งหมด