- Dokku, tek bir VPS’i Heroku gibi kullanmanızı sağlayan açık kaynaklı bir PaaS’tir; birden fazla uygulamayı kendi sahip olduğunuz altyapıda düşük maliyetle dağıtmak isteyen bireysel ve küçük ölçekli işler için uygundur
- GPU gerektirmeyen iş yükleri aylık 7 dolarlık OVHcloud VPS üzerinde çalıştırılıyor; LLM danışmanlığı gibi sık sık uygulama yayına almayı gerektiren ortamlarda dağıtım maliyetini ve karmaşıklığını azaltır
- Dockerfile tabanlı uygulamalar, Dokku uygulaması oluşturma, Git remote ekleme ve
git push dokku main komutuyla dağıtılabilir; süreç sayısı dokku ps:scale ile ayarlanabilir
- Statik sitelerde de
_site, .static, nginx buildpack ve dokku-http-auth bir araya getirilerek özel GitHub deposu tabanlı dağıtım ve parola koruması sağlanabilir
- GitHub Actions, uzaktan SSH komutları, Docker önbelleğini geçersiz kılma ve push olmadan rebuild işlemi bağlandığında kişisel PaaS tekrarlanabilir bir operasyon ortamına dönüştürülebilir
Tek bir VPS’i Heroku gibi kullanmak: Dokku
- Dokku, kullanıcının seçtiği tek bir sunucuda çalışan açık kaynaklı bir PaaS’tir
- Heroku’ya benzer bir dağıtım deneyimi sunar, ancak altyapının sahibi kullanıcıdır
- Heroku maliyetleri büyüyebildiği için, birden fazla uygulamanın dağıtılması gereken LLM danışmanlığı işlerinde maliyet verimli bir dağıtım platformu önemlidir
- GPU gerektirmeyen iş yükleri için Dokku sunucusu aylık 7 dolarlık OVHcloud VPS üzerinde çalıştırılıyor
Heroku tarzı dağıtım deneyimi ve operasyon özellikleri
- Dokku, Heroku gibi kullanımı kolay bir dağıtım akışı sunar
- Let’s Encrypt üzerinden otomatik SSL sertifikası yönetimini destekler
- Basic Auth ile sitelere parola koruması eklenebilir
- Tek bir komutla scale up/down yapılabilir
- Node, Python gibi çeşitli uygulamaları çalıştırabilir; gerektiğinde Docker container’ları da doğrudan tanımlanabilir
- Çok sayıda resmî eklenti bulunduğundan gerekli işlevlerin çoğu genişletilebilir
- Dağıtım yalnızca Git komutlarıyla yapılabilir
Uygulamayı Docker container olarak dağıtmak
- Dokku’yu VPS’e kurduktan sonra, uygulama deposunun kök dizinine bir Dockerfile koyarak Docker container olarak dağıtım yapılabilir
- Örnek Dockerfile,
python:3.10 imajını kullanır; kodu /app dizinine kopyaladıktan sonra pip install . çalıştırır
entrypoint.sh, uygulamayı yerelde veya Docker container içinde kolayca çalıştırmak için kullanılır
- Örnekte FastAPI uygulaması
uvicorn main:app --port "$PORT" --host 0.0.0.0 ile çalıştırılır
- Önce Dokku host üzerinde uygulama oluşturulur
dokku apps:create myapp
- Yerelde
~/.ssh/config içinde Dokku host erişim bilgileri ayarlanır ve bu host adı dokku olarak belirlenir
- Yerel Git deposuna Dokku remote olarak eklendikten sonra push edilince dağıtım yapılır
git remote add dokku dokku@dokku:myapp
git push dokku main
- Dağıtımdan sonra uygulama URL’i yerel loglarda gösterilir; varsayılan biçim
myapp.yourdomain.com şeklindedir
- Worker sayısı şu komutla ayarlanabilir
dokku ps:scale myapp web=2
- Daha ayrıntılı bilgi Dokku docs içinde bulunabilir
Özel statik siteler ve Basic Auth
- GitHub Pages, özel statik siteleri kolayca dağıtmak için pahalı bir Enterprise hesabı gerektirdiğinden kullanışsızdır
- Dokku ile özel GitHub deposundaki statik site dağıtılabilir ve parola ile korunabilir
- Statik sitenin Git deposundaki
_site klasöründe bulunduğu varsayılır
- Dokku host üzerinde uygulama oluşturulur ve
NGINX_ROOT ortam değişkeni _site olarak ayarlanır
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
- Statik sitenin bulunduğu Git deposunun kök dizininde şu işlemler yapılır
touch .static
echo BUILDPACK_URL=https://github.com/dokku/buildpack-nginx > .env
git remote add dokku dokku@dokku:mysite
.static, Dokku’ya bunun statik site olduğunu bildirir
BUILDPACK_URL, nginx buildpack kullanılacağını belirtir
- Genellikle otomatik algılanır; ancak kod ve statik sitenin birlikte bulunduğu projelerde karışıklığı azaltmak için nginx buildpack’i açıkça belirtmek gerekir
- Dağıtım
git push dokku main ile yapılır
- Kimlik doğrulama Dokku host üzerinde şu komutla etkinleştirilir
dokku http-auth:enable mysite <username> <password>
- Birden fazla kullanıcı adı/parola eklenebilir ve belirli IP filtrelemesi de yapılabilir
- HTTPS, Let’s Encrypt Plugin ile ayarlanabilir; otomatik yenileme de desteklenir
- HTTPS’in Cloudflare proxy ile ele alındığı durumlarda Let’s Encrypt eklentisi yerine bunu Cloudflare’a bırakan bir yapılandırma kullanılır
GitHub Actions ile otomatik dağıtım
- Dokku uygulamaları GitHub Actions ile otomatik dağıtılabilir
- Dokku host’a doğrudan push etme işlemini elle tekrarlamak gerekmez
- Örnek workflow,
workflow_dispatch ve main branch’ine push edildiğinde çalışır
concurrency ayarı önceki job’ı iptal ederek Dokku’nun deploy lock durumundan kaçınır
- Workflow kodu checkout eder,
secrets.DOKKU_SSH_PRIVATE_KEY üzerinden SSH private key oluşturur, ardından Git remote ekleyip Dokku’ya force push yapar
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
Uzaktan operasyon komutları ve rebuild
- Örnek uygulama adı
llm-eval, host ise rechat.co’dur
- Dokku host’a doğrudan SSH ile login olmadan,
dokku kullanıcısıyla uzaktan komut çalıştırılabilir
ssh dokku@rechat.co apps:list
- Docker önbelleği geçersiz kılınarak yeni bir build yapılabilir
ssh dokku@rechat.co repo:purge-cache llm-eval
- Push olmadan rebuild gerektiğinde birden fazla yöntem vardır; bir yöntem şu komuttur
ssh dokku@rechat.co ps:rebuild llm-eval
Tekrarlı dağıtımlar için kişisel başvuru notu
- Her yeni uygulama dağıtımında aynı ayrıntıları tekrar aramak gerektiği için derlendi
- Dokku ile kişisel dağıtım platformu yapılandırmasını tekrar tekrar kullanabilmek için bir başvuru kaynağı olarak bırakıldı
Henüz yorum yok.