🚀

Coolifyで自作のデプロイ環境を作る

2024/12/22に公開

はじめに

この記事では、Coolifyを使って自作のDeploy環境を作る方法を紹介します。
VercelやCloudflare Pagesのようなサービスは便利です。しかし、プロジェクト数や容量に制限があり、さらにデータベースのプロバイダーにも制限があります。毎回無料枠だけでやりくりするのは面倒ですよね。
そこで、Coolifyで自作Deploy環境を作って、これらの問題を解決しましょう!

Coolifyとは

Coolifyは、オープンソースの自己ホスト型PaaS(Platform as a Service)で、VercelやNetlifyの代替として機能するデプロイプラットフォームです。あらゆるプログラミング言語やフレームワークに対応し、自前のサーバーでアプリケーションやデータベースを無制限にホスティングできます。GitHubとの連携による自動デプロイや、SSL証明書の自動管理など、モダンなデプロイ環境に必要な機能を備えています。

https://coolify.io/

何がうれしいか

自前のサーバーでデプロイ環境を構築することで、クラウドサービスの制限から解放されます。例えば、個人開発で10個以上のプロジェクトを動かしたい場合、VercelやNetlifyの無料プランでは不十分です。Coolifyなら、サーバーのリソースが許す限り、いくつでもプロジェクトをデプロイできます。

また、データベースの選択肢も自由です。MongoDBを使いたい?PostgreSQL?Redis?全部OKです。しかも、それぞれのデータベースのバージョンも自分で選べます。クラウドサービスの無料枠に制限されることなく、必要なだけデータベースを立ち上げられます。

さらに、自分の環境なので、カスタマイズの自由度が高いのも魅力です。例えば、GPUを使用したアプリケーションをデプロイしたり、ビルド時間を短縮したり、独自のビルドスクリプトやデプロイフックを追加したりできます。

セットアップに必要なもの

技術的な知識

以下の内容が理解できていると、円滑にセットアップができると思います!

  • Linuxコマンドの基本的な操作
    • サーバーへの接続(SSH)
    • 基本的なコマンド(cd, ls, mkdir など)
  • GitHubの基本的な使い方
    • リポジトリのクローン
    • 基本的なGit操作
  • DNSの基本
    • 基本的なレコード(A,AAAAなど)

インフラリソース

トップレベルドメイン

ワイルドカード*.example.comのような形式)で使用できるドメイン

DNSプロバイダー

Cloudflareを推奨します。

サーバー

以下のいずれかが必要です:

  • VPS
  • ProxmoxのVM
  • Raspberry Pi

既存のサービスと競合する可能性があるため、新規にセットアップしたサーバーを推奨します。
この記事ではUbuntu Server 24.04 LTSを使用します。

サーバーのリソース要件

Coolifyは、実際にビルドなどが走るサーバーとCoolify全体を管理するサーバーを分けることができますが、今回はどちらも同じサーバーを使用します。
デプロイするアプリケーションの種類にもよりますが、実用的な運用には以下のスペックを推奨します:

  • 2コア以上のCPU
  • 2GB以上のメモリ
  • 30GB以上のディスク容量

セットアップ

1. Coolifyのインストール

SSHでサーバーに接続し、以下のコマンドを実行してCoolifyをインストールします。

curl -fsSL https://get.coolify.io | bash

Dockerなどがインストールされていない場合は、自動でインストールされます。
インストールが完了すると、グローバルIPアドレスとポート番号が表示されるので、ブラウザでアクセスしてみださい。

register screen

上のような画面が表示されればOKです。
新しくアカウントを作成し、ログインしてください。

ログインすると、初期セットアップ画面が表示されます。
その中で、以下のようにLocalhostかRemote Serverか選択する画面が表示されたら、Localhostを選択してください。

select server type

サーバーの種類について
  • Localhost: Coolifyの管理画面とビルド、デプロイが走るサーバーが同じサーバー
  • Remote Server: ビルド、デプロイを行うサーバーが別のサーバー

次に、新しくプロジェクトを作成する画面が表示されますが、ここではSkipを選択してください。

2. DNSレコードの設定

今回は、Cloudflareで設定を行います。
以下のように、Aレコード(とAAAAレコード)を設定してください。

  • タイプ: A
  • 名前: *
  • 値: サーバーのグローバルIPアドレス(IPv4)

example.comのようなAレコードがない場合は、以下も追加します。

  • タイプ: A
  • 名前: @
  • 値: サーバーのグローバルIPアドレス(IPv4)

setup dns record

3. ドメインの設定をCoolifyに反映する

ダッシュボードにアクセスするためのドメインを設定する

サイドバーのSettingsを開き、Instance Domainに、ダッシュボードにアクセスするためのドメインを設定します。
例えば、coolify.example.comと設定した場合、https://coolify.example.comでダッシュボードにアクセスできるようになります。

設定後は忘れずにSaveを押してください。

ビルド、デプロイを行うサーバーのドメインを設定する

サイドバーのServersからlocalhostを選択して、Generalの項目の中に、Wildcard Domainという項目があるので、先ほどワイルドカードで設定したドメイン(例:https://example.com)を設定します。
このように設定すると、https://[任意またはランダムな名前].example.comでデプロイしたアプリケーションにアクセスできるようになります。

こちらも忘れずにSaveを押してください。

4. リバースプロキシのアプリを変更する(オプション)

Coolifyでは、内部でTraefikでリバースプロキシを行っています。
このリバースプロキシのソフトをCaddyに変更することができます。

Caddyを使用したい場合は、Stop Proxyでプロキシを停止して、Switch ProxyでCaddyに変更してください。

Caddyの使い方は、公式ドキュメントを参考にしてください。

https://caddyserver.com/docs/

5. サーバーを安全にする

VPSやルーターのファイアウォールの設定を確認する

VPSやルーターにファイアウォール設定がある場合は、設定を確認して不要なポートが開いていないことを確認してください。

SSHの設定を見直す

パスワード認証はセキュリティ上のリスクがあるので、公開鍵認証のみを使用することをおすすめします。

ファイアーウォールの設定

サーバーのセキュリティを高めるために、以下のコマンドでファイアウォールを設定してください。

# HTTP
ufw allow 80/tcp
# HTTPS
ufw allow 443/tcp
# SSH 変更している場合は、そのポート番号を許可する
ufw allow 22/tcp

# ファイアウォールを有効にする
ufw enable

一度rebootして、サーバーを再起動してください。
サーバーを再起動したら、ufw statusでファイアウォールが有効になっていることを確認してください。

Coolifyのパスワードの変更

最初にhttpでダッシュボードにアクセスしていたので、パスワードを変更する必要があります。

Coolifyのパスワードを変更するために、Profileから変更してください。

change password

パスワードを変更したら、Saveを押してください。

6. GitHub連携を設定する

GitHub連携を設定するために、SourcesからAddを押して、GitHub Appを作成します。

add github app

Continueを押したら、指示に従ってGitHubのアカウントでログインしてください。
Webhookのエンドポイントは、https://coolify.example.com/のようなグローバルIPではないものを選択してください。

System Wideを選択すると、Coolifyの誰でもこのGitHub Appを使用できるようになります。

最初のアプリをデプロイする

お疲れさまでした!
最後に、最初のアプリをデプロイしてみましょう。

今回は、簡単なNext.jsのアプリをデプロイしてみます。

まず、以下のテンプレートを使用してGitHubリポジトリを作成してください。

https://github.com/caru-ini/next-authjs-template

作成したら、Coolifyのダッシュボードに戻ります。

1. リポジトリの追加

まず、ProjectsからAddを押して、必要な情報を入力してください。
次に、EnvironmentsProductionを選択します。
選択したら、+ Add New Resourceを押して、Private Repository(With GitHub App)を選択してください。

add private repository

先ほど作成したGithub Appを選択して、Githubで作成したリポジトリを選び、Load Repositoryを押してください。

load repository

ページが以下のようになったら、Continueを押してください。

continue

Configでデプロイしたいドメインを設定してください。
ここでは、https://deploy-test.[あなたのドメイン]と設定してください。

Build Packについて

Build PackにNixpacksが選択されていますが、これはNixパッケージマネージャーを使用して、アプリケーションのビルドと実行環境を自動的に構築するツールです。

Nixpacksの主な特徴は:

  • アプリケーションのソースコードを解析して、必要な依存関係を自動的に検出
  • 再現性の高いビルドプロセスを実現
  • 多くのプログラミング言語とフレームワークをサポート(Node.js, Python, Ruby, Rust など)
  • Dockerイメージの自動生成

Nixpacksを使用することで、複雑なDockerfileを書く必要がなく、アプリケーションを簡単にコンテナ化できます。

次に進みましょう。

2. データベースの追加

このリポジトリはPostgreSQLを使用しているので、ResourcesからNewを押して、PostgreSQLを選択してください。
今回のリポジトリではバージョン16を使用しているので、16を選択してください。

add database

作成したら、Postgres URL(internal)から接続するためのURLをコピーしてください。

copy postgres url

コピーしたら、右上のStartを押してください。

3. 環境変数の設定

続いて、Resources > Applications > <クローンしたリポジトリ> のページに戻って、Environment VariablesDeveloper viewを押してください。

このコードを参考に、必要な環境変数をセットしてください

GitHubのOAuth AppのIDとシークレットは、https://github.com/settings/applications/newから作成してください。

  • Application Name: 好きな名前
  • Homepage URL: https://deploy-test.[あなたのドメイン]
  • Authorization callback URL: https://deploy-test.[あなたのドメイン]/api/auth/callback/github
# openssl rand -base64 32 で生成した値
AUTH_SECRET="your_auth_secret"

# 先ほどコピーしたデータベースのURL
DATABASE_URL="your_database_url"

# GitHubのOAuth AppのIDとシークレット
AUTH_GITHUB_ID=your_github_id
AUTH_GITHUB_SECRET=your_github_secret

# Auth.jsでホストを信頼する
AUTH_TRUST_HOST=true
# Auth.jsのホスト名
AUTH_URL=https://deploy-test.[あなたのドメイン]

これを両方とも設定したら、Save All Environment Variablesを押してください。

add environment variable

4. デプロイ

あとは、Deployを押して、デプロイを開始してください。

Deploymentsからデプロイの進捗を確認できます。

デプロイが完了したら、Linksからデプロイしたアプリケーションにアクセスしてみましょう。

open

デプロイしたアプリケーションにアクセスできるようになりました!

まとめ

お疲れさまでした!

この記事では、Coolifyを使って自作のデプロイ環境を構築する方法を紹介しました。

とても素晴らしいツールですが、日本だとあまり知られていなさそうですので、この記事を書いてみました。

ドメインだったり、VPSなど、厳しい要件ですが、それに見合う価値はあると思います。

この記事を機に、自分だけのデプロイ環境を作って、より自由な開発を楽しんでみてください!

最後まで読んでいただき、ありがとうございました!

参考

https://coolify.io/docs

https://github.com/caru-ini/next-authjs-template

https://youtu.be/taJlPG82Ucw

宣伝

私は、ReactやTypeScript、Next.jsなどのフロントエンド技術を使って、開発したり、ハッカソンに出たりしてます。
大学1年生ということもあり、お友達が少ないので、ぜひフォローしていただけると嬉しいです!

https://github.com/caru-ini

https://x.com/caru_ini

https://runa.dev/caru

GitHubで編集を提案

Discussion