7 पॉइंट द्वारा GN⁺ 2024-08-27 | 1 टिप्पणियां | WhatsApp पर शेयर करें

Dokku क्या है?

  • Dokku एक single server पर चलने वाला open source Platform as a Service (PaaS) है
  • यह Heroku जैसा है, लेकिन इसका मालिक खुद उपयोगकर्ता होता है
  • अगर आपको किफायती और इस्तेमाल में आसान serverless platform चाहिए, तो यह अच्छा विकल्प है
  • मैं OVHcloud के $7/माह वाले VPS पर अपना Dokku server चलाता हूँ

Dokku की मुख्य विशेषताएँ

  • इस्तेमाल में आसान (Heroku जैसा)
  • Let’s Encrypt के जरिए automatic SSL certificate management
  • साइट को password से सुरक्षित करने के लिए Basic Auth support
  • एक ही command से scale up और scale down किया जा सकता है
  • Node, Python आदि तरह-तरह के applications संभालने की flexibility
  • git command से आसानी से deploy किया जा सकता है

Dokku का न्यूनतम उदाहरण

Docker container के साथ application deploy करना

  • Dockerfile को git repository के root में रखें
  • entrypoint.sh script का इस्तेमाल करके application को local या Docker container में चलाएँ
  • Dokku host पर application बनाएँ
  • local machine से 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

Static site deploy करना

  • Dokku की मदद से private GitHub repository से static site को आसानी से deploy किया जा सकता है और password से सुरक्षित भी किया जा सकता है
  • NGINX_ROOT environment variable सेट करके NGINX को static site serve करने के लिए configure करें
  • basic auth plugin को install और configure करें
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

  • Let’s Encrypt plugin का उपयोग करके HTTPS configure किया जा सकता है
  • अगर आप Cloudflare इस्तेमाल कर रहे हैं, तो अक्सर Cloudflare को यह संभालने देना ज्यादा आसान होता है

GitHub Actions के साथ deployment

  • GitHub Actions का उपयोग करके Dokku app को automatically deploy किया जा सकता है
  • उदाहरण GitHub Action workflow
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

अन्य टिप्स

  • remote से command चलाई जा सकती हैं
  • Docker cache invalidate करना
  • push किए बिना rebuild करना
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval

मैंने यह लेख क्यों लिखा?

  • हर बार नया application deploy करते समय मुझे details फिर से ढूँढनी पड़ती थीं, इसलिए इसे लिखा
  • उम्मीद है कि यह दूसरों के लिए भी उपयोगी होगा

GN⁺ का सारांश

  • Dokku एक किफायती और इस्तेमाल में आसान open source PaaS platform है
  • यह अलग-अलग applications को आसानी से deploy और manage करने की सुविधाएँ देता है
  • GitHub Actions जैसे tools के साथ automatic deployment किया जा सकता है
  • Cloudflare जैसी services के साथ इस्तेमाल करने पर यह और भी सुविधाजनक हो जाता है
  • इसी तरह की सुविधाएँ देने वाले अन्य projects में Heroku, Fly.io आदि शामिल हैं

1 टिप्पणियां

 
GN⁺ 2024-08-27
Hacker News राय
  • हाल में Dokploy का उपयोग करते हुए अच्छा अनुभव हो रहा है

    • यह Dokku जैसा है, लेकिन बेहतर web UI देता है
    • Docker/Compose solutions को deploy करना आसान हो जाता है और automatic LetsEncrypt feature built-in है
    • GitHub Actions workflow बनाकर app deployment को automate किया है
    • विभिन्न apps के लिए pre-configured Compose files भी देता है
  • कई "selfhosted Heroku" solutions देखने के बाद Dokku चुना

    • इसमें सबसे कम "magic" चाहिए और इस्तेमाल बंद करने पर भी इसे आसानी से हटाया जा सकता है
    • developer बहुत responsive है, और मदद लेकर custom plugin बनाया
    • इससे जुड़ी बातें ब्लॉग में document कीं
  • नया software इस्तेमाल करते समय समस्याएँ आ सकती हैं, लेकिन Dokku में ऐसी दिक्कत नहीं हुई

    • कुछ CLI argument order issues को छोड़कर यह अच्छी तरह काम करता है
    • अगर इसे और ज़्यादा इस्तेमाल करूँ, तो declarative config files से पूरी architecture configure करना चाहूँगा
  • Dokku में Let's Encrypt plugin के जरिए HTTPS setup करना आसान है

    • Cloudflare के जरिए TLS इस्तेमाल कर रहा हूँ
    • ध्यान रखना चाहिए कि personal site plain text में transmit न हो
  • Dokku इस्तेमाल करने के बाद Docker image build और Swarm deployment पर स्विच किया

    • यही self-hosted PaaS Lunni बनाने की प्रेरणा बना
    • Heroku या AWS की जगह अपने server पर सब कुछ चलाने का विचार पसंद है
    • अनुमानित monthly bill मानसिक शांति देता है
  • Coolify की लोकप्रियता बढ़ रही है, और यह हर आकार के organizations को self-hosted software मुफ्त में आसानी से चलाने देता है

    • Coolify एक open source और self-hostable Heroku/Netlify/Vercel alternative है
  • Dokku एक शानदार product है और इसके founder बहुत विनम्र और मददगार हैं

    • काश ज़्यादा लोग इसे financially support करते
  • इस तरह के infrastructure के लिए file/object storage के रूप में लोग क्या इस्तेमाल करते हैं, यह जानने की जिज्ञासा है

    • अगर AWS इस्तेमाल करें, तो egress cost सारी बचत का फायदा खत्म कर सकती है
  • Dokku के साथ अनुभव अच्छा नहीं रहा

    • VPS crash होकर restart होने पर app फिर से शुरू नहीं हुआ
    • आखिरकार single-node k8s setup पर स्विच किया
  • traefik + standard podman + systemd integration इस्तेमाल किया जा सकता है

    • संबंधित documentation और links दिए गए हैं