Coolify入門:VPSで自前PaaSを構築する完全ガイド

セルフホスト型PaaSのCoolifyをVPSにインストールする手順を解説。サーバー要件の確認からSSL設定まで、実際の導入経験をもとに具体的なコマンドと注意点をまとめました。
代表 / エンジニア
「Herokuの代替を探しているけれど、自前でPaaSを構築するのはハードルが高い」——そう感じているエンジニアの方は少なくないのではないでしょうか。私自身、以前はデプロイのたびにサーバーへSSH接続して手作業で設定する運用に疲弊していました。そんなときに出会ったのがCoolifyです。
この記事では、VPSの契約からCoolifyのインストール、実際のアプリケーションデプロイまでを一気通貫で解説します。読み終える頃には、自前のPaaS環境が手元で動いている状態を目指します。
Coolifyとは何か
Coolifyは、オープンソースのセルフホスト型PaaS(Platform as a Service)です。Heroku・Vercel・Netlifyのような使い勝手を、自分のVPS上で実現できるツールとして注目を集めています。
開発はcoollabsが主導しており、GitHubでのスター数は2025年時点で35,000を超えています。v4系からはUIが大幅に刷新され、初めて触る方でも直感的に操作できるようになりました。
主要なPaaSとの比較を整理すると、以下のようになります。
| 項目 | Coolify | Heroku | Vercel |
|---|---|---|---|
| 料金体系 | VPS費用のみ | 従量課金 | 従量課金 |
| ホスティング | セルフホスト | マネージド | マネージド |
| Docker対応 | ◎ | △(制限あり) | × |
| データベース管理 | 内蔵 | アドオン | 外部連携 |
| Git連携 | GitHub/GitLab/Bitbucket | GitHub | GitHub/GitLab |
| SSL証明書 | Let's Encrypt自動発行 | 自動 | 自動 |
| カスタムDockerfile | ◎ | △ | × |
| Docker Compose対応 | ◎ | × | × |
| ワンクリックサービス | 80種以上 | マーケットプレイス | × |
私が特に魅力を感じたのは、1台のVPSでアプリケーションとデータベースを一元管理できる点です。小〜中規模のプロジェクトであれば、これだけでインフラ管理の負担が大幅に軽減されます。
Coolifyが向いているケース
すべてのプロジェクトにCoolifyが最適というわけではありません。私の経験から、以下のようなケースで特に力を発揮すると感じています。
- 個人開発やスタートアップの初期段階: 月額数千円のVPS1台で、複数のアプリとDBをまとめて運用できます。Herokuで同じ構成を組むと月額数万円になることも珍しくありません
- 社内ツールのホスティング: Metabase、n8n、Giteaなどをワンクリックでデプロイできるため、社内向けツールの整備が格段に楽になります
- クライアントのステージング環境: プロジェクトごとに環境を分離しつつ、1台のサーバーで管理できるのは受託開発の現場で重宝します
逆に、大規模トラフィックを捌く本番環境や、マルチリージョンでの冗長構成が必要な場合は、AWSやGCPのマネージドサービスを選ぶ方が現実的です。
VPSの要件とサーバー準備
Coolifyのインストールに進む前に、サーバーの要件を確認しておきましょう。公式ドキュメントでは以下のスペックが推奨されています。
- OS: Ubuntu 22.04以上(Debian系を推奨)
- CPU: 2コア以上
- メモリ: 2GB以上(4GB推奨)
- ストレージ: 30GB以上の空き容量
- ポート: 80, 443, 8000が開放されていること
最初は1GBメモリのインスタンスで試したのですが、ビルド時にメモリ不足で失敗することがあり、結局2GB以上に変更しました。同じように最小スペックで始めようとしている方は、少し余裕を持たせることをおすすめします。特にNode.js系のアプリケーションはビルド時にメモリを多く消費するため、4GBあると安心です。
VPSプロバイダーの選択
国内外の主要なVPSプロバイダーであれば、基本的にどこでもCoolifyは動作します。参考までに、私が実際に試したプロバイダーと所感を挙げておきます。
- Hetzner: ヨーロッパ拠点ですが、コストパフォーマンスが非常に高いです。2コア・4GBメモリのプランが月額約5ユーロ前後で利用できます
- ConoHa VPS: 国内リージョンがあり、日本語サポートも充実しています。日本向けのサービスを運用するなら有力な選択肢です
- DigitalOcean: Coolifyの公式ドキュメントでも例示されており、相性は良好です
サーバーの初期設定
VPSを契約したら、まずSSH接続してシステムを最新の状態にしておきます。
sudo apt update && sudo apt upgrade -yCoolifyはrootユーザーでのインストールを前提としているため、root権限でSSH接続できることを確認してください。一般ユーザーで接続している場合は、以下のようにrootログインを有効にしておきます。
# rootパスワードの設定
sudo passwd root
# rootでのSSHログインを許可(一時的に)
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
sudo systemctl restart sshdなお、Coolifyのインストール完了後はrootログインを無効に戻すことを推奨します。
ファイアウォールの設定も忘れずに行います。
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 8000
sudo ufw enable設定後、ルールが正しく適用されたか確認しておきましょう。
sudo ufw status verbose以下のように表示されれば問題ありません。
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
8000 ALLOW Anywhereポート8000はCoolifyの管理画面に使用されます。セキュリティを考慮すると、運用開始後はIP制限をかけるか、VPN経由でのアクセスに限定するのが望ましいかもしれません。
# 特定IPからのみ8000番ポートへのアクセスを許可する例
sudo ufw delete allow 8000
sudo ufw allow from 203.0.113.10 to any port 8000インストール手順
サーバーの準備が整ったら、Coolifyのインストールに進みます。公式が提供するワンライナースクリプトを使うのが最もシンプルな方法です。
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash実行すると、DockerとDocker Composeのインストール、必要なコンテナのプルとセットアップが自動的に進みます。環境にもよりますが、完了まで2〜5分程度かかります。ターミナルには進捗がリアルタイムで表示されるので、エラーが出ていないか眺めておくと安心です。
インストールが完了すると、以下のようなメッセージが表示されます。
Congratulations! Coolify has been installed successfully.
Please visit http://<サーバーのIPアドレス>:8000 to get started.ブラウザで http://<サーバーのIPアドレス>:8000 にアクセスし、初期設定を行います。
初期セットアップの流れ
初期設定の流れは以下のとおりです。
- 管理者アカウントの作成: メールアドレスとパスワードを登録します。ここで登録したアカウントがCoolify全体の管理者になります
- サーバーの登録: localhost(インストール先のサーバー自身)が自動検出されます。「Validate Server」ボタンを押して、DockerやSSHの接続が正常か検証されます
- SSHキーの確認: Coolifyが生成した鍵が正しく設定されているか検証されます
- ドメイン設定: 管理画面で使用するドメインを指定します(後から変更可能です)
私の場合、ステップ3のSSHキー検証でエラーが出て少し手間取りました。原因はrootユーザーの authorized_keys にCoolifyの公開鍵が正しく追加されていなかったことでした。~/.ssh/authorized_keys の中身を確認し、手動で追記することで解決しています。
# Coolifyが生成した公開鍵の確認
cat /data/coolify/ssh/keys/id.root@host.docker.internal.pub
# authorized_keysに追記されているか確認
cat ~/.ssh/authorized_keysもし鍵が追記されていなければ、以下のコマンドで手動追加します。
cat /data/coolify/ssh/keys/id.root@host.docker.internal.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysCoolifyの動作確認
インストール直後に、裏側で何が動いているか確認しておくと理解が深まります。
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"以下のようなコンテナが稼働しているはずです。
NAMES STATUS PORTS
coolify Up 3 minutes 0.0.0.0:8000->80/tcp
coolify-db Up 3 minutes 5432/tcp
coolify-redis Up 3 minutes 6379/tcp
coolify-realtime Up 3 minutes
coolify-proxy Up 3 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcpcoolify-proxy がTraefikベースのリバースプロキシで、すべてのHTTP/HTTPSトラフィックのルーティングを担当しています。この仕組みのおかげで、複数のアプリケーションを1台のサーバーで動かしても、ドメインベースで自動的に振り分けてくれます。
ドメイン設定とSSL証明書の自動取得
Coolifyの真価を発揮するには、独自ドメインの設定が欠かせません。DNSのAレコードをVPSのIPアドレスに向けた上で、管理画面の「Settings」からドメインを入力します。
coolify.example.com → <VPSのIPアドレス>
具体的な手順としては、お使いのDNSプロバイダーの管理画面で以下のようにAレコードを追加します。
| ホスト名 | タイプ | 値 |
|---|---|---|
| coolify | A | 203.0.113.50 |
DNSの反映にはプロバイダーによって数分〜数時間かかります。反映状況は以下のコマンドで確認できます。
dig coolify.example.com +shortVPSのIPアドレスが返ってくれば、DNSの設定は完了です。
ドメインを設定すると、CoolifyがLet's Encryptを通じてSSL証明書を自動的に取得・更新してくれます。この仕組みは内部でTraefikリバースプロキシが動作しており、証明書の管理を意識する必要がほとんどありません。証明書の有効期限は90日間ですが、Traefikが自動的に更新するため、手動での更新作業は不要です。
振り返ると、NginxでリバースプロキシとSSLを手動設定していた頃と比べて、運用負荷は格段に下がったと感じています。certbotの更新cronを設定して、それでも更新に失敗して深夜に気づく——そんな経験がある方には、この自動化のありがたみが伝わるのではないでしょうか。
ワイルドカードドメインの活用
複数のアプリケーションを運用する場合、ワイルドカードDNSを設定しておくと便利です。
*.app.example.com → <VPSのIPアドレス>
こうしておけば、Coolifyでアプリをデプロイする際に myapp.app.example.com や api.app.example.com のようにサブドメインを自由に割り当てられます。アプリを追加するたびにDNSレコードを編集する手間がなくなるのは、地味ですがかなり快適です。
アプリケーションのデプロイ
ここからがCoolifyの最も楽しいパートです。実際にアプリケーションをデプロイしてみましょう。ここではNext.jsアプリを例にGitHub連携でのデプロイ手順を説明します。
GitHubとの連携設定
まず、CoolifyとGitHubを接続します。
- Coolify管理画面の左メニューから「Sources」を選択
- 「+ Add」から「GitHub App」を選択
- 表示される画面で「Register a GitHub App」のリンクをクリック
- GitHubの画面でアプリケーション名を入力し、インストール先のリポジトリを選択
- 認証が完了すると、Coolifyに自動的に戻ります
この連携が完了すると、選択したリポジトリへのpush時に自動デプロイが走るようになります。
Next.jsアプリのデプロイ手順
- 管理画面のダッシュボードから「+ Add New Resource」→「Application」を選択
- 先ほど連携したGitHub Appをソースとして選択
- デプロイ対象のリポジトリとブランチを指定
- ビルドパックとして「Nixpacks」が自動選択されます(Next.jsを自動検出してくれます)
- 「Domains」欄にアプリ用のドメインを入力(例:
myapp.example.com) - 「Deploy」ボタンをクリック
Coolifyは内部でNixpacksというビルドツールを使用しており、package.json の内容からNext.jsプロジェクトであることを自動判定し、適切なビルドコマンドとランタイムを設定してくれます。
ビルドログは管理画面からリアルタイムで確認できます。初回ビルドはDockerイメージのキャッシュがないため5〜10分ほどかかることがありますが、2回目以降はキャッシュが効いて大幅に短縮されます。
環境変数の設定
アプリケーションの設定画面にある「Environment Variables」タブから、環境変数を追加できます。
例えば、以下のような変数を設定するケースが多いでしょう。
DATABASE_URL=postgresql://user:password@coolify-db:5432/myapp
NEXT_PUBLIC_API_URL=https://api.example.com
NODE_ENV=production「Build Variable」と「Runtime Variable」を区別して設定できるのも便利なポイントです。ビルド時だけ必要な変数(APIキーなど)と、実行時に必要な変数を分けて管理できます。
Dockerfileを使ったデプロイ
Nixpacksの自動検出に頼らず、自分でDockerfileを書いてデプロイすることも可能です。リポジトリのルートに Dockerfile を配置し、ビルドパックの設定で「Dockerfile」を選択するだけです。
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
COPY /app/.next/standalone ./
COPY /app/.next/static ./.next/static
COPY /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]既存のDockerfileがあるプロジェクトをそのまま持ち込めるのは、移行のハードルを大きく下げてくれます。
データベースの構築
Coolifyでは、アプリケーションだけでなくデータベースもGUIからワンクリックで構築できます。対応しているデータベースは多岐にわたります。
- PostgreSQL
- MySQL / MariaDB
- MongoDB
- Redis
- ClickHouse
PostgreSQLのセットアップ例
- ダッシュボードから「+ Add New Resource」→「Database」を選択
- 「PostgreSQL」を選択
- バージョン(例: 16)を指定
- 「Start」をクリック
これだけで、Dockerコンテナ上にPostgreSQLが立ち上がります。接続情報は作成後の画面に表示されます。
Host: <コンテナ名>
Port: 5432
Database: postgres
Username: postgres
Password: <自動生成されたパスワード>同じCoolify上で動いているアプリケーションからは、Dockerの内部ネットワーク経由でホスト名を使って接続できます。外部から直接接続したい場合は、「Publicly accessible」オプションを有効にしてポートを公開します。
バックアップの設定
データベースのバックアップは、管理画面の「Backups」タブから設定できます。
- バックアップ先のS3互換ストレージを「S3 Storages」メニューで登録(AWS S3、Cloudflare R2、MinIOなどに対応)
- データベースの設定画面で「Scheduled Backups」を追加
- cron式でスケジュールを指定(例:
0 3 * * *で毎日午前3時)
私は週次の本番バックアップと、日次のステージングバックアップを分けて設定しています。復元もGUIからワンクリックで実行できるため、いざというときの安心感があります。
Docker Composeプロジェクトのデプロイ
単一のアプリケーションだけでなく、docker-compose.yml で定義された複数サービスの構成もデプロイできます。これはCoolifyの大きな強みの一つです。
例えば、以下のようなWordPress環境をデプロイする場合を考えてみましょう。
version: '3.8'
services:
wordpress:
image: wordpress:latest
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
WORDPRESS_DB_NAME: wordpress
ports:
- "80:80"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: ${DB_PASSWORD}
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:デプロイ手順は以下のとおりです。
- 「+ Add New Resource」→「Docker Compose」を選択
- ソースとしてGitHubリポジトリを選択するか、直接
docker-compose.ymlを貼り付け - 環境変数を設定し、「Deploy」をクリック
Coolifyがcomposeファイルを解釈し、必要なコンテナをすべて立ち上げてくれます。ドメインの割り当てやSSLの設定も、通常のアプリケーションと同じようにGUIから行えます。
ワンクリックサービスの活用
Coolifyには、よく使われるOSSツールをワンクリックでデプロイできるテンプレートが80種類以上用意されています。いくつか実際に使ってみて便利だったものを紹介します。
- Plausible Analytics: Google Analyticsの代替として。プライバシーに配慮した軽量なアクセス解析ツールです
- n8n: ワークフロー自動化ツール。Zapierのセルフホスト版として重宝します
- Uptime Kuma: サーバーやサービスの死活監視ツール。シンプルなUIで通知設定も簡単です
- Gitea: 軽量なGitホスティング。社内のプライベートリポジトリ管理に最適です
デプロイ方法は、「+ Add New Resource」→「Service」から使いたいサービスを検索して選ぶだけです。必要な環境変数はテンプレートにあらかじめ定義されているため、ほとんどの場合デフォルト設定のまま起動できます。
運用に向けた推奨設定
インストール直後の状態でも動作はしますが、本番運用を見据えるなら以下の設定を早めに済ませておくと安心です。
- 自動バックアップの有効化: 管理画面からS3互換ストレージへの定期バックアップを設定できます
- Webhook通知: SlackやDiscordへのデプロイ通知を連携しておくと、チーム運用がスムーズになります
- リソース監視: Coolify v4ではサーバーのCPU・メモリ使用率をダッシュボードで確認可能です
Coolify自体のアップデート
Coolifyは活発に開発が続いており、頻繁にアップデートがリリースされます。管理画面の上部に新しいバージョンの通知が表示されるので、「Update」ボタンを押すだけで更新できます。
コマンドラインから更新する場合は、以下を実行します。
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bashインストール時と同じスクリプトですが、既存の設定やデータを保持したまま更新が行われます。ただし、メジャーバージョンのアップデート時には破壊的変更が含まれる可能性があるため、リリースノートの確認を忘れないようにしてください。
サーバーのディスク管理
長期間運用していると、Dockerイメージやビルドキャッシュがディスクを圧迫してくることがあります。定期的にクリーンアップを行いましょう。
# 未使用のDockerリソースを一括削除
docker system prune -a --volumes -f
# ディスク使用状況の確認
df -h
docker system df私は月に一度、この作業を手動で行っています。自動化したい場合は、cronジョブに登録しておくのも一つの手です。
# 毎週日曜深夜3時にクリーンアップを実行
echo "0 3 * * 0 root docker system prune -a --volumes -f" | sudo tee /etc/cron.d/docker-cleanupトラブルシューティング
Coolifyの運用中に遭遇しやすい問題と、その対処法をまとめておきます。
ビルドが失敗する
最も多い原因はメモリ不足です。ビルドログに Killed や OOMKilled と表示されている場合は、サーバーのメモリを増やすか、スワップファイルを追加してください。
# 2GBのスワップファイルを作成
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永続化
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstabスワップの追加だけでビルドが通るようになったケースは何度も経験しています。根本的にはメモリの増設が望ましいですが、応急処置としては十分です。
コンテナが起動しない
アプリケーションのログを確認するのが第一歩です。管理画面の「Logs」タブ、またはコマンドラインから確認できます。
# Coolifyが管理するコンテナの一覧
docker ps -a --filter "label=coolify.managed=true"
# 特定コンテナのログを確認
docker logs <コンテナ名> --tail 100よくある原因としては、環境変数の設定漏れ、ポートの競合、ヘルスチェックの失敗などがあります。
SSL証明書の取得に失敗する
DNSの設定が反映されていない段階でデプロイすると、Let's Encryptの認証に失敗します。まずDNSが正しく解決されているか確認してください。
dig myapp.example.com +shortIPアドレスが正しく返ってくるのに証明書が取得できない場合は、Let's Encryptのレート制限に引っかかっている可能性があります。同一ドメインに対して短時間に何度もリクエストを送ると一時的にブロックされるため、少し時間を置いてから再試行してみてください。
まとめ
Coolifyは「セルフホストのPaaSなんて運用が大変そう」という先入観を良い意味で裏切ってくれるツールです。この記事で紹介したとおり、VPSの準備からアプリケーションのデプロイまで、特別な専門知識がなくても一通りの環境を構築できます。
私自身、Coolifyを導入してからデプロイ作業に費やす時間が大幅に減り、本来集中すべきアプリケーション開発に時間を使えるようになりました。もちろんセルフホストである以上、サーバー自体の保守は自分たちの責任になります。一概に「マネージドサービスより良い」とは言えない部分もありますが、コストの透明性と構成の自由度を重視するチームにとっては、有力な選択肢ではないでしょうか。
まずは手元の余っているVPSや、最小構成のインスタンスで試してみてください。一度触ってみると、「こんなに簡単にできるのか」と驚くはずです。
Coolifyの導入やVPS環境の構築でお困りのことがあれば、こちらからお気軽にご相談ください。インフラ設計からCI/CDパイプラインの構築まで、一貫してサポートいたします。