7 puan yazan GN⁺ 2024-08-27 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-08-27
Hacker News yorumu
  • Son zamanlarda Dokploy kullanmaktan keyif alıyorum

    • Dokku'ya benziyor ama daha iyi bir web arayüzü sunuyor
    • Docker/Compose çözümlerini dağıtmayı kolaylaştırıyor ve otomatik LetsEncrypt özelliği yerleşik geliyor
    • Uygulama dağıtımını otomatikleştirmek için bir GitHub Actions iş akışı kurdum
    • Çeşitli uygulamalar için önceden yapılandırılmış Compose dosyaları da sunuyor
  • Birkaç farklı "self-hosted Heroku" çözümünü inceledikten sonra Dokku'yu seçtim

    • En az "sihir" gerektiriyor ve kullanmayı bırakırsanız kaldırması da kolay
    • Geliştirici çok ilgiliydi ve yardım alarak özel bir eklenti yaptım
    • Bununla ilgili bir blog yazısında dokümante ettim
  • Yeni bir yazılım kullanırken sorun yaşayabilirsiniz ama Dokku'da bunu yaşamadım

    • CLI argümanlarının sıralamasıyla ilgili birkaç sorun dışında iyi çalışıyor
    • Daha fazla kullanırsam tüm mimariyi deklaratif yapılandırma dosyalarıyla kurmak isterim
  • Dokku'da Let's Encrypt eklentisi sayesinde HTTPS kurmak kolay

    • TLS kullanmak için Cloudflare kullanıyorum
    • Kişisel sitenizin düz metin olarak iletilmemesine dikkat etmek gerekiyor
  • Dokku kullandıktan sonra Docker image build ve Swarm dağıtımına geçtim

    • Bu da kendi barındırdığım PaaS olan Lunni'yi geliştirmem için motivasyon oldu
    • Heroku veya AWS yerine sahip olduğum sunucularda her şeyi çalıştırma fikrini seviyorum
    • Öngörülebilir aylık fatura iç rahatlığı sağlıyor
  • 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

    • Coolify, açık kaynaklı ve self-host edilebilen bir Heroku/Netlify/Vercel alternatifi
  • Dokku harika bir ürün ve kurucusu çok mütevazı ve yardımsever

    • Keşke daha fazla insan maddi olarak desteklese
  • Bu tür bir altyapıda dosya/nesne depolama için ne kullandığınızı merak ediyorum

    • AWS kullanırsanız egress maliyetleri tüm tasarrufu ortadan kaldırabilir
  • Dokku ile deneyimim iyi değildi

    • VPS çöktüğünde ve yeniden başladığında uygulamalar tekrar başlamıyordu
    • Sonunda tek düğümlü bir k8s kurulumuna geçtim
  • traefik + standart podman + systemd entegrasyonu kullanabilirsiniz

    • İlgili belgeler ve bağlantılar sağlanmış