คู่มือการแก้ปัญหา
คู่มือนี้ช่วยให้คุณแก้ปัญหาที่พบบ่อยเมื่อใช้ Suthep
ปัญหาที่พบบ่อย
ไม่พบไฟล์การตั้งค่า
ข้อผิดพลาด:
Configuration file not found: suthep.ymlวิธีแก้ไข:
- ตรวจสอบว่าคุณอยู่ในไดเรกทอรีที่ถูกต้อง
- ตรวจสอบว่า
suthep.ymlมีอยู่:ls -la suthep.yml - สร้างไฟล์การตั้งค่า:
suthep init - หรือระบุ path แบบกำหนดเอง:
suthep deploy -f /path/to/config.yml
พอร์ตถูกใช้งานอยู่แล้ว
ข้อผิดพลาด:
Error: Port 3000 is already in useวิธีแก้ไข:
-
ค้นหาสิ่งที่ใช้พอร์ต:
sudo lsof -i :3000 # หรือ sudo netstat -tulpn | grep 3000 -
หยุดบริการที่ขัดแย้งหรือเปลี่ยนพอร์ตใน
suthep.yml:services: - name: api port: 3001 # เปลี่ยนจาก 3000
การสร้างใบรับรอง SSL ล้มเหลว
ข้อผิดพลาด:
Failed to obtain SSL certificate for example.comวิธีแก้ไข:
-
ตรวจสอบการตั้งค่า DNS
nslookup example.com # ตรวจสอบว่าโดเมนชี้ไปที่ IP เซิร์ฟเวอร์ของคุณ -
ตรวจสอบว่าพอร์ตเปิดอยู่
# ตรวจสอบว่าพอร์ต 80 และ 443 เปิดอยู่ sudo ufw status # หรือ sudo iptables -L -
ใช้โหมด Staging สำหรับการทดสอบ
certbot: staging: true # ใช้ staging เพื่อหลีกเลี่ยง rate limits -
ตรวจสอบการเข้าถึงโดเมน
curl -I http://example.com # ควรคืนค่า HTTP response -
ตรวจสอบ Logs ของ Certbot
sudo tail -f /var/log/letsencrypt/letsencrypt.log
ข้อผิดพลาดการตั้งค่า Nginx
ข้อผิดพลาด:
nginx: configuration file /etc/nginx/nginx.conf test failedวิธีแก้ไข:
-
ทดสอบการตั้งค่า Nginx
sudo nginx -t -
ตรวจสอบ Error Logs ของ Nginx
sudo tail -f /var/log/nginx/error.log -
ตรวจสอบไฟล์ Config ที่สร้างขึ้น
ls -la /etc/nginx/sites-available/ cat /etc/nginx/sites-available/example_com.conf -
ตรวจสอบไวยากรณ์ Nginx
sudo nginx -t -c /etc/nginx/nginx.conf
ปัญหา Docker Container
ข้อผ ิดพลาด:
Error: Docker container failed to startวิธีแก้ไข:
-
ตรวจสอบสถานะ Docker
docker ps docker ps -a # แสดง containers ทั้งหมด -
ตรวจสอบ Logs ของ Container
docker logs <container-name> -
ตรวจสอบ Docker Image
docker images docker pull <image-name> # Pull image ล่าสุด -
ตรวจสอบความขัดแย้งของพอร์ต
docker ps | grep <port> -
ลบ Containers เก่า
docker rm <container-name>
Health Check ล้มเหลว
ข้อผิดพลาด:
Health check failed for service apiวิธีแก้ไข:
-
ตรวจสอบ Health Check Endpoint
curl http://localhost:3000/health -
ตรวจสอบว่าบริการกำลังรัน
# สำหรับ Docker docker ps docker logs <container-name> # สำหรับ non-Docker ps aux | grep <service> -
เพิ่ม Health Check Timeout
deployment: healthCheckTimeout: 60000 # เพิ่มเป็น 60 วินาที -
ตรวจสอบ Health Check Path
services: - name: api healthCheck: path: /health # ตรวจสอบว่า path นี้มีอยู่
ข้อผิดพลาด Permission Denied
ข้อผิดพลาด:
Permission denied: /etc/nginx/sites-available/example.confวิธีแก้ไข:
-
ใช้ Sudo
sudo suthep deploy -
ตรวจสอบสิทธิ์ไฟล์
ls -la /etc/nginx/sites-available/ -
ตรวจสอบสิทธิ์ผู้ใช้
groups # ตรวจสอบกลุ่มผู้ใช้ของคุณ
บริการไม่สามารถเข้าถึงได้
ปัญหา: บริการ deploy แล้วแต่ไม่สามารถเข้าถึงผ่านโดเมนได้
วิธีแก้ไข:
-
ตรวจสอบสถานะ Nginx
sudo systemctl status nginx -
ตรวจสอบว่า Site เปิดใช้งาน
ls -la /etc/nginx/sites-enabled/ # ควรมี symlink ไปยัง sites-available config -
ตรวจสอบ DNS Resolution
nslookup example.com dig example.com -
ทดสอบการเชื่อมต่อ Local
curl http://localhost:3000 -
ตรวจสอบ Firewall
sudo ufw status sudo ufw allow 80/tcp sudo ufw allow 443/tcp
ปัญหา Zero-Downtime Deployment
ปัญหา: การ deploy ทำให้เกิด downtime
วิธีแก้ไข:
-
ตรวจสอบกลยุทธ์การ Deploy
deployment: strategy: rolling # หรือ blue-green -
ตรวจสอบสุขภาพ Container
docker ps # ทั้ง container เก่าและใหม่ควรกำลังรันระหว่างการ deploy -
ตรวจสอบ Nginx Reload
sudo nginx -t # ทดสอบก่อน reload sudo systemctl reload nginx # Graceful reload
หลายบริการบนโดเมนเดียวกัน
ปัญหา: Path-based routing ไม่ทำงาน
วิธีแก้ไข:
-
ต รวจสอบการตั้งค่า Path
services: - name: api path: /api # ตรวจสอบว่า path ถูกตั้งค่า - name: ui path: / # Root path -
ตรวจสอบ Nginx Config
cat /etc/nginx/sites-available/example_com.conf # ควรมี location blocks สำหรับแต่ละ path -
ทดสอบ Paths
curl http://example.com/api/health curl http://example.com/
เคล็ดลับการ Debug
เปิดใช้งาน Verbose Output
คำสั่งบางคำสั่งรองรับ verbose output ตรวจสอบ logs:
# ตรวจสอบ logs ของ Nginx
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log
# ตรวจสอบ logs ของ Docker
docker logs <container-name>
# ตรวจสอบ system logs
sudo journalctl -u nginx -fทดสอบการตั้งค่า
ก่อน deploy ทดสอบการตั้งค่าของคุณ:
# ตรวจสอบความถูกต้องของไวยากรณ์ YAML
yamllint suthep.yml
# ทดสอบ config ของ Nginx
sudo nginx -t
# ทดสอบ Docker image
docker run --rm <image-name>การ Deploy แบบทีละขั้นตอน
Deploy ทีละขั้นตอนเพื่อแยกปัญหา:
# 1. Deploy โดยไม่มี Nginx
suthep deploy --no-nginx
# 2. Deploy โดยไม่มี HTTPS
suthep deploy --no-https
# 3. Full deployment
suthep deployขอความช่วยเหลือ
หากคุณยังพบปัญหา:
-
ตรวจสอบ Logs
- Nginx:
/var/log/nginx/ - Certbot:
/var/log/letsencrypt/ - Docker:
docker logs <container>
- Nginx:
-
ตรวจสอบการตั้งค่า
- ตรวจสอบไวยากรณ์
suthep.yml - ตรวจสอบว่าฟิลด์ที่จำเป็นทั้งหมดมีอยู่
- ตรวจสอบความถูกต้องของหมายเลขพอร์ตและโดเมน
- ตรวจสอบไวยากรณ์
-
ทดสอบส่วนประกอบทีละอย่าง
- ทดสอบ Nginx ด้วยตนเอง
- ทดสอบ Docker containers
- ทดสอบใบรับรอง SSL
-
ตรวจสอบทรัพยากรระบบ
# ตรวจสอบพื้นที่ดิสก์ df -h # ตรวจสอบหน่วยความจำ free -h # ตรวจสอบ CPU top
การป้องกัน
เพื่อหลีกเลี่ยงปัญหาที่พบบ่อย:
-
ใช้ Staging สำหรับการทดสอบ
certbot: staging: true -
ตรวจสอบความถูกต้องของการตั้งค่า
suthep init # การตรวจสอบแบบโต้ตอบ -
ทดสอบก่อน Production
- ทดสอบในสภาพแวดล้อม staging ก่อน
- ตรวจสอบว่าบริการทั้งหมดทำงานแยกกัน
- ทดสอบกระบวนการ deploy
-
ตรวจสอบ Health Checks
- ตั้งค่าช่วงเวลาที่เหมาะสม
- ตรวจสอบ health check endpoints
- ตั้งค่า timeout ที่สมเหตุสมผล
ขั้นตอนถัดไป
- หัวข้อขั้นสูง - การตั้งค่าและเพิ่มประสิทธิภาพขั้นสูง
- ตัวอย่าง - ตรวจสอบตัวอย่างที่ทำงาน
ก่อนหน้า: ตัวอย่าง | ถัดไป: หัวข้อขั้นสูง →