サーバインストール型 PaaS CapRover についてまとめています。


目次


公式・関連サイト


特徴

CapRover には次の特徴があります。

  •  Docker レベルでアプリを構築できます。
    Docker がサポートする様々な環境を素早くデプロイできます。
  •  One-click apps を用いて様々なアプリを簡単に構築できます。
  • 🎈 Let’s Encrypt を用いた SSL 証明書を発行し HTTPS に設定できます。
    常時 SSL 化も可能です。(あえて HTTP アクセスにする事もできます)
  •  CLI から caprover deploy でデプロイするか、
    また webhook を設定して git push するだけで簡単にデプロイできます。
    CapRover の Apps ページ内でもいくつかのデプロイ手段が存在し、
    Web ブラウザのみでデプロイを完結させる事もできます。
  • Web ブラウザ上でアプリ管理・操作を行えます。
  • nginx に慣れている場合、nginx の設定を変更する事で、
    より細かいカスタマイズも可能です。
  • 複数インスタンスの立ち上げ、複数サーバ動作(クラスター)も対応し、
    アクセス増大にも対応します。

インストール・初期設定

 Getting Started  CapRover Setup

サーバへのインストール

公式サイトで紹介されている Digital Ocean は
Droplet が用意されていて、素早く使用できますが、
日本に設置されていないため、レスポンスが遅れます。
まともに使用するなら、東京などに設置されている
クラウドサービスの仮想マシンや VPS を使用するのが無難でしょう。

CapRover そのものは ARM プロセッサでも動作しますが、
 One-click apps は AMD64・x64 限定の場合があります。

 Minimum size for Digital Ocean Droplet #28 | GitHub caprover/caprover Issues

メモリは最低でも 1GB 必要です。
メモリが 1GB に満たない場合、動作に問題が発生する事がわかっています。
大きなサイズのアプリを動作させる場合、メモリ不足になるため、
ある程度 swap ファイルを作成しておくのも良いです。

Docker をインストール後、次のコマンドでインストールします。

sudo docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover

 Firewall & Port Forwarding | CapRover Docs

CapRover は次のポートを使用します。
ファイアウォールを使用する場合、このポートの通信を許可して下さい。

  • TCP - 2377・4789・7946・80・443・996・3000
  • UDP - 2377・4789・7946

その他必要に応じてポートの開放が必要です。
例えば ssh(SFTP を含む)のポートは開ける必要があるでしょう。
ssh は通常ポート 22 を使用しますが、悪質目的の接続が発生するため、
ページ運営者は必ずポート番号を変更しています。

独自ドメインの割り当て

example.net.eu.org を設定する場合、
captain.example.net.eu.org が CapRover の Web を参照するアドレス、
また アプリ名.example.net.eu.org でデフォルトのアプリ名を割り当てます。
したがって example.net.eu.org および *.example.net.eu.org で
該当のサーバを参照できるように 🎈 ネームサーバ から
A・AAAA または CNAME で設定します。
(この割り当てたドメイン名を ルートドメイン と表現します)

なお、セキュリティ的な考慮で、example.com で割り当てるよりは。
サブドメイン、例えば sub.example.com および *.sub.example.com として
CapRover の所在が簡単にわからないようにした方が良いです。
一般公開する場合は独自ドメインを割り当てるようにします。

CLI のインストール

Node.js をインストール後、npm でインストールします。

npm install -g caprover

caprover コマンドが使えるようになります。次のコマンドw実行します。

caprover serversetup

次の項目を入力していきます。

  • root domain - CapRover で使用する  ルートドメイン
  • password - CapRover へログインする時のパスワード
  • email address - 🎈 Let’s Encrypt の発行時に使用
  • machine name - 複数の CapRover がある時に判別できる任意の名前

SSL 証明書が発行されるので、この段階でルートドメインは
サーバを参照できる除隊にしておいて下さい。
これで https://captain.ルートドメイン/ でログインできるようになります。

また、ここまでの方法を使用せず、
http://ルートドメイン:3000/ で Web からセットアップする方法もあります。
例えばローカル使用のために SSL 証明書を発行したくない場合に有効です。

複数環境で使用する場合、2 台目からは次のコマンドを使用します。

caprover login

アプリの作成

 Deployment Methods | CapRover Docs

CapRover へログインした後 Apps を参照しますが、
アプリが全くないので、まずはアプリを作成してみる事になります。

アプリ名(App Name)は 英小文字 および - が使用できます。数字は使用できません。
このアプリ名は CLI からのデプロイで使用します。

One-click apps

様々なアプリが簡単に構築できます。次のところで一覧表示できます。

 Caprover one-click apps browser

MariaDB・MySQL・PostgreSQL などのデータベース、Joomla!・WordPress 以外にも
次のようなアプリも存在しています。
複雑なインストールを必要とせず、容易に導入できます。
多くは Web ブラウザで動作します。Chrome OS でも使用できます。
また VPS などに入れてあれば、外出先でも使用できます。
(CapRover はアプリとは別に BASIC 認証が設定できます)

  • Ackee・Countly・Matomo・Plausible・umami - サイト分析・アナリティクス
  • AdGrard Home - 広告などのブロック
  • ArchiveBox - Web の履歴化
  • Cachet - ステータスページの作成
  • Chevereto・Thumbor - オンライン画像処理
  • Cloudflare DDNS - 🎈 Cloudflare の 🎈 ネームサーバ に設定されている IP アドレスを更新
  • CodiMD・Raneto - ドキュメントページの作成
  • code-server by Coder - VS Code をブラウザから使用可能
  • Commento・Coral Talk - コメント運用・管理
  • Discourse - フォーラム・掲示板
  • Duplicati・ElkarBackup - ファイルバックアップ
  • Elasticsearch・MeiliSearch・SearXNG - 検索エンジン
  • Etherpad - 共用エディタ。Google ドライブの代わり
  • filebrowser・FileRun・Nextcloud・ProjectSend - ファイル管理
  • Filestash・FileZilla - ブラウザ上でファイル転送
  • Firefox - Web ブラウザ上で Firefox
  • GitLab・gitea - GitHub などの代わり
  • Guacamole - VNC・RDP・SSH クライアント
  • Heimdall・Shiori - リンク集・スタートページ
  • invidious - YouTube などの代わり
  • iRedMail・Poste.io - メールサーバ
  • Jitsi Meet - オンライン会議システム
  • Joplin - オンラインメモ帳・TODO
  • Kutt - 短縮 URL。bit.ly などの代わり
  • Lychee・PhotoPrism・Photoview - 写真管理・共有
  • Miniflux - RSS サーバ
  • MinIO - S3 ストレージサーバ
  • Nginx Redirect・Nginx Reverse Proxy - 転送・プロキシを素早く構築可能
  • Oh My Form - フォームの作成・表示。Google フォームなどの代わり
  • ONLYOFFICE Document Server - オフィス(ワープロ・表計算・プレゼンなど)
  • PrivateBin - pastebin・GitHub Gist の代わり
  • RainLoop - Web メール・メールクライアント
  • Rocket.Chat - チャットシステム。Slack の代わり
  • Statping・Uptime Kuma - Web 等の監視。Uptime Robot の代わり
  • Syncthing - Dropbox などクラウドサービスの代わり
  • The Lounge - IRC クライアント
  • Tiddlywiki - 🎈 Tiddlywiki。Docker 動作でサーバ保存対応
  • Yagpdb - Discord Bot

独自にアプリを構築する

 Captain Definition File | CapRover Docs

アプリのプロジェクトとして captain-definition ファイルが最低限必要です。
これは CapRover でのデプロイ手順を示します。

次の設定で同じ場所にある Dockerfile を実行します。

{
  "schemaVersion": 2,
  "dockerfilePath": "./Dockerfile"
}

Dockerfile に入れる内容を captain-definition に含める事もできます。

{
  "schemaVersion": 2,
  "dockerfileLines": [
                        "FROM caddy:alpine",
                        "COPY ./Caddyfile /etc/caddy/Caddyfile"
                    ]
}

ここでは簡単な例として Web サーバで静的ファイルを表示するアプリです。

🎈 fu-sen/CapRover-Apache | GitHub
🎈 fu-sen/CapRover-Caddy | GitHub
🎈 fu-sen/CapRover-nginx | GitHub

また PHP 公式 Docker に Apache を含めたものがあるので、これを用いたアプリ例です。

🎈 CapRover-PHP-Apache | GitHub

クローンした後、その場所で caprover deploy として下さい。
これでアプリの選択→CapRover のパスワード入力→デプロイとなります。

🎈 Dockerfile for Web services | 🎈 BALLOON | FU-SEN

こちらに Dockerfile の簡単な例を紹介しています。

Docker Hub からアプリ構築する

 Docker Hub

Docker Hub をデプロイしてそのまま使用できる場合、
CapRover の Apps からアプリ名を入力して作成した後、
そのアプリの中にある Deployment から Method 6: Deploy via ImageName で
Docker Hub のイメージ名を入れてデプロイできます。
修正が必要な場合は Dockerfile や captain-definition の項目もあり、
.tar で 1 ファイルした複数ファイルの構成もドラック&ドロップできます。
Web 上でデプロイを完結する事ができます。

Git プロジェクトからアプリ構築する

アプリ内 Deployment の「Method 3: Deploy from Github/Bitbucket/Gitlab」で
必要事項を入力すると、webhook の URL が表示されます。
Two-factor authentication(2 要素認証)を用いている場合は、
Password のところで Personal access tokens を発行し、入力して下さい。
(アカウントの Setting - Developer settings - Personal access tokens (classic))
GitHub の場合、Setting - Webhook からこの URL を入れて下さい。

 Build, Test and Deploy from GitHub | CapRover

もう一つの方法として、GitHub Actions を用いてデプロイする方法が公開されています。

 caprover/deploy-from-github | GitHub

このための公式 GitHub Actions が公開されています。
こちらを使用すると Commit 部分に GitHub 側のデプロイ状況が表示されます。

共に設定した後、git push を行って、デプロイが実行される事を確認して下さい。

Persistent Apps

 Persistent Apps | CapRover Docs

caprover deploy コマンドは通常中身を抹消してデプロイをしなおしますが、
Persistent を有効にすると、デプロイで抹消されずにファイル領域が残ります。

Websocket support

例えばデスクトップを表示する Docker イメージの場合、
表示した後にも定期的な送受が発生します。
このようなイメージを使用する場合は HTTP Settings にある
Websocker support を 有効 にして下さい。

独自ドメインを割り当てる

例えばルートドメインを example.net.eu.org とした場合、
アプリを追加すると アプリ名.example.net.eu.org となります。
それ以外の独自ドメインを使用したい場合は HTTP Setting 内で設定でき、
ドメイン毎に HTTPS も有効化できます。
CapRover はドメイン追加時に IP アドレスが向いているかを確認しますので、
CapRover へ追加する前に 🎈 ネームサーバ で設定して下さい。
例えば 🎈 Cloudflare へ独自ドメインを登録している場合、
DNS で「Proxied」を有効にしていると、Cloudflare のサーバで返すため、登録できません。
DNS の設定で DNS Only にしてから CapRover で登録を行って下さい。

サブドメインを使用しない(ここでは例として example.net.eu.org)場合も
この方法で追加して参照できるようになります。

IP アドレスの考慮

CapRover をインストールしたサーバでは、
IP アドレスで参照した場合でも CapRover 固有の表示になります。
これが嬉しくない場合は、任意のアプリを作成し、
独自ドメインとして IP アドレスを追加して、
IP アドレスを参照した時の特定動作をアプリで対処する事ができます。

🎈 fu-sen/CapRover-ip | GitHub

このプロジェクトを caprover deploy し、
そのアプリの独自ドメインに IP アドレスを追加します。
https は有効化しないで下さい。
(🎈 Let’s Encrypt は IP アドレスで証明書を発行しません)
これにより、http で参照した時は文字のない画面、
https で参照した時はエラーになります。


CapRover の Web 操作

Dashboard

通常は操作しません。インストール後でここを使用するのは
ルートドメインの変更と HTTPS の設定のみです。

ルートドメインを変更した場合、CLI も反映する必要があります。
caprover logout で旧ドメインを選択し、
caprover login で新しいルートドメインを用いて設定しなおして下さい。

Apps

アプリの作成と設定を行います。通常は最も使用するようになるでしょう。
「Your Apps」にあるアプリ名をクリックすると、個々に次の操作が行なえます。

  • HTTP Settings - ドメインの設定、HTTPS の有効化、nginx 設定、内部 HTTP ポート、Websocket、BASIC 認証
  • App Configs - 環境変数、追加ポートの設定、インスタンス数、デプロイ実行前のスクリプト、サービスアップデートの上書き
  • Deployment - バージョン履歴、アプリのログ、各種デプロイ

Monitoring

NetData のモニタ機能を有効にしてサーバの稼働状況を参照する事ができます。
異常検知の通知なども設定できます。

Cluster

CapRover を複数台でクラスター運用する時の設定です。

Settings

CapRover のバージョン確認、バックアップ、nginx 設定、パスワードの変更、
ディスク内の無駄なファイルを消去ができます。


CapRover CLI

 CLI Commands | CapRover Docs

デプロイ

次のデプロイコマンドは Git の管理になっている時に有効です。

caprover deploy

Git 管理になっていない場合、.tar ファイルに 1 ファイル化して、
デプロイする事ができます。
この deploy.tar を CapRover の Deployment からドラッグ&ドロップで
デプロイする事もできます。

tar zcvf deploy.tar .
caprover deploy -t deploy.tar

いくつかの質問と操作・入力が発生しますが、オプションで省略できます。

caprover deploy -h https://captain.ルートドメイン.ext -p パスワード -a アプリ名

アプリ の Deployment 内「Method 1: Official CLI」に Enable App Token があります。
トークンを発行するとパスワードの代わりに --appToken トークン を使用できます。


Q&A

Dokku との違いはなんですか?

日本ではサーバインストール型 PAAS として Dokku の支持が多くなっていますが、
必ず Git 管理にして、git push をする前提です。

CapRover は Git 管理が必須になっていません。
代わりに .tar でプロジェクトを 1 ファイル化し、caprover deploy -t ファイル名 を使用するか、
.tar ファイルを Web 上でドラッグ&ドロップしてデプロイする事ができます。
また Dockerfile を用意したり、Docker Hub に存在するイメージは
それらを指定して構築を行う事も可能になっています。

Google Cloud Run、Fly、Railway のような使い方ができるのでしょうか?

 Google Cloud Run
 Fly (fly.io)
 Railway

はい。その認識で正しいです。それを任意のサーバ(VPS など)で実現できます。
ファイルレベルでの違いは captain-definition ファイルが必要という点です。
他の PaaS では Dockerfile が存在しているのが通常なので、
最低でも次の captain-definition ファイルを生成するだけで動作するでしょう。

{
  "schemaVersion": 2,
  "dockerfilePath": "./Dockerfile"
}

Git 管理されていない場合は caprover deploy だけではデプロイできず、
.tar で 1 ファイル化する必要があります。

ルートドメインを変更できますか?

CapRover へログインした後、Dashboard の下にある
Change Root Domain Anyways からルートドメインを変更できます。
変更するルートドメインを example.net.eu.org とした場合、
example.net.eu.org および *.example.net.eu.org
設定前にサーバを参照できるよう 🎈 ネームサーバ 側で設定しておいて下さい。

CapRover Docs のコマンドがエラーになります。

CapRover Docs でのターミナル操作は root になっている前提で記載されています。
1 行のコマンドであれば、コマンドの頭に sudo を入れて下さい。
または sudo su - で root 権限になってからコマンドを実行して下さい。

アプリへコンソールログインできますか?

CapRover を運用するサーバへ ssh などでログインした後、
次のコマンドでコンソールへ入れます。

sudo docker exec -it $(sudo docker ps --filter name=srv-captain--アプリ名 -q) /bin/sh

CapRover が動作しなくなりました! どうすれば良いですか?

 Troubleshooting | CapRover Docs

経験上、最もケースが多いのは、Nginx の設定を変更し、
その構文エラーにより、起動できなくなっている状態です。
この場合は次のコマンドで一度 Nginx の設定を初期状態に戻してみて下さい。

sudo su -
docker service scale captain-captain=0 && \
docker run -it --rm -v /captain:/captain  caprover/caprover /bin/bash -c "wget https://raw.githubusercontent.com/caprover/caprover/master/dev-scripts/clear-custom-nginx.js ; node clear-custom-nginx.js ;" && \
docker service scale captain-captain=1 && \
echo "OKAY"

動作が重くなってきました。どうすれば良いですか?

特定のアプリでアクセス増大により動作が重くなっている場合は、
そのアプリにある App Configs 内 Instance Count を増やして、
同時に処理できるインスタンスを増やしてみます。

CapRover・サーバ全体が重くなっている場合は、サーバの限界なので、
この場合は別サーバでクラスターを作成します。
CapRover の Cluster を参照して下さい。

アプリを削除しましたが、Persistent 領域が残っているようです。

 Persistent Apps  Removing Persistent Apps | CapRover Apps

誤って削除してしまっても復旧できるように
Presistent 領域は Web から削除しないようになっています。

サーバへ ssh ログインした後、sudo docker volume ls として
対象のアプリがあるかを確認します。
あれば sudo docker volume rm ボリューム名 で削除します。

これがなければ、Presistent 領域を直接サーバ内に生成しているので、
sudo rm -r パス で削除して下さい。