Sure! Here's a step-by-step guide to set up a CI/CD pipeline for deploying a Node.js + MySQL project on cPanel using GitHub. This will automate the deployment process each time you push code to your repository. 🚀


🛠 Prerequisites

Before we dive in:

✅ You have a Node.js + MySQL project

✅ Your cPanel hosting supports SSH access and Node.js apps

✅ You have access to MySQL DB via cPanel

✅ GitHub repo is ready

✅ You can log into cPanel terminal (SSH or built-in Terminal)


🚀 Step-by-Step Guide

1. Set Up Your Node.js App on cPanel

a. Login to cPanel

  • Go to Software → Setup Node.js App
  • Click Create Application
  • Set:
    • App Mode: Production
    • Node.js Version: (e.g., v18+)
    • Application Root: (e.g., myapp)
    • Application Startup File: index.js
  • Click Create

📝 This sets up a private Node.js environment and gives you a start/stop link.


2. Connect cPanel App to GitHub Repo

a. SSH into your cPanel server

ssh username@yourdomain.com

Use the credentials provided by your host.

b. Clone the GitHub repository

cd ~/myapp  # go to the app directory set in cPanel
git clone https://github.com/yourusername/your-repo.git .

Make sure to clone into the same folder your Node.js app is looking in (Application Root).


3. Install Dependencies

npm install

Make sure your package.json is in the root.


4. Set Environment Variables

You can use .env file or cPanel environment variables:

  • In Setup Node.js App, click Edit Environment Variables
  • Add variables like:
    • DB_HOST, DB_USER, DB_PASS, DB_NAME, PORT

OR use .env:

PORT=8080
DB_HOST=localhost
DB_USER=myuser
DB_PASS=mypass
DB_NAME=mydb

And read them in your app using dotenv.


5. Auto-Restart the App After Pull

Edit post-receive Git hook or create a custom deploy script:

a. Create a script: deploy.sh in the project root

#!/bin/bash

echo "Pulling latest changes..."
git pull origin main

echo "Installing dependencies..."
npm install

echo "Restarting app..."
~/nodevenv/myapp/18/bin/pm2 restart index.js

Update paths based on your cPanel environment.

b. Make it executable

chmod +x deploy.sh

6. Enable GitHub Webhook for Auto-Deploy

a. On GitHub:

  • Go to Repo → Settings → Webhooks → Add webhook
  • Payload URL: https://yourdomain.com/deploy.php (or any URL you set up to run deploy script)
  • Content type: application/json
  • Select: Just the push event

b. Create deploy.php on your server:

shell_exec("cd /home/youruser/myapp && ./deploy.sh");
?>

This runs the deploy script when GitHub webhook triggers.


7. Setup MySQL

Use cPanel > MySQL® Databases:

  • Create your DB, user, and assign user to DB
  • Update your .env or environment variables accordingly

✅ Done! Now What?

  • Every time you git push, GitHub triggers the webhook.
  • cPanel runs your deploy.sh, pulls the latest code, installs deps, and restarts your app.
  • Your server is always up to date automatically 💪

🛡 Pro Tips

  • Use PM2 to manage the Node.js process: auto-restart, logs, etc.
  • Add logs in deploy.sh to debug.
  • Secure your webhook URL to prevent unauthorized access.

Let me know if you want me to generate the files (deploy.sh, deploy.php, .env) for you or help with setting up MySQL connection in Node.js.