Hello, Dev Community! π
Deploying a MERN (MongoDB, Express.js, React, Node.js) stack application can be challenging, especially when handling both the frontend and backend. In this guide, Iβll walk you through deploying a MERN stack application using Render, with a clear separation between the client
(React) and server
(Node.js/Express) directories.
Letβs dive into the deployment process while also highlighting the importance of managing your .gitignore
and .env
files.
π Project Structure Overview
Hereβs how our project is structured:
project-root/
β
βββ client/ # Contains React code
β βββ public/
β βββ src/
β βββ package.json
β
βββ server/ # Contains Node.js/Express.js code
β βββ controllers/
β βββ routes/
β βββ utils/
β βββ server.js
β βββ package.json
β βββ .env
β
βββ .gitignore
βββ README.md"
π¦ Step 1: Prepare Your Application for Deployment
1.1 Configure server/package.json
In your server/package.json
, add the following scripts to handle both the frontend and backend builds:
"scripts": {
"start": "node server.js",
"frontend-build": "cd ../client && npm install && npm run build",
"backend-build": "npm install",
"build": "npm run frontend-build && npm run backend-build",
"dev": "nodemon server.js"
}
-
frontend-build
: Navigates to theclient
directory, installs dependencies, and builds the React app. -
backend-build
: Installs dependencies for the server. -
build
: Runs bothfrontend-build
andbackend-build
.
1.2 The Importance of the .gitignore
File
The .gitignore
file is crucial in any project as it ensures that sensitive or unnecessary files donβt get pushed to your Git repository. This typically includes:
-
Node modules: Large dependency files that should be installed via
npm install
rather than stored in your repository. -
Build files: You don't need to store generated files like
build/
from React. - Environment files: Keep sensitive credentials and keys out of your version control.
Hereβs a basic example of what your .gitignore
file might look like:
/node_modules
/client/build
/server/node_modules
/server/.env
1.3 The Role of the .env
File
The .env
file is where you store environment variables, such as API keys, database URIs, and secret tokens. This file should never be committed to your Git repository for security reasons. Instead, it should be added to your .gitignore
file to ensure it remains local.
Example .env
file for your server:
MONGODB_URI=your_mongo_db_uri
JWT_SECRET=your_jwt_secret
PORT=8080
PASSWORD=your_app_password_for_email
EMAIL=your_gmail_email
BACKEND_URL=your_backend_url/api/v1
FRONTEND_URL=your_frontend_url
PRODUCTION=true
π Step 2: Deploying to Render
2.1 Push Your Code to GitHub
First, ensure that your code is pushed to a GitHub repository. This will allow Render to pull your code during the deployment process.
Step 1: Create a GitHub Repository
- Go to GitHub and log in to your account.
- Click on the β+β icon in the top right corner and select βNew repository.β
- Give your repository a name, and optionally add a description.
- Choose the repository to be either public or private.
- Click βCreate repository.β
Step 2: Initialize Git in Your Project
If you havenβt already initialized a Git repository in your project, do so by running the following command in your project root directory:
git init
Step 3: Add Your Files to the Repository
Add all your project files to the repository using the following command:
git add .
Step 4: Commit Your Changes
Commit the added files with a descriptive commit message:
git commit -m 'Initial commit'
Step 5: Add the GitHub Repository as a Remote
Link your local repository to the GitHub repository you just created:
git remote add origin https://github.com/your-username/your-repository-name.git
Replace your-username
and your-repository-name
with your GitHub username and the name of your repository.
Step 6: Push Your Code to GitHub
Finally, push your code to the GitHub repository using the following command:
git push --set-upstream origin master
This command will push your code to the main
branch of your GitHub repository.
Now your code is hosted on GitHub, and you can proceed with the deployment on Render!
2.2 Create a New Web Service on Render
- Log in to your Render account (or sign up if you donβt have one).
- Click on βNewβ and select βWeb Service.β
- Connect your GitHub repository containing your MERN stack project.
- Select the
server
directory when prompted for the root directory.
2.3 Configure Environment Variables on Render
Navigate to the βEnvironmentβ section in your Render dashboard and add the environment variables from your .env
file. This ensures that your application has access to the necessary secrets and API keys in the production environment.
2.4 Build and Deploy
Render will automatically detect your package.json
scripts and begin the build process. It will run the build
script, which triggers both the frontend and backend builds.
Once the build is complete, your application will be deployed and accessible via the URL provided by Render.
π Conclusion
Deploying a MERN stack application on Render is a straightforward process when you have a well-structured project and a clear understanding of your environment configurations. By following these steps, you can ensure a smooth deployment experience, while keeping your sensitive data secure with proper .gitignore
and .env
management.
Happy coding! π
Top comments (2)
So the frontend deploys on Render and the server starts running after deployment, but whenever I try to do any of the CRUD operations like updating password, logging in, etc. the usual error notifications, going to the main page or returning to login doesn't happen. It's as if the client isn't interacting with the server whatsoever on my end.
I am facing error in hosting over render.
byoode.onrender.com/
Can you help?