Dokku คืออะไร?
- Dokku เป็น Platform as a Service (PaaS) แบบโอเพนซอร์สที่ทำงานบนเซิร์ฟเวอร์เครื่องเดียว
- คล้าย Heroku แต่ผู้ใช้เป็นเจ้าของเอง
- เหมาะสำหรับผู้ที่ต้องการแพลตฟอร์มเซิร์ฟเวอร์เลสที่คุ้มค่าและใช้งานง่าย
- ผู้เขียนรันเซิร์ฟเวอร์ Dokku บน VPS ราคา $7 ต่อเดือนจาก OVHcloud
ความสามารถหลักของ Dokku
- ใช้งานง่าย (คล้าย Heroku)
- จัดการใบรับรอง SSL อัตโนมัติผ่าน Let’s Encrypt
- รองรับ Basic Auth เพื่อป้องกันเว็บไซต์ด้วยรหัสผ่าน
- ขยายและลดขนาดได้ด้วยคำสั่งเดียว
- ยืดหยุ่นพอสำหรับแอปพลิเคชันหลากหลายประเภท เช่น Node, Python เป็นต้น
- ดีพลอยได้ง่ายด้วยคำสั่ง git
ตัวอย่าง Dokku แบบขั้นต่ำ
ดีพลอยแอปพลิเคชันด้วย Docker container
- วาง Dockerfile ไว้ที่ root ของ git repository
- ใช้สคริปต์
entrypoint.sh เพื่อรันแอปพลิเคชันทั้งบนเครื่องโลคัลหรือใน Docker container
- สร้างแอปพลิเคชันบนโฮสต์ Dokku
- เพิ่ม Dokku host เป็น remote จากเครื่องโลคัลแล้ว push ขึ้นไป
FROM python:3.10
COPY . /app
WORKDIR /app
RUN pip install .
WORKDIR /app/
ENTRYPOINT ["./entrypoint.sh"]
#!/bin/bash
exec uvicorn main:app --port "$PORT" --host 0.0.0.0
dokku apps:create myapp
git remote add dokku dokku@dokku:myapp
git push dokku main
ดีพลอยเว็บไซต์แบบสแตติก
- ใช้ Dokku เพื่อดีพลอยเว็บไซต์แบบสแตติกจาก GitHub repository แบบ private ได้ง่าย และตั้งรหัสผ่านป้องกันได้
- ตั้งค่าตัวแปรแวดล้อม
NGINX_ROOT เพื่อให้ NGINX ให้บริการเว็บไซต์แบบสแตติก
- ติดตั้งและตั้งค่าปลั๊กอินสำหรับ basic auth
dokku apps:create mysite
dokku config:set static-site NGINX_ROOT=_site
sudo dokku plugin:install https://github.com/dokku/dokku-http-auth.git
sudo chmod +x /home/dokku
touch .static
echo BUILDPACK_URL=https://github.com/dokku/buildpack-nginx > .env
git remote add dokku dokku@dokku:mysite
git push dokku main
dokku http-auth:enable mysite <username> <password>
SSL / HTTPS
- สามารถตั้งค่า HTTPS ได้ด้วยปลั๊กอิน Let’s Encrypt
- หากใช้ Cloudflare การปล่อยให้ Cloudflare จัดการส่วนนี้มักจะง่ายกว่า
การดีพลอยด้วย GitHub Actions
- สามารถใช้ GitHub Actions เพื่อดีพลอยแอป Dokku แบบอัตโนมัติได้
- ตัวอย่างเวิร์กโฟลว์ GitHub Action
name: CI
on:
workflow_dispatch:
push:
branches: [main]
jobs:
deploy-dokku:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Install SSH key
run: |
echo "${{ secrets.DOKKU_SSH_PRIVATE_KEY }}" > private_key.pem
chmod 600 private_key.pem
- name: Add remote and push
run: |
git remote add dokku dokku@rechat.co:llm-eval
GIT_SSH_COMMAND="ssh -i private_key.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git push dokku main -f
เคล็ดลับอื่น ๆ
- สามารถรันคำสั่งจากระยะไกลได้
- ล้าง Docker cache
- รีบิลด์โดยไม่ต้อง push
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval
ทำไมถึงเขียนบทความนี้?
- ผู้เขียนเขียนไว้เพราะต้องคอยค้นหารายละเอียดทุกครั้งที่ดีพลอยแอปพลิเคชันใหม่
- หวังว่าจะเป็นประโยชน์กับคนอื่นด้วย
สรุปโดย GN⁺
- Dokku เป็นแพลตฟอร์ม PaaS แบบโอเพนซอร์สที่คุ้มค่าและใช้งานง่าย
- มีความสามารถที่ช่วยให้ดีพลอยและจัดการแอปพลิเคชันหลากหลายประเภทได้ง่าย
- สามารถทำ automated deployment ได้ด้วยเครื่องมืออย่าง GitHub Actions
- เมื่อใช้งานร่วมกับบริการอย่าง Cloudflare จะยิ่งสะดวกขึ้น
- โปรเจกต์อื่นที่ให้ความสามารถคล้ายกัน ได้แก่ Heroku, Fly.io เป็นต้น
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ช่วงนี้กำลังสนุกกับการใช้ Dokploy
หลังจากลองดูโซลูชัน "self-hosted Heroku" หลายตัว ก็เลือก Dokku
เวลาลองใช้ซอฟต์แวร์ใหม่มักเจอปัญหาได้ แต่กับ Dokku ไม่ค่อยเป็นแบบนั้น
Dokku ทำให้การตั้งค่า HTTPS ง่ายผ่านปลั๊กอิน Let's Encrypt
เคยใช้ Dokku ก่อนจะย้ายไปสร้าง Docker image และดีพลอยด้วย Swarm
Coolify กำลังได้รับความนิยมมากขึ้น และทำให้องค์กรทุกขนาดสามารถรันซอฟต์แวร์แบบ self-hosted ได้ฟรีอย่างง่ายดาย
Dokku เป็นผลิตภัณฑ์ที่น่าทึ่ง และผู้ก่อตั้งก็ถ่อมตัวและให้ความช่วยเหลือดีมาก
สงสัยว่าสำหรับอินฟราสตรักเจอร์ประเภทนี้ คนใช้ไฟล์/อ็อบเจ็กต์สตอเรจอะไรกัน
ประสบการณ์การใช้ Dokku ไม่ค่อยดีนัก
สามารถใช้ traefik + podman มาตรฐาน + การผสานรวมกับ systemd ได้