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 टिप्पणियां
Hacker News राय
हाल में Dokploy का उपयोग करते हुए अच्छा अनुभव हो रहा है
कई "selfhosted Heroku" solutions देखने के बाद Dokku चुना
नया software इस्तेमाल करते समय समस्याएँ आ सकती हैं, लेकिन Dokku में ऐसी दिक्कत नहीं हुई
Dokku में Let's Encrypt plugin के जरिए HTTPS setup करना आसान है
Dokku इस्तेमाल करने के बाद Docker image build और Swarm deployment पर स्विच किया
Coolify की लोकप्रियता बढ़ रही है, और यह हर आकार के organizations को self-hosted software मुफ्त में आसानी से चलाने देता है
Dokku एक शानदार product है और इसके founder बहुत विनम्र और मददगार हैं
इस तरह के infrastructure के लिए file/object storage के रूप में लोग क्या इस्तेमाल करते हैं, यह जानने की जिज्ञासा है
Dokku के साथ अनुभव अच्छा नहीं रहा
traefik + standard podman + systemd integration इस्तेमाल किया जा सकता है