7 điểm bởi GN⁺ 2024-08-27 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-08-27
Ý kiến trên Hacker News
  • Gần đây đang thấy rất thích khi dùng Dokploy

    • Tương tự Dokku nhưng có web UI tốt hơn
    • Giúp triển khai các giải pháp Docker/Compose dễ dàng hơn và tích hợp sẵn tính năng tự động LetsEncrypt
    • Đã thiết lập workflow GitHub Actions để tự động hóa việc triển khai ứng dụng
    • Cũng cung cấp các tệp Compose được cấu hình sẵn cho nhiều ứng dụng khác nhau
  • Sau khi xem xét nhiều giải pháp "Heroku tự host", đã chọn Dokku

    • Cần ít "phép thuật" nhất và ngay cả khi ngừng dùng cũng có thể gỡ bỏ dễ dàng
    • Nhà phát triển phản hồi rất nhanh và đã giúp tạo một plugin tùy chỉnh
    • Đã ghi lại nội dung liên quan trên blog
  • 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

    • Ngoài vài vấn đề về thứ tự đối số CLI, mọi thứ đều hoạt động tốt
    • Nếu dùng nhiều hơn, muốn cấu hình toàn bộ kiến trúc bằng tệp cấu hình khai báo
  • Dokku giúp việc thiết lập HTTPS trở nên dễ dàng thông qua plugin Let's Encrypt

    • Đang dùng TLS thông qua Cloudflare
    • Cần chú ý để các trang cá nhân không bị truyền ở dạng văn bản thuần
  • Đã dùng Dokku rồi chuyển sang build Docker image và triển khai bằng Swarm

    • Đây cũng là động lực để phát triển Lunni, một PaaS tự host
    • Thích ý tưởng chạy mọi thứ trên máy chủ mình sở hữu thay vì Heroku hay AWS
    • Hóa đơn hàng tháng có thể dự đoán trước mang lại sự yên tâm
  • Độ 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í

    • Coolify là lựa chọn thay thế Heroku/Netlify/Vercel mã nguồn mở và có thể tự host
  • 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ợ

    • Ước gì có nhiều người hỗ trợ tài chính hơn
  • 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

    • Nếu dùng AWS, chi phí egress có thể xóa sạch mọi khoản tiết kiệm
  • Trải nghiệm dùng Dokku không tốt

    • Khi VPS bị sập và khởi động lại, ứng dụng không tự chạy lại
    • Cuối cùng đã chuyển sang thiết lập k8s một node
  • Có thể dùng tích hợp traefik + podman tiêu chuẩn + systemd

    • Có cung cấp tài liệu và liên kết liên quan