- Dokku एक open source PaaS है जो एक single VPS को Heroku की तरह इस्तेमाल करने देता है, इसलिए यह उन व्यक्तिगत या छोटे पैमाने के कामों के लिए उपयुक्त है जहाँ कई apps को अपनी खुद की infrastructure पर कम लागत में deploy करना हो
- non-GPU workloads को मैं $7/माह OVHcloud VPS पर चला रहा हूँ, और LLM consulting जैसे माहौल में जहाँ apps बार-बार deploy करने पड़ते हैं, यह deployment cost और complexity दोनों कम करता है
- Dockerfile-आधारित apps को Dokku app बनाकर, Git remote जोड़कर, सिर्फ
git push dokku main से deploy किया जा सकता है, और dokku ps:scale से process count समायोजित किया जा सकता है
- static sites के लिए भी
_site, .static, nginx buildpack, और dokku-http-auth को मिलाकर private GitHub repository-आधारित deployment और password protection संभव है
- GitHub Actions, remote SSH commands, Docker cache invalidation, और push के बिना rebuild को जोड़कर Dokku को एक repeatable personal PaaS operating environment बनाया जा सकता है
एक single VPS को Heroku की तरह इस्तेमाल करने वाला Dokku
- Dokku एक open source PaaS है जो उपयोगकर्ता द्वारा चुने गए single server पर चलता है
- यह Heroku जैसी deployment experience देता है, लेकिन infrastructure का मालिक उपयोगकर्ता खुद होता है
- क्योंकि Heroku की लागत बढ़ सकती है, इसलिए LLM consulting जैसे कामों में जहाँ कई applications deploy करनी हों, cost-effective deployment platform महत्वपूर्ण हो जाता है
- non-GPU workloads के लिए मैं $7/माह OVHcloud VPS पर Dokku server चला रहा हूँ
Heroku-स्टाइल deployment experience और operations features
- Dokku, Heroku की तरह आसान deployment flow देता है
- यह Let’s Encrypt के ज़रिए automatic SSL certificate management को support करता है
- Basic Auth से site पर password protection लगाया जा सकता है
- एक ही command से scale up/down किया जा सकता है
- यह Node, Python आदि कई तरह के apps को संभालता है, और ज़रूरत पड़ने पर Docker containers को सीधे define भी किया जा सकता है
- इसमें official plugins की अच्छी संख्या है, जिससे ज़रूरी features को बढ़ाया जा सकता है
- deployment सिर्फ Git commands से किया जा सकता है
Docker container से app deploy करना
- VPS पर Dokku को install करने के बाद, app repository के root में Dockerfile रखकर Docker container के रूप में deploy किया जा सकता है
- उदाहरण Dockerfile
python:3.10 image का उपयोग करता है, code को /app में copy करता है, और फिर pip install . चलाता है
entrypoint.sh का उपयोग local या Docker container में app को आसानी से चलाने के लिए किया जाता है
- उदाहरण में FastAPI app को
uvicorn main:app --port "$PORT" --host 0.0.0.0 से चलाया गया है
- पहले Dokku host पर app बनाया जाता है
dokku apps:create myapp
- local मशीन पर
~/.ssh/config में Dokku host की access जानकारी सेट की जाती है, और उस host name को dokku रखा जाता है
- local Git repository में Dokku को remote के रूप में जोड़कर push करने पर deployment हो जाता है
git remote add dokku dokku@dokku:myapp
git push dokku main
- deployment के बाद local logs में app URL दिखाई देता है, और default रूप
myapp.yourdomain.com होता है
- worker count को नीचे दी गई command से बदला जा सकता है
dokku ps:scale myapp web=2
private static sites और Basic Auth
- private static sites को आसानी से deploy करने के लिए GitHub Pages में महँगा Enterprise account चाहिए, जो असुविधाजनक है
- Dokku का उपयोग करके private GitHub repository की static site deploy की जा सकती है और उसे password से सुरक्षित भी किया जा सकता है
- मान लेते हैं कि static site Git repository के
_site folder में है
- Dokku host पर app बनाकर
NGINX_ROOT environment variable को _site पर सेट करें
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
- static site वाली Git repository के root में नीचे दिए गए काम करें
touch .static
echo BUILDPACK_URL=https://github.com/dokku/buildpack-nginx > .env
git remote add dokku dokku@dokku:mysite
.static Dokku को बताता है कि यह static site है
BUILDPACK_URL nginx buildpack उपयोग करने के लिए सेट किया जाता है
- आम तौर पर यह auto-detect हो जाता है, लेकिन जिन projects में code और static site साथ हों, वहाँ nginx buildpack को explicitly बताना confusion कम करता है
- deployment
git push dokku main से किया जाता है
- authentication को Dokku host पर नीचे दी गई command से enable किया जाता है
dokku http-auth:enable mysite <username> <password>
- कई username/password जोड़े जा सकते हैं और specific IP filtering भी संभव है
- HTTPS को Let’s Encrypt Plugin से configure किया जा सकता है, और automatic renewal भी supported है
- अगर HTTPS को Cloudflare proxy संभाल रहा हो, तो Let’s Encrypt plugin की जगह Cloudflare पर ही यह configuration छोड़ी जा सकती है
GitHub Actions से automatic deployment
- Dokku apps को GitHub Actions के जरिए automatically deploy किया जा सकता है
- इससे Dokku host पर सीधे push करने का manual काम बार-बार नहीं करना पड़ता
- example workflow
workflow_dispatch और main branch push पर चलता है
concurrency setting पिछली job को cancel करके Dokku के deploy lock से बचाती है
- workflow code checkout करता है,
secrets.DOKKU_SSH_PRIVATE_KEY से SSH private key बनाता है, फिर Git remote जोड़कर Dokku पर force push करता है
name: CI
on:
workflow_dispatch:
push:
branches: [main]
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
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 operations commands और rebuild
- example app का नाम
llm-eval है, और host rechat.co है
- Dokku host में सीधे SSH login किए बिना भी
dokku user के रूप में remote commands चलाई जा सकती हैं
ssh dokku@rechat.co apps:list
- Docker cache को invalidate करके नया build किया जा सकता है
ssh dokku@rechat.co repo:purge-cache llm-eval
- push के बिना rebuild की ज़रूरत हो तो कई तरीके हैं, जिनमें एक यह command है
ssh dokku@rechat.co ps:rebuild llm-eval
दोहराए जाने वाले deployment के लिए personal reference
- हर बार नया app deploy करते समय वही details फिर से ढूँढ़नी पड़ती थीं, इसलिए इन्हें व्यवस्थित किया गया
- यह Dokku-आधारित personal deployment platform setup के लिए बार-बार उपयोग होने वाला reference है
अभी कोई टिप्पणी नहीं है.