Dokploy入門 — Docker Compose対応のセルフホストPaaSをVPSで動かす実務ガイド
Dokploy は Docker と Docker Compose の上に構築された OSS のセルフホスト PaaS で、自前の VPS に Heroku や Vercel に近いデプロイ体験を持ち込めるツールです。本記事ではインストールから Docker Compose アプリのデプロイ、DB・バックアップ管理、Coolify や Vercel との比較検証、チーム運用の実務 Tips まで解説します。
Dokploy とは — VPSにHeroku風のデプロイ体験を持ち込むセルフホストPaaS
Dokploy は TypeScript 製の OSS プロジェクトで、GitHub 上で 36,000 スター超を獲得しています。Traefik をリバースプロキシとして内蔵し、Git push をトリガーにアプリケーションを自動デプロイできる点が最大の特徴です。
- アプリデプロイ: Node.js・Python・Go・PHP・Ruby など主要ランタイムに対応し、Dockerfile または buildpacks 相当の仕組みでビルド
- Docker Compose / Swarm 対応: 既存の
compose.yamlをそのまま持ち込んでデプロイでき、複数ノードへのスケールも可能 - DB 管理: PostgreSQL・MySQL・MongoDB・MariaDB・Redis・libSQL をワンクリックで作成、バックアップも標準搭載
- SSL 自動発行: Traefik 経由で Let’s Encrypt 証明書を自動取得・更新
- 350 以上のテンプレート: 主要 OSS プロジェクトをワンクリックでデプロイできるテンプレートライブラリ
Vercel や Netlify のような月額課金の PaaS を使わず、自社 VPS のコストだけでチームの検証環境や小〜中規模の本番環境を運用したいケースに向いています。
インストールとセットアップ
動作要件
公式ドキュメントおよびコミュニティのガイドをまとめると、最低要件は次の通りです。
| 項目 | 最小構成 | 推奨構成(本番) |
|---|---|---|
| RAM | 2GB | 4〜8GB以上 |
| CPU | 1 vCPU | 2 コア以上 |
| ストレージ | 30GB SSD | 50GB以上 |
| ポート | 80 / 443 を開放(Traefik・Let’s Encrypt 用) | 同左 |
Dokploy 自体のアイドル時メモリ消費はおよそ 300〜600MB とされており、2GB の VPS でも小規模なアプリ + DB 程度なら動作します。ただし本番運用では余裕を見て 4GB 以上を選ぶのが無難です。
インストールコマンドと初期設定
Docker がインストール済みの Ubuntu VPS であれば、ワンライナーでセットアップが完了します。
curl -sSL https://dokploy.com/install.sh | bash
インストールスクリプトが Docker Swarm の初期化・Traefik の起動・管理用コンテナの起動までを自動で行い、完了後に http://<サーバーIP>:3000 へのアクセス URL が表示されます。初回アクセス時に管理者アカウントを作成すれば準備完了です。
# Swarm ノードの状態確認
docker node ls
# Dokploy / Traefik のサービス状態確認
docker service ls
Docker Compose アプリケーションのデプロイとDB管理
Git リポジトリ連携
ダッシュボードから「Create Project」→「Application」を選び、GitHub / GitLab / Bitbucket のリポジトリを連携します。ビルドタイプはデフォルトの Nixpacks(自動検出)に加え、Dockerfile・Heroku Buildpacks・Paketo Buildpacks・静的サイト用の Static から選択でき、Webhook を登録すれば git push のたびに自動デプロイされます。
docker-compose.yml のデプロイ
複数サービスで構成されたアプリは「Compose」タイプのプロジェクトとして、リポジトリ内の docker-compose.yml をそのまま指定します。
# docker-compose.yml(Dokploy でそのまま読み込める構成例)
services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
- DATABASE_URL=${DATABASE_URL}
worker:
build:
context: .
dockerfile: Dockerfile.worker
command: ["node", "worker.js"]
depends_on:
- app
ドメインは UI 上の「Domains」タブから app サービスを選んで追加するだけで済みます。Dokploy がデプロイ時に Traefik 用ラベルを compose ファイルへ自動的に書き込んでくれるため、docker-compose.yml 側で Traefik のラベルを手書きする必要はありません。
@dokploy/cli(npm)を使えば、ダッシュボードを開かずにデプロイをキックすることもできます。
npm install -g @dokploy/cli
dokploy application deploy --applicationId <application-id>
データベース管理とバックアップ
DB は「Database」タブから種類(PostgreSQL / MySQL / MongoDB / MariaDB / Redis / libSQL)を選ぶだけでコンテナが作成され、接続文字列がダッシュボード上に発行されます。アプリからは環境変数で参照するだけで済みます。
バックアップは S3 互換ストレージ(AWS S3・Cloudflare R2・MinIO など)を接続先として登録し、cron 形式でスケジュールを組めます。
# バックアップスケジュール例(毎日3時にフルバックアップ)
0 3 * * *
リストア時はダッシュボードからバックアップ世代を選んで「Restore」を実行するだけで、手動での pg_restore 実行は不要です。バックアップ先を Dokploy が動く VPS と別リージョンのストレージにしておくと、VPS 障害時にもデータを守れます。
Coolify・Vercelとの比較検証
Dokploy vs Coolify
同じ「セルフホスト PaaS」カテゴリの代表格が Coolify です。実務での使い分けの勘所は次の通りです。
| 観点 | Dokploy | Coolify |
|---|---|---|
| スケーリング | Docker Swarm をネイティブ統合、複数ノードに標準対応 | 単一サーバー運用が主。マルチサーバーは発展途上 |
| アイドル時メモリ | 約300〜600MB | 約300〜500MB |
| UI/学習コスト | シンプルで機能が絞られており初学者向け | 機能が豊富な分、初見では情報量が多い |
| ビルド方式 | Nixpacks(デフォルト)/ Dockerfile / Heroku・Paketo Buildpacks / Static | Nixpacks による自動検出が中心 |
チームで複数ノードにスケールさせる前提なら Dokploy、Nix ベースの自動検出やプレビュー環境などの機能を優先するなら Coolify、という選び方が実務的です。筆者のチームでは検証環境用に 2〜3 ノード構成を組みたかったため、Swarm 統合が標準の Dokploy を選びました。
Dokploy vs Vercel / Heroku
Vercel・Heroku はマネージド PaaS であり、インフラ管理不要な代わりに従量課金がかかります。Dokploy は VPS のコストのみで運用でき、DB やバックグラウンドワーカーを含む構成でも追加課金なしに複数サービスを動かせるのが利点です。一方で、Traefik や Docker Swarm の障害対応・アップデート・セキュリティパッチ適用は自分たちの責任範囲になる点は導入前に理解しておく必要があります。個人開発や検証環境ではコストメリットが大きく、本番のミッションクリティカルな用途では運用体制とセットで検討するのが現実的です。
実務での活用パターンと運用ノウハウ
マルチサーバー構成でのDocker Swarm活用
「Servers」からリモートサーバーを追加し SSH 鍵を登録すると、Docker Swarm のワーカーノードとして参加させられます。アプリのデプロイ設定でレプリカ数を指定すれば、複数ノードに自動で分散配置されます。
services:
app:
deploy:
replicas: 3
resources:
limits:
memory: 512M
監視・通知設定
CPU・メモリ・ディスクの使用率はダッシュボードでリアルタイム確認でき、閾値超過やデプロイ失敗を Slack・Discord・Telegram・メールへ通知する設定も可能です。障害の第一報を Slack に飛ばすようにしておくと、当番制の運用でも検知が早くなります。
CI/CDパイプラインとの組み合わせ
GitHub Actions からデプロイ完了を待ってから E2E テストを流したい場合は、CLI コマンドの終了コードを利用してパイプラインを制御します。
# .github/workflows/deploy.yml
- name: Deploy via Dokploy CLI
run: |
npm install -g @dokploy/cli
dokploy application deploy --applicationId ${{ secrets.DOKPLOY_APPLICATION_ID }}
env:
DOKPLOY_URL: ${{ secrets.DOKPLOY_URL }}
DOKPLOY_API_KEY: ${{ secrets.DOKPLOY_API_KEY }}
まとめ
| 項目 | ポイント |
|---|---|
| 概要 | TypeScript製OSSのセルフホストPaaS。Traefik内蔵でHeroku風のデプロイ体験をVPS上で実現 |
| 要件 | 最小2GB RAM/1vCPU、本番は4〜8GB以上を推奨。80/443ポート開放が必須 |
| デプロイ方式 | Git連携の自動デプロイ、またはdocker-compose.ymlをそのまま指定するCompose型 |
| DB管理 | 主要DBをワンクリック作成、S3互換ストレージへのバックアップをcronで自動化 |
| Coolifyとの違い | Docker Swarmのマルチノード対応が標準。UIはシンプルで学習コストが低い |
| Vercel/Herokuとの違い | 従量課金なしで運用できる一方、インフラの障害対応は自己責任 |
| チーム運用 | 監視通知の連携とマルチサーバー構成でレプリカ数を指定し可用性を確保 |