Dokku là gì?
- Dokku là một Platform as a Service (PaaS) mã nguồn mở chạy trên một máy chủ đơn
- Tương tự Heroku, nhưng do người dùng sở hữu
- Đây là một nền tảng serverless tiết kiệm chi phí và dễ sử dụng
- Tôi vận hành máy chủ Dokku trên một VPS $7/tháng của OVHcloud
Các tính năng chính của Dokku
- Dễ sử dụng (tương tự Heroku)
- Tự động quản lý chứng chỉ SSL thông qua Let’s Encrypt
- Hỗ trợ Basic Auth để bảo vệ trang bằng mật khẩu
- Có thể scale up và scale down chỉ với một lệnh duy nhất
- Linh hoạt để xử lý nhiều loại ứng dụng như Node, Python, v.v.
- Có thể triển khai dễ dàng bằng lệnh
git
Ví dụ Dokku tối thiểu
Triển khai ứng dụng bằng Docker container
- Đặt
Dockerfile ở thư mục gốc của kho git
- Dùng script
entrypoint.sh để chạy ứng dụng cục bộ hoặc trong Docker container
- Tạo ứng dụng trên máy chủ Dokku
- Thêm máy chủ Dokku làm remote ở môi trường local rồi 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
Triển khai static site
- Có thể dùng Dokku để dễ dàng triển khai static site từ kho GitHub riêng tư và bảo vệ bằng mật khẩu
- Thiết lập để NGINX phục vụ static site bằng cách đặt biến môi trường
NGINX_ROOT
- Cài đặt và cấu hình plugin 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
- Có thể cấu hình HTTPS bằng plugin Let’s Encrypt
- Nếu dùng Cloudflare, sẽ dễ hơn nếu để Cloudflare xử lý việc này
Triển khai bằng GitHub Actions
- Có thể tự động triển khai ứng dụng Dokku bằng GitHub Actions
- Ví dụ workflow 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
Các mẹo khác
- Có thể chạy lệnh từ xa
- Vô hiệu hóa Docker cache
- Rebuild mà không cần push
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval
Tại sao tôi viết bài này?
- Tôi viết vì mỗi lần triển khai một ứng dụng mới lại phải đi tìm các chi tiết cần thiết
- Hy vọng điều này cũng hữu ích cho người khác
Tóm tắt của GN⁺
- Dokku là một nền tảng PaaS mã nguồn mở tiết kiệm chi phí và dễ sử dụng
- Cung cấp các tính năng giúp dễ dàng triển khai và quản lý nhiều loại ứng dụng khác nhau
- Có thể tự động triển khai bằng các công cụ như GitHub Actions
- Khi dùng cùng các dịch vụ như Cloudflare thì càng tiện lợi hơn
- Những dự án khác cung cấp tính năng tương tự gồm có Heroku, Fly.io, v.v.
1 bình luận
Ý kiến trên Hacker News
Gần đây đang thấy rất thích khi dùng Dokploy
Sau khi xem xét nhiều giải pháp "Heroku tự host", đã chọn Dokku
Khi dùng phần mềm mới thường có thể gặp vấn đề, nhưng Dokku thì không như vậy
Dokku giúp việc thiết lập HTTPS trở nên dễ dàng thông qua plugin Let's Encrypt
Đã dùng Dokku rồi chuyển sang build Docker image và triển khai bằng Swarm
Độ phổ biến của Coolify đang tăng lên, giúp các tổ chức ở mọi quy mô dễ dàng vận hành phần mềm tự host miễn phí
Dokku là một sản phẩm tuyệt vời và người sáng lập rất khiêm tốn, nhiệt tình hỗ trợ
Tò mò mọi người dùng gì làm lưu trữ tệp/đối tượng cho kiểu hạ tầng này
Trải nghiệm dùng Dokku không tốt
Có thể dùng tích hợp traefik + podman tiêu chuẩn + systemd