7 puan yazan GN⁺ 2024-08-27 | Henüz yorum yok. | WhatsApp'ta paylaş
  • 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.

Henüz yorum yok.