- Dokku adalah PaaS open-source yang memungkinkan satu VPS digunakan seperti Heroku, cocok untuk pekerjaan individu atau tim kecil yang ingin men-deploy banyak aplikasi dengan murah di infrastruktur yang dimiliki sendiri
- Workload non-GPU dijalankan di VPS OVHcloud seharga 7 dolar per bulan, sehingga menurunkan biaya dan kompleksitas deployment di lingkungan yang perlu sering menaikkan aplikasi, seperti konsultasi LLM
- Aplikasi berbasis Dockerfile bisa di-deploy hanya dengan membuat aplikasi Dokku, menambahkan Git remote, lalu menjalankan
git push dokku main; jumlah proses dapat disesuaikan dengan dokku ps:scale
- Situs statis juga dapat menggabungkan
_site, .static, nginx buildpack, dan dokku-http-auth untuk deployment berbasis repositori GitHub privat dengan perlindungan kata sandi
- Jika dihubungkan dengan GitHub Actions, perintah SSH jarak jauh, invalidasi cache Docker, hingga rebuild tanpa push, Dokku bisa dijadikan lingkungan operasional PaaS pribadi yang dapat diulang
Menggunakan satu VPS seperti Heroku dengan Dokku
- Dokku adalah PaaS open-source yang berjalan di satu server pilihan pengguna
- Dokku memberikan pengalaman deployment yang mirip Heroku, tetapi infrastrukturnya dimiliki langsung oleh pengguna
- Karena biaya Heroku bisa membesar, platform deployment yang hemat biaya menjadi penting untuk pekerjaan konsultasi LLM yang harus men-deploy banyak aplikasi
- Untuk workload non-GPU, server Dokku dijalankan di VPS OVHcloud seharga 7 dolar per bulan
Pengalaman deployment ala Heroku dan fitur operasional
- Dokku menyediakan alur deployment yang mudah digunakan seperti Heroku
- Mendukung pengelolaan sertifikat SSL otomatis melalui Let’s Encrypt
- Situs dapat diberi perlindungan kata sandi dengan Basic Auth
- Scale up/down dapat dilakukan dengan satu perintah
- Dapat menangani berbagai aplikasi seperti Node dan Python, serta mendefinisikan container Docker secara langsung bila diperlukan
- Ada banyak plugin resmi, sehingga sebagian besar fungsi yang dibutuhkan dapat diperluas
- Deployment dapat dilakukan hanya dengan perintah Git
Men-deploy aplikasi sebagai container Docker
- Setelah menginstal Dokku di VPS, aplikasi dapat di-deploy sebagai container Docker dengan menaruh Dockerfile di root repositori aplikasi
- Contoh Dockerfile menggunakan image
python:3.10, menyalin kode ke /app, lalu menjalankan pip install .
entrypoint.sh digunakan agar aplikasi mudah dijalankan di lokal atau di container Docker
- Contohnya menjalankan aplikasi FastAPI dengan
uvicorn main:app --port "$PORT" --host 0.0.0.0
- Di host Dokku, buat aplikasi terlebih dahulu
dokku apps:create myapp
- Di lokal, atur informasi akses host Dokku di
~/.ssh/config, dan beri nama host tersebut dokku
- Tambahkan Dokku sebagai remote di repositori Git lokal, lalu push untuk melakukan deployment
git remote add dokku dokku@dokku:myapp
git push dokku main
- Setelah deployment, URL aplikasi akan ditampilkan di log lokal; default-nya berbentuk
myapp.yourdomain.com
- Jumlah worker dapat disesuaikan dengan perintah berikut
dokku ps:scale myapp web=2
Situs statis privat dan Basic Auth
- GitHub Pages kurang praktis untuk men-deploy situs statis privat dengan mudah karena membutuhkan akun Enterprise yang mahal
- Dengan Dokku, situs statis dari repositori GitHub privat dapat di-deploy dan dilindungi dengan kata sandi
- Asumsikan situs statis berada di folder
_site dalam repositori Git
- Di host Dokku, buat aplikasi dan setel variabel lingkungan
NGINX_ROOT ke _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
- Dari root repositori Git yang berisi situs statis, lakukan langkah berikut
touch .static
echo BUILDPACK_URL=https://github.com/dokku/buildpack-nginx > .env
git remote add dokku dokku@dokku:mysite
.static memberi tahu Dokku bahwa ini adalah situs statis
BUILDPACK_URL menentukan agar nginx buildpack digunakan
- Biasanya terdeteksi otomatis, tetapi pada proyek yang berisi kode sekaligus situs statis, menyebutkan nginx buildpack secara eksplisit dapat mengurangi kebingungan
- Deployment dilakukan dengan
git push dokku main
- Autentikasi diaktifkan di host Dokku dengan perintah berikut
dokku http-auth:enable mysite <username> <password>
- Beberapa pasangan username/password dapat ditambahkan, dan filtering IP tertentu juga dimungkinkan
- HTTPS dapat diatur dengan Let’s Encrypt Plugin, yang juga mendukung pembaruan otomatis
- Jika HTTPS ditangani melalui proxy Cloudflare, gunakan konfigurasi yang menyerahkannya ke Cloudflare alih-alih memakai plugin Let’s Encrypt
Deployment otomatis dengan GitHub Actions
- Aplikasi Dokku dapat di-deploy otomatis dengan GitHub Actions
- Tidak perlu mengulang pekerjaan push langsung ke host Dokku secara manual
- Contoh workflow berjalan pada
workflow_dispatch dan push ke branch main
- Pengaturan
concurrency membatalkan job sebelumnya untuk menghindari deploy lock di Dokku
- Workflow melakukan checkout kode, membuat SSH private key dari
secrets.DOKKU_SSH_PRIVATE_KEY, lalu menambahkan Git remote dan melakukan force push ke Dokku
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
Perintah operasional jarak jauh dan rebuild
- Nama aplikasi contoh adalah
llm-eval, dan host-nya rechat.co
- Tanpa login SSH langsung ke host Dokku, perintah jarak jauh dapat dijalankan sebagai pengguna
dokku
ssh dokku@rechat.co apps:list
- Cache Docker dapat diinvaliasi untuk melakukan build baru
ssh dokku@rechat.co repo:purge-cache llm-eval
- Saat perlu rebuild tanpa push, ada beberapa cara; salah satunya adalah perintah berikut
ssh dokku@rechat.co ps:rebuild llm-eval
Catatan pribadi untuk deployment berulang
- Catatan ini dibuat karena setiap kali men-deploy aplikasi baru, detail yang sama harus dicari lagi
- Ini disimpan sebagai referensi yang dapat digunakan berulang untuk menyusun platform deployment pribadi dengan Dokku
Belum ada komentar.