Dokku nedir?
- Dokku, tek bir sunucuda çalışan açık kaynaklı bir Platform as a Service (PaaS)
- Heroku'ya benzer, ancak kullanıcıya aittir
- Maliyet açısından verimli ve kullanımı kolay bir serverless platforma ihtiyaç var
- Aylık 7 dolarlık OVHcloud VPS üzerinde bir Dokku sunucusu çalıştırıyorum
Dokku'nun başlıca özellikleri
- Kullanımı kolaydır (Heroku'ya benzer)
- Let’s Encrypt ile otomatik SSL sertifikası yönetimi
- Siteleri parola ile korumaya yarayan Basic Auth desteği
- Tek bir komutla ölçeklendirme ve küçültme
- Node, Python vb. çeşitli uygulamaları çalıştırabilecek esneklik
git komutlarıyla kolay dağıtım
En basit Dokku örneği
Docker container ile uygulama dağıtımı
Dockerfile dosyasını git deposunun kök dizinine yerleştirin
- Uygulamayı yerelde veya Docker container içinde çalıştırmak için
entrypoint.sh betiğini kullanın
- Dokku host üzerinde uygulamayı oluşturun
- Yerelden Dokku host'u remote olarak ekleyip push edin
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
Statik site dağıtımı
- Dokku ile özel GitHub deposundaki statik bir siteyi kolayca dağıtabilir ve parola ile koruyabilirsiniz
- NGINX'in statik siteyi sunması için
NGINX_ROOT ortam değişkenini ayarlayın
- Basic Auth eklentisini kurup yapılandırın
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 eklentisiyle HTTPS yapılandırılabilir
- Cloudflare kullanıyorsanız, bunu Cloudflare'in yönetmesini sağlamak daha kolaydır
GitHub Actions ile dağıtım
- GitHub Actions kullanarak Dokku uygulamaları otomatik olarak dağıtılabilir
- Örnek GitHub Action workflow'u
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
Diğer ipuçları
- Komutları uzaktan çalıştırabilirsiniz
- Docker cache temizleme
- Push yapmadan yeniden build etme
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval
Bu yazıyı neden yazdım?
- Her yeni uygulama dağıttığımda ayrıntıları tekrar aramak zorunda kaldığım için yazdım
- Umarım başkaları için de faydalı olur
GN⁺ özeti
- Dokku, maliyet açısından verimli ve kullanımı kolay açık kaynaklı bir PaaS platformudur
- Çeşitli uygulamaları kolayca dağıtıp yönetmek için özellikler sunar
- GitHub Actions gibi araçlarla otomatik dağıtım yapılabilir
- Cloudflare gibi servislerle birlikte kullanıldığında daha da kullanışlıdır
- Benzer işlevler sunan diğer projeler arasında Heroku ve Fly.io bulunur
1 yorum
Hacker News yorumu
Son zamanlarda Dokploy kullanmaktan keyif alıyorum
Birkaç farklı "self-hosted Heroku" çözümünü inceledikten sonra Dokku'yu seçtim
Yeni bir yazılım kullanırken sorun yaşayabilirsiniz ama Dokku'da bunu yaşamadım
Dokku'da Let's Encrypt eklentisi sayesinde HTTPS kurmak kolay
Dokku kullandıktan sonra Docker image build ve Swarm dağıtımına geçtim
Coolify giderek daha popüler hale geliyor ve her ölçekteki organizasyonun ücretsiz olarak kendi barındırdığı yazılımları kolayca çalıştırmasını sağlıyor
Dokku harika bir ürün ve kurucusu çok mütevazı ve yardımsever
Bu tür bir altyapıda dosya/nesne depolama için ne kullandığınızı merak ediyorum
Dokku ile deneyimim iyi değildi
traefik + standart podman + systemd entegrasyonu kullanabilirsiniz