Crescendo Lab เอกสาร
ไทย
สมัครใช้งาน

ดีพลอยแอปจาก Dockerfile

ดีพลอยบริการที่ทำงานต่อเนื่อง เช่น webhook, API หรือเครื่องมือสำหรับเอเจนต์ จากซอร์สโค้ดที่มี Dockerfile

อัปเดตล่าสุด
ดู Markdown เปิดใน Claude เปิดใน ChatGPT

ก่อนเริ่มต้น#

  • โปรแกรมที่ตอบคำขอ HTTP
  • Dockerfile ที่ชั้นบนสุดของโปรเจกต์

1. เขียน Dockerfile#

ตัวอย่าง Node.js นี้ให้เซิร์ฟเวอร์รอรับที่ $PORT อิมเมจ EXPOSE พอร์ตเดียว และรันด้วยผู้ใช้ที่ไม่ใช่ root

Dockerfile
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
EXPOSE 8080
CMD ["node", "server.js"]
server.js
import { createServer } from "node:http";

const port = Number(process.env.PORT ?? 8080);

createServer((req, res) => {
  res.writeHead(200, { "content-type": "application/json" });
  res.end(JSON.stringify({ ok: true, path: req.url }));
}).listen(port);

อิมเมจต้องเป็นไปตามข้อกำหนดเหล่านี้ ดูกฎทั้งหมดได้ที่ข้อกำหนดการรันคอนเทนเนอร์

  • มี CMD หรือ ENTRYPOINT ที่เริ่มเซิร์ฟเวอร์
  • ให้บริการ HTTP ที่ $PORT
  • บิลด์สำหรับ linux/amd64
  • ระบบไฟล์เป็นแบบอ่านอย่างเดียว ยกเว้น /tmp

2. อัปโหลดซอร์สโค้ด#

ในแท็บ ดีพลอย ของแอป ลากโฟลเดอร์ซอร์สโค้ดหรือไฟล์ .zip มาวางในพื้นที่อัปโหลด แล้วเลือก อัปโหลดและบิลด์ โดย Dockerfile ต้องอยู่ชั้นบนสุด ถ้าบีบอัด zip เอง อย่าใส่ node_modules, .git และ .env

bash
zip -r ../app.zip . -x 'node_modules/*' '.git/*' '.env*'

แพลตฟอร์มจะบิลด์อิมเมจ สแกนหาช่องโหว่และความลับ และตรวจว่าตรงตามข้อกำหนดการรันหรือไม่ สิ่งที่แพลตฟอร์มปรับให้จะแสดงเป็นประกาศในหน้าเวอร์ชัน เช่น "อิมเมจรันด้วย root จึงเปลี่ยนไปรันด้วย uid 10001"

มีอิมเมจอยู่แล้ว?

พุชอิมเมจไปที่รีจิสทรีอิมเมจขององค์กร แล้วเลือกอิมเมจใน ดีพลอยเวอร์ชันใหม่จาก เพื่อสร้างเวอร์ชันจากอิมเมจนั้น

3. เผยแพร่และตรวจสถานะการทำงาน#

เวอร์ชันแรกของแอปจะเผยแพร่เองเมื่อบิลด์สำเร็จ เวอร์ชันถัดไปให้เลือก เผยแพร่ ในแท็บ ดีพลอย

แท็บ การทำงาน แสดงเวอร์ชันที่ให้บริการอยู่และจำนวนอินสแตนซ์ที่พร้อม

เวอร์ชันไม่พร้อมเสียที

สาเหตุที่พบบ่อยคือพอร์ต เซิร์ฟเวอร์ไม่ได้รอรับที่พอร์ตที่แพลตฟอร์มกำหนด ดูวิธีแก้ที่การแก้ปัญหาการดีพลอย

4. เพิ่มความลับ#

ป้อน API key และค่าลับอื่น ๆ ใน ตั้งค่า ของแอป แล้วให้โค้ดอ่านจากตัวแปรสภาพแวดล้อม การตั้งค่าที่บันทึกจะมีผลเมื่อรีสตาร์ตบริการ และอินสแตนซ์เดิมจะให้บริการต่อจนกว่าอินสแตนซ์ใหม่จะพร้อม ดูการตั้งค่าแอป

อย่าใส่ความลับไว้ในซอร์สโค้ด

ถ้าการสแกนพบคีย์ในอิมเมจ ให้เอาออกจากซอร์สโค้ด ตั้งเป็นความลับของแอปแทน และเปลี่ยนคีย์ใหม่