Menu

Coolifyを使用したNext.jsプロジェクトのデプロイ

この記事では、Coolifyを使用してNext.jsプロジェクトをデプロイする詳細ガイドを提供し、プロジェクトを迅速に立ち上げるお手伝いをします。

CoolifyはDokployよりもVPSの性能要件が高いため、VPSのスペックが低い場合は、Dokployを選択し、Dokployデプロイドキュメントを参照してください。

前提条件

デプロイを開始する前に、next.config.mjsに以下の設定を追加することをお勧めします:

next.config.mjs
const nextConfig = {
  output: "standalone", // この行を追加
  
  // その他のコード...
}

CoolifyはDocker上で動作するため、standaloneモードを使用することで、ビルドイメージのサイズを大幅に削減できます。

Coolifyとは

Coolifyは、オープンソースのセルフホスト型PaaS(Platform as a Service)プラットフォームで、Vercel、Netlify、Railway、Zeaburなどのサービスに代わるオープンソースの選択肢として機能します。

coolify

サーバーの準備とCoolifyのインストール

サーバーの購入

Coolifyを使用するには、独自のサーバーを購入する必要があります。どのサービスプロバイダーを選択すればよいかわからない場合は、hostingerを検討してください。初期プロジェクトには、4コア16GBのVPSで十分で、月額わずか$7.99です。

hostinger

サーバーの設定

支払い完了後、画面の指示に従ってVPSを設定します。設定が完了すると、ダッシュボードにVPSが起動したことが表示されます。

次に、ファイアウォールルールを設定する必要があります。Hostingerにはデフォルトのファイアウォールルールがないため、すべてのポートが開いており、セキュリティリスクがあります。ポート22、80、443、8000へのアクセスを許可するファイアウォールルールを作成する必要があります。

ポート8000は、Coolify登録ページへのアクセスに使用されます。後でCoolifyのカスタムドメイン設定を完了したら、ポート8000を閉じる必要があります。

hostinger-settings
hostinger-settings

Coolifyのインストール

公式ドキュメントに従ってコマンドラインからインストールするか、Hostingerダッシュボードから直接インストールできます。

hostinger-terminal

インストールが完了したら、http://your_server_ip:8000を開いてCoolifyダッシュボードにアクセスします。

hostinger-terminal
server-type

Coolifyの設定

登録してログイン後、まずダッシュボード用のカスタムドメインを設定します:

custom-domain

次に、DNSプラットフォーム(CloudFlareを例として使用)でこのカスタムドメインのDNSレコードを追加し、Aレコードタイプを選択し、サーバーのIPアドレスを入力します。

coolify-dns

DNSが伝播したら、カスタムドメインを使用してCoolifyダッシュボードにアクセスできます。

ファイアウォールからポート8000を削除することを忘れないでください。今後は、ドメインを使用してのみアクセスしてください。

最後に、以下のようにGitアカウントを接続します:

coolify-git
coolify-git
coolify-git
coolify-git

デプロイ手順

Coolifyは、Vercelのようなビジュアルデプロイインターフェースを提供しており、GitHubリポジトリを簡単に選択して自動デプロイできます。

add-project
add-project
add-project
add-project
add-project

カスタムドメインとリダイレクトルールを設定します:

add-project

作成後、CloudflareでDNSを設定する必要があります:

add-dns

2つのレコードを追加します:

Aレコード:
your-domain.com -> サーバーのIP
Proxyを有効化
 
Aレコード:
www.your-domain.com -> サーバーのIP
Proxyを有効化

次に、SSL/TLS設定を開き、FullまたはFlexibleを選択します:

setting-ssl

環境変数を設定します:

set-up-env
set-up-env

次に、右上のDeployボタンをクリックして自動デプロイを開始します。

ビルドの進行状況を確認します:

deployments

今後、コードをコミットするたびに自動的にデプロイがトリガーされます。

高度な使用方法

ログ記録

Next.jsプロジェクトでPinoをログ記録に使用している場合、Coolifyの機能を使用してログディレクトリをホストマシンにマウントできます。

  1. 左メニューの「Persistent Storage」をクリック
  2. 「+ Add」をクリックして新しいストレージマウントを追加し、以下を入力します:
    • Source Path(ホストマシンパス)/var/log/nexty-dev
    • Destination Path(コンテナパス)/app/logs
log
log
  1. 設定を保存してRedeployをクリック
log

設定が有効になると、コンテナ内の/app/logsに書き込まれたログファイルは、実際にはホストマシンの/var/log/nexty-devに保存されます。

VPS上でログを確認する:

# ログファイルリストを表示
ls -la /var/log/nexty-dev/
 
# リアルタイムでログを表示
tail -f /var/log/nexty-dev/xxxxxxxx-*.log
 
# 特定の内容を検索
grep "error" /var/log/nexty-dev/xxxxxxxx-*.log

ローカルでログを確認するには、scpコマンドを使用してフォルダ全体または特定のファイルをエクスポートできます:

# ローカルマシンで実行
scp -r root@ip:/var/log/nexty-dev/ ./nexty-logs/

Redisのデプロイ

Redisの作成手順は通常のプロジェクトの作成と似ていますが、ResourceとしてRedisを選択する必要があります。

redis
redis

作成後、設定情報を確認できます:

redis

本番環境では、同じサーバーにデプロイされている場合、内部リンクを直接使用できます。

その他の主要な設定オプション:

  • Ports Mappings:host_port:container_portをマッピングします。例えば、一時的なローカルデバッグが必要な場合、6380:6379に設定することで、ローカルからIPとポート6380経由でRedisにアクセスできます。
  • SSL設定:
    • Redisに接続するトラフィックはTLS/SSL経由で暗号化されます。
    • データとパスワードが送信中に傍受されるのを防ぐため、有効にすることをお勧めします。
    • 有効にすると、クライアント接続文字列は通常redis://からrediss://に変更する必要があります。
    • Coolifyが生成したCAファイルをローカルマシンにダウンロードするには:echo | openssl s_client -connect 72.62.133.215:23771 2>/dev/null | openssl x509 > redis_server.crt
  • Proxy - Make it publicly available:
    • 未チェック:同じCoolifyインスタンス内のアプリケーションのみがこのRedisにアクセスできます
    • チェック:Public Portが設定されている場合のみ有効にできます。チェックすると、Public URLが表示されます。
  • Public Port:サーバーIP経由でRedisにアクセスするために使用されるポート番号を定義します。必要な場合は、6379よりもセキュリティが高い5桁の一般的でないポートを設定することをお勧めします。

一時的なローカルデバッグには、Ports Mappingsを使用し、使用後すぐにポートを閉じてください。インターネットアクセスを維持する必要がある場合は、SSL、Proxy、Public Portを設定することをお勧めします。

Ports MappingsまたはProxy経由で接続する場合、VPSファイアウォールで対応するポートを開く必要があります。

RedisのAOFを有効化

Redisのデータ永続化が必要な場合、Custom Redis Configurationに以下の2行を追加してAOFを有効にできます:

appendonly yes
appendfsync everysec

次に、上部にスクロールしてSaveをクリックし、その後Restartをクリックします。

AOFが正しく有効になっているかを確認するには、上部のTerminalを開いてコマンドを実行します:

redis-cli
AUTH YOUR_PASSWORD
CONFIG GET appendonly
redis