INFRASTRUCTURE2026-04-08📖 8分

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

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との比較を整理すると、以下のようになります。

項目CoolifyHerokuVercel
料金体系VPS費用のみ従量課金従量課金
ホスティングセルフホストマネージドマネージド
Docker対応△(制限あり)×
データベース管理内蔵アドオン外部連携
Git連携GitHub/GitLab/BitbucketGitHubGitHub/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 -y

Coolifyは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 にアクセスし、初期設定を行います。

初期セットアップの流れ

初期設定の流れは以下のとおりです。

  1. 管理者アカウントの作成: メールアドレスとパスワードを登録します。ここで登録したアカウントがCoolify全体の管理者になります
  2. サーバーの登録: localhost(インストール先のサーバー自身)が自動検出されます。「Validate Server」ボタンを押して、DockerやSSHの接続が正常か検証されます
  3. SSHキーの確認: Coolifyが生成した鍵が正しく設定されているか検証されます
  4. ドメイン設定: 管理画面で使用するドメインを指定します(後から変更可能です)

私の場合、ステップ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_keys

Coolifyの動作確認

インストール直後に、裏側で何が動いているか確認しておくと理解が深まります。

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/tcp

coolify-proxy がTraefikベースのリバースプロキシで、すべてのHTTP/HTTPSトラフィックのルーティングを担当しています。この仕組みのおかげで、複数のアプリケーションを1台のサーバーで動かしても、ドメインベースで自動的に振り分けてくれます。

ドメイン設定とSSL証明書の自動取得

Coolifyの真価を発揮するには、独自ドメインの設定が欠かせません。DNSのAレコードをVPSのIPアドレスに向けた上で、管理画面の「Settings」からドメインを入力します。

coolify.example.com → <VPSのIPアドレス>

具体的な手順としては、お使いのDNSプロバイダーの管理画面で以下のようにAレコードを追加します。

ホスト名タイプ
coolifyA203.0.113.50

DNSの反映にはプロバイダーによって数分〜数時間かかります。反映状況は以下のコマンドで確認できます。

dig coolify.example.com +short

VPSのIPアドレスが返ってくれば、DNSの設定は完了です。

ドメインを設定すると、CoolifyがLet's Encryptを通じてSSL証明書を自動的に取得・更新してくれます。この仕組みは内部でTraefikリバースプロキシが動作しており、証明書の管理を意識する必要がほとんどありません。証明書の有効期限は90日間ですが、Traefikが自動的に更新するため、手動での更新作業は不要です。

振り返ると、NginxでリバースプロキシとSSLを手動設定していた頃と比べて、運用負荷は格段に下がったと感じています。certbotの更新cronを設定して、それでも更新に失敗して深夜に気づく——そんな経験がある方には、この自動化のありがたみが伝わるのではないでしょうか。

ワイルドカードドメインの活用

複数のアプリケーションを運用する場合、ワイルドカードDNSを設定しておくと便利です。

*.app.example.com → <VPSのIPアドレス>

こうしておけば、Coolifyでアプリをデプロイする際に myapp.app.example.comapi.app.example.com のようにサブドメインを自由に割り当てられます。アプリを追加するたびにDNSレコードを編集する手間がなくなるのは、地味ですがかなり快適です。

アプリケーションのデプロイ

ここからがCoolifyの最も楽しいパートです。実際にアプリケーションをデプロイしてみましょう。ここではNext.jsアプリを例にGitHub連携でのデプロイ手順を説明します。

GitHubとの連携設定

まず、CoolifyとGitHubを接続します。

  1. Coolify管理画面の左メニューから「Sources」を選択
  2. 「+ Add」から「GitHub App」を選択
  3. 表示される画面で「Register a GitHub App」のリンクをクリック
  4. GitHubの画面でアプリケーション名を入力し、インストール先のリポジトリを選択
  5. 認証が完了すると、Coolifyに自動的に戻ります

この連携が完了すると、選択したリポジトリへのpush時に自動デプロイが走るようになります。

Next.jsアプリのデプロイ手順

  1. 管理画面のダッシュボードから「+ Add New Resource」→「Application」を選択
  2. 先ほど連携したGitHub Appをソースとして選択
  3. デプロイ対象のリポジトリとブランチを指定
  4. ビルドパックとして「Nixpacks」が自動選択されます(Next.jsを自動検出してくれます)
  5. 「Domains」欄にアプリ用のドメインを入力(例: myapp.example.com
  6. 「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 --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/public ./public EXPOSE 3000 CMD ["node", "server.js"]

既存のDockerfileがあるプロジェクトをそのまま持ち込めるのは、移行のハードルを大きく下げてくれます。

データベースの構築

Coolifyでは、アプリケーションだけでなくデータベースもGUIからワンクリックで構築できます。対応しているデータベースは多岐にわたります。

  • PostgreSQL
  • MySQL / MariaDB
  • MongoDB
  • Redis
  • ClickHouse

PostgreSQLのセットアップ例

  1. ダッシュボードから「+ Add New Resource」→「Database」を選択
  2. 「PostgreSQL」を選択
  3. バージョン(例: 16)を指定
  4. 「Start」をクリック

これだけで、Dockerコンテナ上にPostgreSQLが立ち上がります。接続情報は作成後の画面に表示されます。

Host: <コンテナ名> Port: 5432 Database: postgres Username: postgres Password: <自動生成されたパスワード>

同じCoolify上で動いているアプリケーションからは、Dockerの内部ネットワーク経由でホスト名を使って接続できます。外部から直接接続したい場合は、「Publicly accessible」オプションを有効にしてポートを公開します。

バックアップの設定

データベースのバックアップは、管理画面の「Backups」タブから設定できます。

  1. バックアップ先のS3互換ストレージを「S3 Storages」メニューで登録(AWS S3、Cloudflare R2、MinIOなどに対応)
  2. データベースの設定画面で「Scheduled Backups」を追加
  3. 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:

デプロイ手順は以下のとおりです。

  1. 「+ Add New Resource」→「Docker Compose」を選択
  2. ソースとしてGitHubリポジトリを選択するか、直接 docker-compose.yml を貼り付け
  3. 環境変数を設定し、「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の運用中に遭遇しやすい問題と、その対処法をまとめておきます。

ビルドが失敗する

最も多い原因はメモリ不足です。ビルドログに KilledOOMKilled と表示されている場合は、サーバーのメモリを増やすか、スワップファイルを追加してください。

# 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 +short

IPアドレスが正しく返ってくるのに証明書が取得できない場合は、Let's Encryptのレート制限に引っかかっている可能性があります。同一ドメインに対して短時間に何度もリクエストを送ると一時的にブロックされるため、少し時間を置いてから再試行してみてください。

まとめ

Coolifyは「セルフホストのPaaSなんて運用が大変そう」という先入観を良い意味で裏切ってくれるツールです。この記事で紹介したとおり、VPSの準備からアプリケーションのデプロイまで、特別な専門知識がなくても一通りの環境を構築できます。

私自身、Coolifyを導入してからデプロイ作業に費やす時間が大幅に減り、本来集中すべきアプリケーション開発に時間を使えるようになりました。もちろんセルフホストである以上、サーバー自体の保守は自分たちの責任になります。一概に「マネージドサービスより良い」とは言えない部分もありますが、コストの透明性と構成の自由度を重視するチームにとっては、有力な選択肢ではないでしょうか。

まずは手元の余っているVPSや、最小構成のインスタンスで試してみてください。一度触ってみると、「こんなに簡単にできるのか」と驚くはずです。

Coolifyの導入やVPS環境の構築でお困りのことがあれば、こちらからお気軽にご相談ください。インフラ設計からCI/CDパイプラインの構築まで、一貫してサポートいたします。