Planeは、課題、サイクル、モジュール、ページを扱うオープンソースのプロジェクト管理ツールで、JiraやLinearと同じ領域にあります。同時に、小さなVPSに載せるアプリとしてはかなり重い部類です。Community Editionは13個のコンテナからなるスタックを持ち込むため、このガイドの要点はdocker compose upと打つことではなく、サーバーを正しくサイジングすることにあります。
Planeをセルフホストする理由
クラウド版はユーザー数に応じて課金されます。セルフホストすればその費用がなくなり、課題の履歴、添付ファイル、プロジェクトデータを自分の管理下のインフラに置けます。課題管理ツールが顧客名、セキュリティ上の指摘、未公開のロードマップを抱えているなら、これは重要な点です。Community EditionはAGPL-3.0ライセンスなので、商用のチームでもライセンス料なしで運用できます。
引き換えは現実的です。アップグレード、バックアップ、Postgresの面倒を自分で見ることになります。チームの誰もその役目を引き受けたくないのであれば、正直な答えはクラウド版です。
前提条件
Planeのドキュメントは要件を明快に書いています。
- CPU 2コア、x64/AMD64またはAArch64/ARM64
- RAM 最小4GB、本番環境の推奨は8GB
- Ubuntu、Debian、CentOSまたはAmazon Linux 2/2023
- Docker Engine 20.10以降とDocker Compose v2
- 80番と443番ポートが到達可能で、サーバーを指すドメインがあること
この4GBという下限は水増しではありません。スタックはweb、admin、space、api、worker、beat-worker、migrator、live、プロキシに加えてpostgres:15.7-alpine、valkey/valkey:7.2.11-alpine、rabbitmq:3.13.6-management-alpine、minio/minioを動かします。13個のコンテナは、ユーザーが1人もログインしないアイドル状態でも4GBの大半を消費します。
サーバーをこれから選ぶなら、Contabo、Hetzner Cloud、DigitalOceanのいずれにも基準を満たすプランがあります。下のサイジング表と、より広い選択肢についてはVPS比較の全体版をご覧ください。
手順1:4GBを超えるプランを選ぶ
Planeの導入がつまずくのはたいていここです。ほぼすべてのプロバイダーで最安のプランはRAM 1GBであり、これはPlaneが定める最小要件の4分の1です。
| プラン | vCPU / RAM / ディスク | 価格 | Planeでの評価 |
|---|---|---|---|
| Contabo Cloud VPS 4 | 4 / 8GB / 100GB SSD | 5.50 EUR/月(税別) | 推奨の8GBを満たす |
| Hetzner CX33 | 4 / 8GB / 80GB NVMe | 8.49 EUR/月(税別) | 推奨の8GBを満たす |
| Hetzner CX23 | 2 / 4GB / 40GB NVMe | 5.49 EUR/月(税別) | ちょうど最小要件。少人数チームなら十分 |
| DigitalOceanのエントリー | 1 / 1GB / 25GB | 6 USD/月 | 小さすぎる。Planeは動かない |
Ubuntu 24.04 LTSを入れたら、root以外のユーザーを作成してファイアウォールを有効にします。
sudo apt update && sudo apt upgrade -y
sudo adduser plane
sudo usermod -aG sudo plane
sudo ufw allow OpenSSH && sudo ufw allow 80 && sudo ufw allow 443
sudo ufw enable
手順2:Dockerをインストールする
PlaneにはCompose v2が必要です。サポートが終了したv1のスクリプトではなくdocker-compose-pluginを入れるため、Docker公式のリポジトリからインストールします。
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
いったんログアウトして入り直し、v2であることを確認します。
docker compose version
手順3:先にDNSをサーバーへ向ける
これはインストーラーを走らせる前に済ませてください。インストーラーはセットアップ中にドメインを尋ね、その値をWEB_URLとCORS_ALLOWED_ORIGINSに書き込みます。DNSがまだ解決しない状態では証明書の発行に失敗し、後から環境設定ファイルを手で直すことになります。
plane.example.comのAレコードをVPSのIPアドレスに向け、解決されるまで待ちます。
dig +short plane.example.com
手順4:公式インストーラーを実行する
Planeは、ビルド済みイメージを取得して管理用のdocker-compose.yamlを書き出す単一のインストールスクリプトを配布しています。
curl -fsSL https://prime.plane.so/install/ | sh -
スクリプトはドメインを尋ねた後、Express(既定値のまま)とAdvanced(変数を個別に設定)を提示します。初回は Express が適切です。完了するとPlaneは80番と443番ポートで公開され、これらはLISTEN_HTTP_PORTとLISTEN_HTTPS_PORTで制御されます。
リポジトリについて1点。GitHubにあるdocker-compose.ymlはイメージを取得せず、各サービスをソースからビルドします。これは開発者向けの手順で、ビルドにはアプリを動かすよりはるかに多くのRAMが必要になり、4GBのVPSでは失敗するか極端に遅くなります。インストーラーを使ってください。
https://plane.example.comを開いて最初のアカウントを作成します。このアカウントがインスタンスの管理者になります。管理画面は/god-mode/にあり、SMTP、サインアップ制限、認証方式をそこで設定します。
手順5:本当に大事な部分をバックアップする
データを保持しているのは2つです。PostgreSQLのボリュームと、すべての添付ファイルを保存するMinIOのボリュームです。VPSのスナップショットは両方をカバーしますが、選んで復元できるデータベースのダンプも持っておく価値があります。
docker exec plane-db pg_dump -U plane plane | gzip > plane-$(date +%F).sql.gz
ダンプはサーバーの外へコピーしてください。バックアップ対象のディスクの上に置いたバックアップは、バックアップではありません。
Planeのセルフホスト向けVPS比較
| プロバイダー | 4GBを満たす最小プラン | 月額 | 補足 | リンク |
|---|---|---|---|---|
| Contabo | Cloud VPS 4 - 4 vCPU、8GB、100GB SSD | 5.50 EUR(税別) | 推奨の8GBへの最安ルート | Contabo |
| Hetzner Cloud | CX23 - 2 vCPU、4GB、40GB NVMe | 5.49 EUR(税別) | 最小要件を満たす。8GBならCX33が8.49 EUR | Hetzner |
| DigitalOcean | 2 vCPU、4GB、80GB SSD | 24 USD | 割高だが、ドキュメントとスナップショットはここが最良 | DigitalOcean |
| Vultr | 2 vCPU、4GB、80GB SSD | 20 USD | 3社で最安。リージョンの選択肢が広い | Vultr |
| Linode(Akamai) | 2 vCPU、4GB、80GB SSD | 24 USD | 性能が安定し、APIが強力 | Linode |
傾向は明らかです。米国のプロバイダーは4GB帯に20〜24 USDを課しており、これは欧州の同等品のおよそ3〜4倍です。1つの地域の1つのオフィスで使う課題管理ツールに、この差額を正当化するのは困難でしょう。
選択肢の全体像はVPS比較の完全版をご覧ください。
チームがつまずきやすい点
ドキュメントではなく製品ページを見てサイジングする。 Planeは見た目こそWebアプリですが、振る舞いは小さなプラットフォームです。4GBは目標ではなく下限です。
SMTPを飛ばす。 /god-mode/でメールを設定しないと招待が届かず、ワークスペースに誰も追加できません。チームを迎える前に設定してください。
バックアップでMinIOを忘れる。 Postgresだけをダンプすると、課題とコメントは全部あるのに添付が全部ないという状態になります。
チームがすでに課題管理ツールの中で仕事をしていて、それにユーザー単位の料金を払いたくないなら、Planeは手間をかける価値があります。サーバーをきちんとサイジングし、バックアップを別の場所に置けば、あとは静かに動き続けるサービスです。
他のセルフホスト向けプロジェクトやヒントは、awesome-selfhostedのリストやr/selfhostedコミュニティをご覧ください。
Frequently asked questions
RAM 1GBや2GBのVPSでPlaneをセルフホストできますか?
できません。Plane自身のドキュメントが下限をCPU2コアとRAM 4GBと定めており、Community EditionのcomposeスタックはPostgreSQL、Valkey、RabbitMQ、MinIOを含む13個のコンテナを起動します。2GBのサーバーではインストーラーは動きますが、実運用に入るとコンテナがOOMで停止させられます。実際に動く最小値は4GB、ドキュメントが本番向けに推奨するのは8GBです。
Planeを新しいバージョンへアップグレードするには?
インストーラーがサーバーに配置した管理スクリプトを再実行してアップグレードを選ぶか、インストール先のディレクトリでdocker compose pullを実行してからdocker compose up -dを実行します。migratorコンテナが起動時にデータベースのマイグレーションを適用するため、事前にPostgreSQLのダンプを取り、VPSのスナップショットも作成してください。メジャーバージョンでは環境変数が変わることがあるので、まずリリースノートに目を通してください。
Planeの運用にドメイン名は必要ですか?
実質的には必要です。インストーラーはセットアップ中にドメインを尋ね、その値をWEB_URLとCORS_ALLOWED_ORIGINSに書き込みます。フロントエンドとAPIはこの値を使って通信します。ローカルでの試用ならIPアドレスだけでも動きますが、アドレスを変えた時点でCORSが壊れますし、ドメインがなければLet's Encryptの証明書も発行できません。