
How to Deploy Strapi on Render
Deploying Strapi on Render has quickly become one of the most reliable, developer‑friendly, and cost‑effective ways to host a modern headless CMS. Render provides a managed environment for Node.js applications, automatic deployments, HTTPS, scalable infrastructure, and integrated databases — all of which perfectly align with Strapi’s requirements. Whether you’re building a full MERN stack application, a high‑traffic content website, or a custom enterprise platform, hosting Strapi on Render gives you both stability and simplicity.
In this comprehensive guide, we walk you step‑by‑step through everything you need to know about deploying Strapi on Render, configuring environments, connecting databases, managing media, optimizing production performance, and integrating your frontend. By the end, you will have a fully deployable, production‑ready Strapi setup.
If you need expert help with Strapi development or MERN stack projects, you can always hire AAMAX — a full‑service digital marketing and web development company offering Web Development, Digital Marketing, and SEO Services.
# Why Choose Render for Hosting Strapi?
Render has rapidly become a preferred platform for hosting Strapi due to its balance between affordability, developer experience, and enterprise‑grade infrastructure. Some of the reasons developers prefer Render include:
## 1. Zero‑Configuration Deployments
Render can automatically detect Node.js projects, install dependencies, and run Strapi with minimal setup.
## 2. Built‑In HTTPS Certificates
All deployed services receive free TLS certificates, essential for secure Strapi admin access.
## 3. Automatic Deployments from Git
Every push to your GitHub or GitLab repository automatically triggers a new deployment.
## 4. Integrated PostgreSQL Database
Strapi works seamlessly with Render’s managed PostgreSQL.
## 5. Horizontal & Vertical Scaling
Easily scale CPU, memory, or instances during high‑traffic periods.
## 6. Affordable Plans
Render offers free tiers for testing and low‑cost production services.
## 7. Persistent Disks
Strapi requires persistent storage for uploads, and Render provides persistent disks for media files.
All of these features make Render one of the best hosting environments for Strapi CMS.
# Preparing Strapi for Deployment
Before deploying, it’s important to configure your Strapi project for production.
## 1. Install Dependencies
Run:
npm install
npm run build
This ensures that all packages are installed and your Strapi admin panel is compiled for production.
## 2. Set Up Environment Files
Create an .env file locally:
HOST=0.0.0.0
PORT=1337
PUBLIC_URL=https://your-strapi-app.onrender.com
NODE_ENV=production
You will later transfer these variables to Render’s dashboard.
## 3. Check server.js Configuration
In config/server.js:
module.exports = ({ env }) => ({
host: env('HOST', '0.0.0.0'),
port: env.int('PORT', 1337),
url: env('PUBLIC_URL'),
});
This ensures Strapi runs correctly in the Render environment.
## 4. Use PostgreSQL in Production
Strapi does not recommend SQLite for production. Update config/database.js:
module.exports = ({ env }) => ({
connection: {
client: 'postgres',
connection: {
connectionString: env('DATABASE_URL'),
ssl: { rejectUnauthorized: false },
},
},
});
Now your project is production‑ready.
# Step‑by‑Step: Deploying Strapi on Render
Below is the full deployment workflow for running Strapi on Render.
## Step 1: Push Strapi to GitHub or GitLab
Render deploys directly from repositories, so your project must be committed to Git.
Steps:
- Create a GitHub repository
- Push your Strapi project
- Ensure
package.jsonincludes:
"build": "strapi build",
"start": "strapi start"
## Step 2: Create a New Web Service on Render
- Log in to Render
- Click New → Web Service
- Select your GitHub repository
- Choose Node.js runtime
Render auto‑detects your code and preconfigures most settings.
## Recommended Instance Type
- For development: Free or Starter Instance
- For production: Starter Plus or Standard Instance
## Step 3: Add Environment Variables
Go to:
Render Dashboard → Environment → Add Environment Variables
Add:
NODE_ENV=production
HOST=0.0.0.0
PORT=10000
PUBLIC_URL=https://your-strapi-app.onrender.com
APP_KEYS=your-generated-keys
API_TOKEN_SALT=random-string
ADMIN_JWT_SECRET=random-string
JWT_SECRET=random-string
### Generating secure secrets:
Use:
openssl rand -base64 32
## Step 4: Connect Render PostgreSQL
Render offers 1‑click PostgreSQL database creation.
- Go to New → PostgreSQL
- Choose free or paid tier
- After creation, copy the database Internal Database URL
- Add it as:
DATABASE_URL=postgres://...
Strapi will connect automatically.
## Step 5: Configure Persistent Disk for Uploads
Without a persistent disk, Strapi uploads will be lost on redeploy.
Steps:
- Go to your Strapi Web Service
- Click Disks
- Add Persistent Disk
- Mount Path:
/opt/render/project/src/public/uploads
Update Strapi Upload Plugin
Inside config/plugins.js:
module.exports = ({ env }) => ({
upload: {
config: {
provider: 'local',
sizeLimit: 10000000,
basePath: '/uploads',
},
},
});
This ensures media files survive across deployments.
## Step 6: Set Up Build & Start Commands
Render should automatically detect these:
Build Command: npm install && npm run build
Start Command: npm start
If not, manually configure them.
## Step 7: Deploy Strapi
Click Deploy Web Service.
Render will:
- Install Node dependencies
- Build Strapi Admin Panel
- Set up environment variables
- Start the CMS on the assigned port
Once deployed, your admin panel will be available at:
https://your-strapi-app.onrender.com/admin
# Configuring Strapi for Production on Render
Once deployed, there are several important production optimizations.
## 1. Set Up CORS Rules
Edit config/middlewares.js:
module.exports = [
'strapi::errors',
{
name: 'strapi::cors',
config: {
origin: [
'https://your-frontend-domain.com',
'http://localhost:3000'
],
headers: ['Content-Type', 'Authorization'],
},
},
];
Ensures secure API communication.
## 2. Configure Email Providers
If your app uses emails (admin invites, password resets, etc.), configure a provider like SendGrid:
email: {
config: {
provider: 'sendgrid',
providerOptions: {
apiKey: env('SENDGRID_API_KEY'),
},
settings: {
defaultFrom: 'noreply@yourdomain.com',
defaultReplyTo: 'support@yourdomain.com',
},
},
},
## 3. Enable HTTPS Redirect
Render automatically provides HTTPS, but Strapi should be aware. In server.js, ensure:
url: env('PUBLIC_URL')
## 4. Improve Performance with Caching
Install Redis or use API-level caching for frequently accessed data.
# Deployment Checklist for Production
Before going live, ensure the following:
- Strapi builds successfully
- Git auto-deploys on every push
- PostgreSQL is connected
- Persistent disk is mounted
- Environment variables are correct
- Admin panel is secured
- API tokens are protected
- CORS allowed domains are set
- Media uploads persist
If all these are correctly configured, your Strapi instance is fully production‑ready.
# Integrating Frontend with Strapi (React, Next.js, Vue)
Your frontend can consume Strapi content via REST or GraphQL.
Example API Call Using Axios:
axios.get(`${process.env.REACT_APP_API_URL}/api/articles?populate=*`)
.then(res => console.log(res.data));
Environment Variable Example:
REACT_APP_API_URL=https://your-strapi-app.onrender.com
This setup works for:
- React
- Next.js
- Vue
- Nuxt
- SvelteKit
- Gatsby
Netlify, Vercel, or AWS Amplify can host your frontend while Strapi runs on Render.
# Setting Up Webhooks for Automatic Frontend Rebuilds
If your frontend is static, you can trigger rebuilds automatically.
Steps:
- Create Webhook in Netlify or Vercel
- Copy Webhook URL
- Go to Strapi Admin → Settings → Webhooks
- Add events:
- entry.create
- entry.update
- entry.delete
Now your frontend rebuilds whenever content changes.
# Managing Media on Render
Render persistent disks handle uploads, but for high‑scale production, consider integrating cloud media storage:
- AWS S3
- DigitalOcean Spaces
- Cloudinary
- Google Cloud Storage
This improves performance and stability during scaling.
Example AWS S3 configuration:
module.exports = ({ env }) => ({
upload: {
config: {
provider: '@strapi/provider-upload-aws-s3',
providerOptions: {
accessKeyId: env('AWS_ACCESS_KEY'),
secretAccessKey: env('AWS_SECRET_KEY'),
region: env('AWS_REGION'),
params: {
Bucket: env('AWS_BUCKET'),
},
},
},
},
});
# Troubleshooting Common Deployment Issues
## 1. “Application Error” on Deploy
Usually caused by missing environment variables.
## 2. “Cannot Connect to Database”
Ensure DATABASE_URL is correct and SSL is enabled.
## 3. Media Not Saving
Add persistent disk or use cloud storage.
## 4. CORS Errors
Check middlewares.js for allowed origins.
## 5. Admin Panel Not Loading
Run:
npm run build
before deployment.
# Final Thoughts
Deploying Strapi on Render is one of the cleanest, most reliable, and most scalable deployment workflows available today. Render simplifies server setup, scaling, database hosting, persistent storage, and secure deployments — allowing you to focus entirely on building your application rather than managing infrastructure.
Whether you're developing a full MERN stack application, a large content‑driven website, or a custom enterprise platform, Strapi + Render is a powerful and future‑proof combination. And if you need expert help, remember that AAMAX provides industry‑leading MERN Stack Development services along with Web Development, Digital Marketing, and SEO Services to help bring your projects to life.






