Back to Discover

🚀 Docker Compose Refactor

One Prompt description placeholder

Prompt

สร้างไฟล์ `docker-compose.yml` และ `.env` สำหรับ {xxx} และช่วยปรับปรุงโครงสร้างและ code ของ Docker Project ให้เป็นไปตามมาตรฐานการพัฒนาที่ดี และเรียงลำดับ properties ตามหลักการต่อไปนี้: 1. โครงสร้าง Docker Compose ปรับแต่ง `docker-compose.yml` ให้เรียงลำดับ properties ตามมาตรฐาน: ``` - name: ${GLOBAL_NAME} - services: - container_name - image หรือ build - restart - environment - ports - volumes - networks - depends_on - command (ถ้าจำเป็น) - healthcheck - networks - volumes ``` 2. Naming Convention - กำหนด service name ใน `docker-copose.yml` ตาม {tech} ที่ใช้ เช่น nginx, mongodb, postgres - หากชื่อ service มี spacebar ให้ใช้ underscore ในการเชื่อม เช่น Uptime Kuma เป็น uptime_kuma - กำหนด container_name เป็น {service}_app สำหรับ Web Service และ {service}_db สำหรับ Database นอกนั้นกำหนดเป็น {service}_{tech} - สำหรับ networks และ volumes กำหนด driver ให้เหมาะสม และให้ใช้รูปแบบนี้ ``` networks: default: name: ${SERVICE_CONTAINER_NAME}_network driver: bridge volumes: default: name: ${SERVICE_CONTAINER_NAME}_data driver: local ``` 3. โครงสร้าง Environment Variables ปรับแต่ง `.env` ให้เรียงลำดับ group ของ service configuration ตามมาตรฐาน: - Global Configuration: - GLOBAL_NAME={xxx} - RESTART_POLICY=unless-stopped - TIMEZONE=Asia/Bangkok - HEALTHCHECK_INTERVAL - HEALTHCHECK_TIMEOUT - HEALTHCHECK_RETRIES - Postgres Configuration / Oracle Configuration - POSTGRES_CONTAINER_NAME - POSTGRES_IMAGE_NAME - POSTGRES_IMAGE_VERSION - POSTGRES_PORT - POSTGRES_ROOT_PASSWORD - POSTGRES_USER - POSTGRES_PASSWORD - POSTGRES_DATABASE - {Service} Configuration - {Service} _CONTAINER_NAME - {Service}_IMAGE_NAME - {Service}_IMAGE_VERSION - {Service}_HTTP_PORT - {Service}_HTTPS_PORT - {Service Others} Configuration 4. Structure & Documentation - ใช้ภาษาอังกฤษในการ comment - จัดกลุ่ม configuration ตาม Service - ใช้รูปแบบ comment: # {Service} configuration 5. ไฟล์ที่ต้องมี - `docker-compose.yml`: ไฟล์หลักพร้อม volume mappings ที่เหมาะสม - `.env`: ตัวแปรสภาพแวดล้อมพร้อมค่าเริ่มต้น 6. ข้อกำหนดพิเศษ - ไม่ต้องกำหนดเลข version docker ในไฟล์ `docker-compose.yml` - ไม่ต้อง comment ในไฟล์ `docker-compose.yml` - ไม่ต้องกำหนด network name และ volume name ใน `.env` - ถ้ามีค่า environment variable ที่ยังไม่ตรงตาม group ของ service ช่วยแก้ให้หน่อย - ไม่ต้องกำหนดค่าเริ่มต้น (default) ใน `docker-compose.yml` บังคับให้ใช้ค่าใน `.env` - image name ให้ระบุแบบ FQIN ป้องกันความสับสนกรณีที่มีหลาย registries - version image ถ้ามี stable release ให้ใช้ release ก่อน ถ้าไม่มีให้ไปใช้ latest หรือระบุเวอร์ชั่นที่ชัดเจน - ให้หา Global Image ที่เป็นมาตรฐานจากใน Docker Hub ก่อน - ถ้าสามารถใช้ database เป็น Postgres ได้ให้ใช้ Postgres - APP_URL ให้ใช้ค่า http://localhost หรือ https://localhost เป็นหลัก - ทั้ง 4 ค่านี้ให้ใช้ค่าเดียวกันกับ GLOBAL_NAME ``` - POSTGRES_ROOT_PASSWORD - POSTGRES_USER - POSTGRES_PASSWORD - POSTGRES_DATABASE ``` - networks และ volumes ไม่ต้องใช้ค่าเดียวกับ GLOBAL_NAME กรุณาปรับปรุง code ที่มีอยู่หรือสร้างตัวอย่างโครงสร้างใหม่ที่เป็นไปตามมาตรฐานข้างต้น ให้ครบทุกข้อ ไม่ต้องอธิบายเหตุผล หรือสรุปอะไรก็ตาม แต่ถ้ามีข้อเสนอแนะในการปรับปรุง code ที่ต่างออกไป ให้เสนอมาพร้อมอธิบายเหตุผลมาด้วย