7 ポイント 投稿者 GN⁺ 2024-08-27 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2024-08-27
Hacker Newsの意見
  • 最近Dokployを使っていて、とても気に入っている

    • Dokkuに似ているが、より優れたWeb UIを提供している
    • Docker/Composeソリューションのデプロイが簡単になり、自動のLet's Encrypt機能が組み込まれている
    • GitHub Actionsのワークフローを構築して、アプリのデプロイを自動化している
    • さまざまなアプリ向けの事前構成済みComposeファイルも提供している
  • 複数の「self-hosted Heroku」ソリューションを検討した結果、Dokkuを選んだ

    • 必要な「魔法」が最も少なく、使うのをやめるときも簡単に取り外せる
    • 開発者の応答が非常に早く、助けを得てカスタムプラグインを作成した
    • ブログに関連内容を文書化している
  • 新しいソフトウェアを使うときは問題に遭遇することがあるが、Dokkuにはそうした問題がない

    • いくつかのCLI引数の順序の問題を除けば、うまく動作する
    • もっと使うなら、宣言的な設定ファイルでアーキテクチャ全体を構成したい
  • DokkuはLet's Encryptプラグインを通じてHTTPSの設定が簡単

    • Cloudflare経由でTLSを使っている
    • 個人サイトが平文で送信されないよう注意が必要
  • Dokkuを使っていたが、DockerイメージのビルドとSwarmデプロイへ移行した

    • 独自ホスト型PaaSのLunniを開発する動機になった
    • HerokuやAWSではなく、自分が所有するサーバー上ですべてを動かすという考え方が好きだ
    • 予測可能な月額請求は安心感を与えてくれる
  • Coolifyの人気が高まっており、あらゆる規模の組織が無料でセルフホストソフトウェアを簡単に運用できるようにしている

    • Coolifyはオープンソースでセルフホスト可能なHeroku/Netlify/Vercelの代替だ
  • Dokkuは素晴らしい製品で、創業者はとても謙虚で親切

    • もっと多くの人が金銭的に支援してくれたらと思う
  • この種のインフラでは、ファイル/オブジェクトストレージに何を使っているのか気になる

    • AWSを使うと、egressコストで節約効果がすべて相殺される可能性がある
  • Dokkuの使用体験は良くなかった

    • VPSがクラッシュして再起動したとき、アプリが再起動しなかった
    • 最終的にシングルノードのk8s構成へ移行した
  • traefik + 標準のpodman + systemd統合を使うこともできる

    • 関連ドキュメントとリンクが提供されている