Apa itu Dokku?
- Dokku adalah Platform as a Service (PaaS) open source yang berjalan di satu server tunggal
- Mirip Heroku, tetapi dimiliki oleh pengguna
- Dibutuhkan platform serverless yang hemat biaya dan mudah digunakan
- Menjalankan server Dokku menggunakan VPS seharga $7 per bulan dari OVHcloud
Fitur utama Dokku
- Mudah digunakan (mirip Heroku)
- Pengelolaan sertifikat SSL otomatis melalui Let’s Encrypt
- Mendukung Basic Auth untuk melindungi situs dengan kata sandi
- Bisa scale up dan scale down dengan satu perintah
- Fleksibel untuk menangani berbagai aplikasi seperti Node, Python, dan lainnya
- Dapat di-deploy dengan mudah menggunakan perintah git
Contoh Dokku minimal
Deploy aplikasi dengan container Docker
- Letakkan
Dockerfile di root repositori git
- Gunakan skrip
entrypoint.sh untuk menjalankan aplikasi secara lokal atau di container Docker
- Buat aplikasi di host Dokku
- Tambahkan host Dokku sebagai remote dari lokal lalu push
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
Deploy situs statis
- Dengan Dokku, Anda bisa dengan mudah men-deploy situs statis dari repositori GitHub privat dan melindunginya dengan kata sandi
- Atur variabel lingkungan
NGINX_ROOT agar NGINX menyajikan situs statis
- Instal dan konfigurasikan plugin basic auth
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
- HTTPS dapat dikonfigurasi menggunakan plugin Let’s Encrypt
- Jika menggunakan Cloudflare, akan lebih mudah jika Cloudflare yang menanganinya
Deploy dengan GitHub Actions
- Aplikasi Dokku dapat di-deploy otomatis menggunakan GitHub Actions
- Contoh workflow GitHub Action
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
Tips lainnya
- Perintah dapat dijalankan dari jarak jauh
- Membatalkan cache Docker
- Rebuild tanpa push
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval
Mengapa tulisan ini dibuat?
- Ditulis karena harus mencari detailnya setiap kali akan men-deploy aplikasi baru
- Semoga ini juga bermanfaat bagi orang lain
Ringkasan GN⁺
- Dokku adalah platform PaaS open source yang hemat biaya dan mudah digunakan
- Menyediakan fitur untuk men-deploy dan mengelola berbagai aplikasi dengan mudah
- Deploy otomatis dimungkinkan dengan alat seperti GitHub Actions
- Lebih praktis bila digunakan bersama layanan seperti Cloudflare
- Proyek lain dengan fungsi serupa antara lain Heroku dan Fly.io
1 komentar
Komentar Hacker News
Baru-baru ini menikmati penggunaan Dokploy
Setelah meninjau beberapa solusi "Heroku self-hosted", memilih Dokku
Saat menggunakan perangkat lunak baru biasanya bisa muncul masalah, tetapi Dokku tidak seperti itu
Dokku memudahkan pengaturan HTTPS melalui plugin Let's Encrypt
Pernah menggunakan Dokku lalu beralih ke build image Docker dan deployment Swarm
Popularitas Coolify sedang meningkat, dan memungkinkan organisasi dari berbagai skala menjalankan perangkat lunak self-hosted dengan mudah secara gratis
Dokku adalah produk yang luar biasa dan pendirinya sangat rendah hati serta suka membantu
Penasaran apa yang digunakan untuk penyimpanan file/objek pada jenis infrastruktur seperti ini
Pengalaman menggunakan Dokku tidak bagus
Bisa menggunakan integrasi traefik + podman standar + systemd