Dokkuとは何か?
- Dokkuは単一サーバー上で動作するオープンソースの Platform as a Service (PaaS)
- Herokuに似ているが、ユーザー自身が所有する
- コスト効率が高く、使いやすいサーバーレスプラットフォームが必要
- OVHcloudの月額7ドルのVPSを使ってDokkuサーバーを運用している
Dokkuの主な機能
- 使いやすい(Herokuに近い)
- Let’s Encryptによる自動SSL証明書管理
- サイトをパスワードで保護できるBasic Authをサポート
- 単一コマンドでスケールアップ/スケールダウン可能
- Node、Pythonなどさまざまなアプリケーションを扱える柔軟性
gitコマンドで簡単にデプロイ可能
最小構成のDokku例
Dockerコンテナでアプリケーションをデプロイ
- Dockerfileをgitリポジトリのルートに配置
entrypoint.shスクリプトを使ってローカルまたはDockerコンテナでアプリケーションを実行
- Dokkuホスト上でアプリケーションを作成
- ローカルでDokkuホストをリモートとして追加してプッシュ
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
静的サイトのデプロイ
- Dokkuを使って非公開GitHubリポジトリから静的サイトを簡単にデプロイし、パスワード保護も可能
NGINX_ROOT環境変数を設定して、NGINXが静的サイトを配信するように設定
- 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
- Let’s Encryptプラグインを使ってHTTPSを設定可能
- Cloudflareを使っている場合は、Cloudflare側に処理させるよう設定するほうが簡単
GitHub Actionsを使ったデプロイ
- GitHub Actionsを使ってDokkuアプリを自動でデプロイ可能
- 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
その他のヒント
- リモートでコマンドを実行可能
- Dockerキャッシュの無効化
- プッシュなしで再ビルド
ssh dokku@rechat.co apps:list
ssh dokku@rechat.co repo:purge-cache llm-eval
ssh dokku@rehcat.co ps:rebuild llm-eval
なぜこの記事を書いたのか?
- 新しいアプリケーションをデプロイするたびに詳細を調べる必要があったため書いた
- 他の人にとっても役立つことを願っている
GN⁺のまとめ
- Dokkuはコスト効率が高く使いやすいオープンソースのPaaSプラットフォーム
- さまざまなアプリケーションを簡単にデプロイして管理できる機能を提供
- GitHub Actionsのようなツールを使って自動デプロイ可能
- Cloudflareのようなサービスと組み合わせるとさらに便利
- 似た機能を提供する他のプロジェクトにはHeroku、Fly.ioなどがある
1件のコメント
Hacker Newsの意見
最近Dokployを使っていて、とても気に入っている
複数の「self-hosted Heroku」ソリューションを検討した結果、Dokkuを選んだ
新しいソフトウェアを使うときは問題に遭遇することがあるが、Dokkuにはそうした問題がない
DokkuはLet's Encryptプラグインを通じてHTTPSの設定が簡単
Dokkuを使っていたが、DockerイメージのビルドとSwarmデプロイへ移行した
Coolifyの人気が高まっており、あらゆる規模の組織が無料でセルフホストソフトウェアを簡単に運用できるようにしている
Dokkuは素晴らしい製品で、創業者はとても謙虚で親切
この種のインフラでは、ファイル/オブジェクトストレージに何を使っているのか気になる
Dokkuの使用体験は良くなかった
traefik + 標準のpodman + systemd統合を使うこともできる