Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yogeshvas/aws-ec2-instance
https://github.com/yogeshvas/aws-ec2-instance
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/yogeshvas/aws-ec2-instance
- Owner: yogeshvas
- Created: 2024-08-06T18:29:54.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2024-08-06T18:34:30.000Z (6 months ago)
- Last Synced: 2024-11-03T16:42:16.666Z (3 months ago)
- Size: 1.95 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# aws-ec2-instance
# Node.js Deployment
> Steps to deploy a Node.js app to DigitalOcean using PM2, NGINX as a reverse proxy and an SSL from LetsEncrypt
> Remmeber to have a custom domain otherwise this won't work! also,
at the time I am making this readme https://freedns.afraid.org/ (7 Aug 2024) gives free domain with a dns, I am not sure how much time it takes to setup tranfer the IP## 1. Create Free AWS Account
Create free AWS Account at https://aws.amazon.com/ (reqires credit card)## 2. Create and Lauch an EC2 instance and SSH into machine
I would be creating a t2.micro ubuntu machine for this demo. (as its free)I am a Macbook M1 user so I will use SSH client, you can use Connection Intance if you are on windows
## 3. Install Node and NPM
```
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejsnode --version
```## 4. Clone your project from Github
```
git clone https://github.com/piyushgargdev-01/short-url-nodejs
```## 5. Install dependencies and test app
```
sudo npm i pm2 -g
pm2 start index# Other pm2 commands
pm2 show app
pm2 status
pm2 restart app
pm2 stop app
pm2 logs (Show log stream)
pm2 flush (Clear logs)# To make sure app starts when reboot
pm2 startup ubuntu
```## 6. Setup Firewall
```
sudo ufw enable
sudo ufw status
sudo ufw allow ssh (Port 22)
sudo ufw allow http (Port 80)
sudo ufw allow https (Port 443)
```## 7. Install NGINX and configure
```
sudo apt install nginxsudo nano /etc/nginx/sites-available/default
```
Add the following to the location part of the server block
```
server_name yourdomain.com www.yourdomain.com;location / {
proxy_pass http://localhost:8001; #whatever port your app runs on
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;
}
```
```
# Check NGINX config
sudo nginx -t# Restart NGINX
sudo nginx -s reload
```## 8. Add SSL with LetsEncrypt
```
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com# Only valid for 90 days, test the renewal process with
certbot renew --dry-run
```