How to run Medusa using GitHub Codespaces

How to run Medusa using GitHub Codespaces

Set up a cloud-based dev box for your Medusa commerce app

Introduction

In this tutorial, you will learn how to set up a remote development environment for Medusa using GitHub Codespaces.

If you ever tried to test out Medusa on GitHub Codespace, you might have failed to load content from the Medusa backend. This is due to CORS blocking your server requests.

This tutorial provides a solution that bypasses the CORS issue.

What is Medusa?

Medusa is a composable commerce infrastructure for building ecommerce applications.

Medusa Intro

It was built using Express, a Node.js framework. It is open-source and provides modular commerce packages compatible with any Node.js project. These modular commerce packages allow developers to build all sorts of commerce applications without having to do it from scratch.

Medusa is fully customizable and extensible. You can build webshops, subscription services, digital products stores, ticketing systems, and any other ecommerce solutions.

Check out Medusa's features here.

What is GitHub Codespace

GitHub Codespace is a cloud-hosted development environment you can access online from your web browser.

GitHub Codespace Intro

GitHub uses a Docker container running on a Virtual Machine to host your development environment aka codespace. The codespace comes with common languages, tools, and utilities for most development use cases and runs in a Linux environment.

Check out GitHub Codespace's features here.

Use of GitHub Codespaces is not entirely free, as free usage is only limited to the first 60 hours of the month. If you want more you can check the pricing page for more info.

GitHub Codespaces come with all the necessary tools required to run a Medusa app namely:

  • Git

  • npm or yarn

  • Node

Prerequisites

NOTE:

This tutorial assumes you have some knowledge of web technologies, Linux, Git and GitHub.

To follow this tutorial, you must have the following:

  • GitHub Account

  • Web browser of your choice

  • ngrok account

Step 1 - Launch GitHub Codespace

In your browser, log in to your GitHub account, create a repository, and name it medusa-codespace

Medusa Codespace repo

Click on the <> Code drop-down button and select the Create codespace on main button

Create codespace

A new tab will open automatically with VS Code interface in your browser. This is your codespace.

Newly Created Codespace

The VS Code Explorer will automatically list all the files in your medusa-codespace repo.

Step 2 - Setup Medusa

We will set up Medusa following the Install Medusa with create-medusa-app guide in Medusa's documentation.

In your Codespace's terminal window, run the following command:

yarn create medusa-app

After running this command you will be prompted for options for your Medusa project.

For this tutorial, we will use the default options provided by Medusa as follows:

  • Project Directory Name: my-medusa-store

  • Medusa Backend Starter: medusa-starter-default

  • Storefront Starter: Next.js Starter

After providing your responses the installation script will install the Medusa backend and the Next.js storefront in the project directory named my-medusa-store.

Medusa Install

Next, run the Medusa API backend.

cd my-medusa-store/backend
yarn start

Medusa API running

Your Medusa backend will start running on port 9000 of your codespace.

GitHub Codespace will automatically create a preview URL for you to access the Medusa API running on port 9000. Open the PORTS tab in your Codespace panel. The URL will be similar to this <your-codespace-url>-9000-preview.app.github.dev

Medusa API Preview

Return to the TERMINAL tab in your Codespace panel. Open a new terminal tab and run the Next.js storefront.

cd ..
cd storefront
yarn dev

Next.js Storefront running

Your Next.js Storefront will start running on port 8000 of your codespace.

Like it was for the API, GitHub Codespace will also automatically create a preview URL for you to access the Medusa storefront.

Step 3 - Preview the Storefront

In the PORTS tab of your codespace panel, click on the preview link for the Next.js storefront. The preview URL should be similar to <your-codespace-url>-8000-preview.app.github.dev. A new tab will open and render the front page of your storefront.

Preview storefront

The front page appears but notice that a modal appears notifying you of an Unhandled Runtime Error specifically a Network Error. For some reason, your Next.js storefront is unable to access the Medusa API. If you Inspect Element and check the Network tab in your browser's dev tools you will notice the error.

Storefront CORS

The storefront is making a request to http://localhost:9000/store/collections when fetching data from the Medusa API. The Medusa API uses a strict-origin-when-cross-origin policy for CORS. The GitHub Codespace redirects the links for the ports for preview. This does not match with Medusa's CORS configuration which requires one strict origin. To address this issue we need to give the Medusa API one unique URL which doesn't go through redirects. ngrok is the perfect tool for this.

Step 4 - Setup unique URL for Medusa API

Return to your codespace and open the TERMINAL tab in your codespace panel. Open a new terminal tab and go to the root of your workspace, i.e., the medusa-codespace folder.

cd ../..

Download and install ngrok.

wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
tar xvzf ngrok-v3-stable-linux-amd64.tgz
rm *.tgz

This installs ngrok in the root of your workspace.

Add your ngrok account auth-token. Copy it at the Your Authtoken - ngrok page.

./ngrok config add-authtoken <Authtoken>

ngrok install

NOTE:

You must have a ngrok account. Sign up for one here.

Start ngrok and let it listen on port 9000, the port for Medusa's API

./ngrok http 9000

ngrok will forward http://localhost:9000 to a unique URL in the form https://<XXXXXXXXX>.ngrok-free.app where <XXXXXXX> is some unique string.

ngrok running

Step 5 - Test Storefront with new API URL

Copy your unique ngrok URL. Create a new .env file in my-medusa-store/storefront and enter the following:

# Medusa Backend URL
NEXT_PUBLIC_MEDUSA_BACKEND_URL=<your-unique-ngrok-url>

Replace <your-unique-ngrok-url> with your ngrok URL. The Next.js storefront will now use this URL to query the Medusa backend.

Configure the backend to accept requests from ngrok. Open up the .env file in my-medusa-store/backend and add the following line STORE_CORS=/ngrok-free\.app$/ at the end of the .env file.

JWT_SECRET=something
COOKIE_SECRET=something

DATABASE_TYPE=sqlite
DATABASE_URL="postgres://localhost/medusa-store"
REDIS_URL=redis://localhost:6379
STORE_CORS=/ngrok-free\.app$/

For more information and a detailed explanation check out the Storefront CORS configuration page in Medusa's documentation

With that done, your storefront should be ready to test.

Return to the tab with the preview of your storefront and refresh the page. Everything should work as expected and no error should pop up.

Storefront Working properly

The difference now is that the products load and there is no network error. With that done, you have successfully run and tested your storefront.

You can proceed to experiment more with your Medusa-powered commerce store using the GitHub Codespace.

No more CORS issues to worry about. Bear in mind that this setup is only useful in a development environment. For a production environment please follow the recommended guidelines as outlined in the Medusa documentation.

Conclusion

In conclusion, this tutorial provides a comprehensive guide on how to set up and run Medusa using GitHub Codespaces. The tutorial covers setting up a development environment for Medusa with a backend and storefront in a GitHub Codespace. Configuring the dev environment, and bypassing the CORS issue using ngrok.

GitHub Codespaces provides developers with an instant dev box for building applications from anywhere with an internet connection. Medusa, on the other hand, allows developers to build e-commerce applications using modular commerce packages without having to start from scratch.

By following the steps provided in this tutorial, developers can easily set up a remote development environment for building and testing Medusa applications with ease.