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
Top comments (0)