【ITニュース解説】Deploying a MedusaJS 2.0 Store on AN AWS EC2 Instance.
2025年09月27日に「Dev.to」が公開したITニュース「Deploying a MedusaJS 2.0 Store on AN AWS EC2 Instance.」について初心者にもわかりやすく解説しています。
ITニュース概要
MedusaJS 2.0でECサイトをAWS EC2へデプロイする手順を解説する。UbuntuサーバーにMedusaJSバックエンドとフロントエンドを構築し、Nginxで公開、GitHub Actionsでフロントエンドを自動デプロイする方法を学べる。自分でオンラインストアを構築したい初心者向けガイドだ。
ITニュース解説
この解説文は、オンラインストアを自分で構築したいシステムエンジニアを目指す初心者が、最新のECサイトプラットフォーム「MedusaJS 2.0」をAWSの「EC2インスタンス」という仮想サーバー上にデプロイする一連の手順を理解できるように説明する。
まず、「MedusaJS」とは、商品の管理や注文処理、ユーザー認証といったオンラインストアの裏側を支える「バックエンド」機能を提供するシステムである。これに加えて、顧客が実際に商品を見て購入する「フロントエンド」も別途用意する。今回の記事では、これらを「Ubuntu」というLinuxベースのOSが動作するサーバーに構築する。
オンラインストアを運営するにあたり、スケーラブルなサーバーにデプロイする理由は、サイトへのアクセスが増えたり、商品数が増えたりしても安定してサービスを提供できるようにするためである。MedusaJSは多くの機能を備えているが、本番環境で実際に使えるようにするには、適切なサーバー設定が必要になる。今回の解説では、サーバーの設定、そして「Nginx」というソフトウェアを使ってWebサイトを公開するまでの流れを追う。最終的には、ライブで動作するMedusaJSアプリケーション、管理者用パネル、API、認証機能、そしてストアのフロントエンドが、それぞれ適切に分離されながらも連携して機能する状態を目指す。信頼性の高い動作のためには「PM2」というプロセス管理ツールを使い、Nginxを使ってSSL(HTTPS)による安全な通信も確保する。
サーバーの準備とツールのインストール
デプロイを開始する前に、まず「AWS EC2」というクラウドサービスを使って、Ubuntuサーバーを準備する。これは、物理的なコンピューターを用意する代わりに、インターネット上で仮想的なコンピューターを借りるイメージである。このサーバーには、外部からのアクセスを制御するための「セキュリティグループ」を設定する。具体的には、サーバーにSSHで接続するためのポート22、Webサイト閲覧用のポート80(HTTP)、そして安全なWebサイト閲覧用のポート443(HTTPS)を開放する。サーバーのスペックとしては、中程度の処理能力を持つt3.mediumインスタンスタイプと、約30GBのストレージがあれば十分である。
次に、MedusaJSを動かすために必要な様々なソフトウェアをサーバーにインストールする。これらには、JavaScriptの実行環境である「Node.js」、アプリケーションを隔離された環境で実行するための「Docker」とその管理ツール「Docker Compose」、ファイルをダウンロードする「Curl」、バージョン管理システムの「Git」、Node.jsアプリケーションを常に稼働させる「PM2」、そしてWebサーバーとして機能する「Nginx」、WebサイトをHTTPS化するための証明書を自動で取得・更新する「Certbot」が含まれる。これらのツールは、シェルスクリプトという一連のコマンドを記述したファイルを使って、効率的にインストールすることができる。
MedusaJSバックエンドの構築
MedusaJSのバックエンドは、Dockerを使って構築する。まず、MedusaJSのひな形となるコードをGitを使ってサーバーにダウンロードする。その後、「docker-compose.yml」というファイルを作成し、MedusaJSバックエンド、データを保存する「PostgreSQL」データベース、高速なデータキャッシュを提供する「Redis」という3つのサービスを定義する。Dockerを使うことで、これらのサービスがそれぞれ独立した環境で動作し、互いに影響を与えずに連携できる。各サービスは特定のポート(例:PostgreSQLは5432番、Redisは6379番、Medusaは9000番)で通信し、アプリケーションの環境設定は「.env」ファイルで管理する。MedusaJSが起動する際には、「start.sh」というスクリプトが実行され、データベースの移行や初期データの投入、サーバーの起動が行われる。
Nginxによるリバースプロキシ設定
Nginxは、クライアントからのWebリクエストを受け取り、適切なバックエンドサービスに転送する「リバースプロキシ」として機能する。これは、Webサイトへのリクエストをまず受け取り、それがストアのフロントエンド、管理者パネル、APIのどれに該当するかを判断し、対応する内部サービス(MedusaJSは9000番ポート、フロントエンドは8000番ポート)へリクエストを振り分ける役割を果たす。サーバーの「/etc/nginx/sites-available/」ディレクトリに設定ファイルを作成し、ドメイン名とWebサイトの各パス(例:/admin/は管理者パネルへ、/store/はAPIへ)に対応するバックエンドサービスへの転送ルールを記述する。設定を有効化した後、DNSプロバイダでドメイン名をサーバーのIPアドレスに関連付ける必要がある。また、安全な通信のために「Certbot」を使ってNginxのSSL証明書を設定し、WebサイトをHTTPS化する。
フロントエンドのセットアップとデプロイ自動化
オンラインストアの見た目を構成するフロントエンドは、Next.jsという技術を使って構築される。まず、MedusaJSが提供するNext.jsのスターターキットをダウンロードし、必要な依存関係をインストールする。「.env」ファイルには、バックエンドのURLやStripeの公開キー、サイトのベースURLなど、フロントエンドが動作するために必要な設定情報を記述する。MedusaJSの管理者パネルから「Publishable Key」という公開キーを取得し、これをフロントエンドの設定に含めることで、バックエンドとの連携が可能になる。
さらに、フロントエンドの変更を効率的にデプロイするために、「GitHub Actions」を使った自動デプロイパイプラインを構築する。これは、開発者がGitHubリポジトリに新しいコードをプッシュするたびに、自動的にサーバー上でフロントエンドのビルドとデプロイが行われるようにする仕組みである。自動化を実現するためには、GitHubリポジトリにサーバーへのSSH接続に必要な「秘密鍵」や、各種環境変数を「シークレット」として安全に登録する。その後、「.github/workflows/deploy.yml」という設定ファイルに、コードのチェックアウト、Node.jsのセットアップ、環境変数の設定、依存関係のインストール、ビルド、ビルドされたファイルのサーバーへのコピー、そしてPM2を使ったアプリケーションの再起動といった一連のデプロイ手順を記述する。これにより、手動でのデプロイ作業が不要になり、開発効率が向上する。
まとめ
これらの手順を踏むことで、システムエンジニアの初心者は、AWS EC2インスタンス上にMedusaJS 2.0を使った本格的なオンラインストアをデプロイできるようになる。バックエンド、フロントエンド、データベース、キャッシュ、リバースプロキシ、HTTPSといった要素が連携し、安全かつ安定的に動作するECサイトの基盤が完成する。さらに、GitHub Actionsを使ったデプロイの自動化により、その後のサイト運用も効率的に行えるようになる。このセットアップは、中小規模のビジネスにとって十分に実用的なものであり、より大規模な運用を目指す場合には、AWSの他のサービス(ECS、RDS、CloudFrontなど)を組み合わせて、さらにスケーラブルで堅牢なシステムを構築する道がある。