DEV Community

Nditah
Nditah

Posted on

How to Setup Nodejs Mongodb in Production server on Ubuntu 18.04 in AWS, GCP, Azure, Digital Ocean Cloud Instance or Locally

Talking of DevOps practices like infrastructure automation,there are lots of great tools out there for large enterprise applications. However, for small applications, it would be an overkill like using a sledge hammer for a fly. So why would I use Infrastructure as Code System such as Terraform, or Configuration Management System Chef, Ansible, Puppet; when I can simply fly with this 5mins installation guide 😜 (just kidding, I am learning them 📚)

I regularly update the installation steps so get the Github gist for the most recent.

📝 still drafting the article

#!/usr/bin/env bash # Steps to write and execute a script # Open the terminal. Go to the directory where you want to create your script. # Create a file with . sh extension. # Write the script in the file using an editor. # Make the script executable with command chmod +x <fileName>. # Run the script using ./<fileName>. echo " ---------------------- Adding a New User to the System 'Sammy' ---------------------- " adduser sammy # enter all the prompted info # Step 3 — Adding the User to the sudo Group usermod -aG sudo sammy # Testing sudo Access su - sammy sudo ls -la /root echo " ---------------------- GIT ---------------------- " # install curl sudo apt install curl -y # install git sudo apt-get install -y git echo " ---------------------- NODE & NPM ---------------------- " ## You may also need development tools to build native addons: sudo apt-get install gcc g++ make -y wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash nvm ls-remote nvm install 14 nvm alias default 14.15.0 # add nodejs 14 ppa (personal package archive) from nodesource # curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - # install nodejs and npm # sudo apt-get install -y nodejs echo " ---------------------- MONGODB ---------------------- " # import mongodb 4.0 public gpg key sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 # create the /etc/apt/sources.list.d/mongodb-org-4.0.list file for mongodb echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list # reload local package database sudo apt-get update # install the latest version of mongodb sudo apt-get install -y mongodb-org # start mongodb sudo systemctl start mongod # stop mongodb sudo systemctl stop mongod # Make a directory as root user sudo mkdir -p /data/db # Provide access to the directory sudo chown -R $USER /data/db # set mongodb to start automatically on system startup sudo systemctl enable mongod # stop mongodb to start automatically on system startup sudo systemctl disable mongod # install local replication-set driver for nodejs sudo npm install --unsafe-perm --verbose -g run-rs -f # start mongodb replica set # run-rs --mongod --keep --shell --dbpath /home/user/data" # start mongod as a background process mongod --fork --syslog echo " ---------------------- PM2 ---------------------- " # install pm2 with npm npm install -g pm2 # set pm2 to start automatically on system startup pm2 startup systemd # make current user the owner of the pm2 log home dir sudo chown -R $(whoami):$(whoami) /home/ubuntu/.pm2 # create a shell script replica.sh $ nano replica.sh #!/bin/bash run-rs --mongod --keep --shell --dbpath /data/db $ pm2 run replica.sh echo " ---------------------- NGINX ---------------------- " # install nginx sudo apt-get install -y nginx # You can make the currrent $USER the owner of that directory sudo chown -R $(whoami):$(whoami) /var/www # set the appropriate permissions chmod 755 -R /var/www echo " ---------------------- UFW (FIREWALL) ---------------------- " # allow ssh connections through firewall # sudo ufw allow OpenSSH # allow http & https through firewall # sudo ufw allow 'Nginx Full' # enable firewall # sudo ufw --force enable echo " ---------------------- NETWORK TESTING TOOL ---------------------- " # curl tool sudo apt install httpie -y sudo apt update sudo apt install redis-server -y # # comment out `supervised no` and set `supervised systemd` sudo nano /etc/redis/redis.conf # > supervised systemd # restart redis server sudo systemctl restart redis.service echo " ---------------------- SET UP LETS-ENCRYPT ---------------------- " # Instal CertBot curl -o- https://raw.githubusercontent.com/vinyll/certbot-install/master/install.sh | bash # Open the server block file for your domain using nano or your favorite text editor: sudo nano /etc/nginx/sites-available/example.com #server_name example.com www.example.com; # test and restart nginx sudo nginx -t sudo systemctl reload nginx # create the nginx default configuration nano default # paste the content below ## start 📥 # website server server { server_name example.com www.example.com; root /var/www/html/web/build; index index.html; location / { try_files $uri$args $uri$args/ /index.html; } } # admin console server server { server_name admin.example.com; root /var/www/html/admin/dist; index index.html; location / { try_files $uri$args $uri$args/ /index.html; } } # demo or documentation server server { server_name developers.example.com; root /var/www/html/backend/doc; index index.html; location / { try_files $uri$args $uri$args/ /index.html; } } # backend api server server { server_name api.example.com; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; location / { proxy_pass http://localhost:5000; 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; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; } } ## end 📤 sudo rm /etc/nginx/sites-available/default sudo mv default /etc/nginx/sites-available/default # Set up Certbot to obtain SSL certificates sudo certbot --nginx -d example.com -d www.example.com -d api.example.com -d dev.example.com -d developers.example.com -d admin.example.com # To test the renewal process, you can do a dry run with certbot: sudo certbot renew --dry-run 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)