Create EC2 Instance & Connect
Launch EC2 with Key Pair
ssh command requires .pem permission
chmod 400 your-key.pem
ssh -i your-key.pem ubuntu@YOUR_EC2_PUBLIC_IP
Install Node & Git
Download Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs git
Clone Your Project
Pull project from GitHub
git clone https://github.com/yourusername/your-nextjs-project.git
cd your-nextjs-project
Install Dependencies & Add Environment Variables
Install node modules
npm install
Add .env file
nano .env
Build Next.js app
npm run build
Run App Using PM2
Install PM2 globally
sudo npm install pm2 -g
Start Next.js production server
pm2 start "npm start -- -H 0.0.0.0" --name "App name"
Save PM2 state
pm2 save
Enable auto-start on reboot
pm2 startup
Install & Configure NGINX
Install nginx
sudo apt install nginx -y
Edit NGINX default config
sudo nano /etc/nginx/sites-available/default
Clear existing file
sudo truncate -s 0 /etc/nginx/sites-available/default
Add this config
sudo systemctl reload nginx
Add SSL Certificate (HTTPS)
Install Snap & Certbot
sudo apt update
sudo apt install snapd -y
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Configure Domain Before SSL
Add domain to nginx
sudo nano /etc/nginx/sites-available/default
Add your domain/server_name
sudo systemctl reload nginx
Generate Free SSL
sudo certbot --nginx -d "your-domain-or-sub-domain"