Coolifyで自作のデプロイ環境を作る
はじめに
この記事では、Coolifyを使って自作のDeploy環境を作る方法を紹介します。
VercelやCloudflare Pagesのようなサービスは便利です。しかし、プロジェクト数や容量に制限があり、さらにデータベースのプロバイダーにも制限があります。毎回無料枠だけでやりくりするのは面倒ですよね。
そこで、Coolifyで自作Deploy環境を作って、これらの問題を解決しましょう!
Coolifyとは
Coolifyは、オープンソースの自己ホスト型PaaS(Platform as a Service)で、VercelやNetlifyの代替として機能するデプロイプラットフォームです。あらゆるプログラミング言語やフレームワークに対応し、自前のサーバーでアプリケーションやデータベースを無制限にホスティングできます。GitHubとの連携による自動デプロイや、SSL証明書の自動管理など、モダンなデプロイ環境に必要な機能を備えています。
何がうれしいか
自前のサーバーでデプロイ環境を構築することで、クラウドサービスの制限から解放されます。例えば、個人開発で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アドレスとポート番号が表示されるので、ブラウザでアクセスしてみださい。
上のような画面が表示されればOKです。
新しくアカウントを作成し、ログインしてください。
ログインすると、初期セットアップ画面が表示されます。
その中で、以下のようにLocalhostかRemote Serverか選択する画面が表示されたら、Localhostを選択してください。
サーバーの種類について
-
Localhost
: Coolifyの管理画面とビルド、デプロイが走るサーバーが同じサーバー -
Remote Server
: ビルド、デプロイを行うサーバーが別のサーバー
次に、新しくプロジェクトを作成する画面が表示されますが、ここではSkip
を選択してください。
2. DNSレコードの設定
今回は、Cloudflareで設定を行います。
以下のように、Aレコード(とAAAAレコード)を設定してください。
- タイプ: A
- 名前:
*
- 値: サーバーのグローバルIPアドレス(IPv4)
example.com
のようなAレコードがない場合は、以下も追加します。
- タイプ: A
- 名前:
@
- 値: サーバーのグローバルIPアドレス(IPv4)
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の使い方は、公式ドキュメントを参考にしてください。
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
から変更してください。
パスワードを変更したら、Save
を押してください。
6. GitHub連携を設定する
GitHub連携を設定するために、Sources
からAdd
を押して、GitHub App
を作成します。
Continueを押したら、指示に従ってGitHubのアカウントでログインしてください。
Webhookのエンドポイントは、https://coolify.example.com/
のようなグローバルIPではないものを選択してください。
System Wide
を選択すると、Coolifyの誰でもこのGitHub Appを使用できるようになります。
最初のアプリをデプロイする
お疲れさまでした!
最後に、最初のアプリをデプロイしてみましょう。
今回は、簡単なNext.js
のアプリをデプロイしてみます。
まず、以下のテンプレートを使用してGitHubリポジトリを作成してください。
作成したら、Coolifyのダッシュボードに戻ります。
1. リポジトリの追加
まず、Projects
からAdd
を押して、必要な情報を入力してください。
次に、Environments
でProduction
を選択します。
選択したら、+ Add New Resource
を押して、Private Repository(With GitHub App)
を選択してください。
先ほど作成したGithub Appを選択して、Githubで作成したリポジトリを選び、Load Repository
を押してください。
ページが以下のようになったら、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
を選択してください。
作成したら、Postgres URL(internal)
から接続するためのURLをコピーしてください。
コピーしたら、右上のStart
を押してください。
3. 環境変数の設定
続いて、Resources
> Applications
> <クローンしたリポジトリ>
のページに戻って、Environment Variables
のDeveloper 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
を押してください。
4. デプロイ
あとは、Deploy
を押して、デプロイを開始してください。
Deploymentsからデプロイの進捗を確認できます。
デプロイが完了したら、Linksからデプロイしたアプリケーションにアクセスしてみましょう。
デプロイしたアプリケーションにアクセスできるようになりました!
まとめ
お疲れさまでした!
この記事では、Coolifyを使って自作のデプロイ環境を構築する方法を紹介しました。
とても素晴らしいツールですが、日本だとあまり知られていなさそうですので、この記事を書いてみました。
ドメインだったり、VPSなど、厳しい要件ですが、それに見合う価値はあると思います。
この記事を機に、自分だけのデプロイ環境を作って、より自由な開発を楽しんでみてください!
最後まで読んでいただき、ありがとうございました!
参考
宣伝
私は、ReactやTypeScript、Next.jsなどのフロントエンド技術を使って、開発したり、ハッカソンに出たりしてます。
大学1年生ということもあり、お友達が少ないので、ぜひフォローしていただけると嬉しいです!
Discussion