Next js app server setup with AWS

Jagannath Swarnkar
2 min readJul 7, 2021

--

setup AWS server for next js website with Cloudflare domain

Step 1-

login to your AWS server in your local terminal or in Termius (I’m using here).

Termius login-
- add title
- add the IP address
- add username
- add password / pem file

Step 2-
install node js and Nginx, (if already exists then avoid this step)

curl -sL https://deb.nodesource.com/setup_16.x -o nodesource_setup.sh
sudo bash nodesource_setup.sh
sudo apt install nodejs
sudo apt update && sudo apt install nginx -y
sudo ufw allow 'Nginx HTTP'
sudo service nginx start

You check this document for SPA (click)

Step 3-
Now it’s time to configure your domain to nginx

open nginx default configuration file
first navigate to /etc/nginx/sites-available

and open default file with nano editor — and add the below

For spa (React js)

server {
listen 80;
listen [::]:80;
#listen 443 ssl;
server_name website.com;
#ssl_certificate /etc/ssl/myApp/website_com.crt;
#ssl_certificate_key /etc/ssl/myApp/server.key;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

save this file and restart Nginx sudo service nginx restart

Add SSL certificate for HTTPS & default redirect to HTTPS

server {
listen [::]:443 ssl;
listen 443 ssl;
server_name website.com;
ssl_certificate /etc/ssl/myApp/website_com.crt;
ssl_certificate_key /etc/ssl/myApp/server.key;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
if ($host = website.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name staging.website.com;
return 404; # managed by Certbot
}

For SPA (React js)

server {
listen 80;
listen [::]:80;
server_name domain.com;
root /var/www/html/build;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri$args $uri$args/ $uri $uri/ /index.html =404;
}
}

Now you can run your app on your domain with HTTPS. https://staging.website.com/

Note: but it will show 502 status code as no app is running on port 3000 on our server. so we need to run our application on our server

checkout to the directory cd /var/www/html

clone your website repository here from the git platform (Github | bitbucket …etc)

checkout to your repo — cd <my_repo>

install all packages and run build

$npm install
$npm run build

Note: make sure that your app is running on a related port defined in the Nginx configuration

run your application with forever or pm2

with forever — forever start server.js

with pm2 — pm2 start server.js --name "app_name"

Now it’s time for circle ci configuration

checkout other blogs circleci-configuration

— — — — — — — — — — — — — — — — — — — —

view live code example on Stackblitz — demo

--

--

Jagannath Swarnkar
Jagannath Swarnkar

Written by Jagannath Swarnkar

Sr. Software Engineer | React js | Next js | Node Js | Flutter

No responses yet