Setup Cloud Server Sendiri - AWS EC2, Amazon Lightsail, Linode, Digital Ocean. Punya server sendiri tu enak sih, daripada nyewa share hosting. Kalo dilihat dari segi biaya, jauh lebih murah 1CPU, 1GB RAM, 40GB SSD, 2TB Bandwith cuma USD 5$ per bulan di Amazon Lightsail. Tapi Kalo Dilihat dari segi teknis sih, kurang efektif saja, apalagi kalo ada client minta dibikinin blog pake server pribadi (dedicated server) bisa nguras waktu banyak. Toh hasilnya sama aja, malah enakan nyewa share hosting yang semi-semi dedicated gitu, meskipun costnya lebih mahal dikit. Selain keamanananya udah dijagain sama yang jualan hosting seperti Dewaweb, Niagahoster, Rumahweb, Domainesia dan masih bantak lagi, server share hosting juga ga ribet pake commandline, semua udah ada GUI (Graphical User Interface) WHM seperti PLESK dan CPANEL.

Environtment Deploy

  • Ubuntu 18.04 LTS
  • NGINX (Stable Version)
  • MySQL 5.5 5.6 ot 5.7

Command Line Basic

Penting banget sih menurutku untuk tau, paham dan hafal basic basic command line yang mau kita pake untuk setup server pertama kali.

Ubuntu 18.04 LTS

Perbedaaan # dan $,

  • tanda # menunjukkan perintah user root, dengan previledge
  • tanda $ menunjukkan perintah untuk pengguna biasa tanpa previledge

Command Line Update and Upgrade Local Pakcage

$ sudo apt-get update

$ sudo apt-get upgrade

Check Port

$ sudo lsof -i -P -n | grep LISTEN

$ sudo netstat -tulpn | grep LISTEN

$ sudo lsof -i:22 ## see a specific port such as 22 ##

$ sudo nmap -sTU -O IP-address-Here

Check User Ubuntu yang sedang login saat ini

$ whoami

Login Sebagai Root User Ubuntu

$ sudo -i

Configure Root Password

sebelum konfigurasi root password, pertama harus login dulu sebagai root.

$ sudo passwd

Check Free Memory

$ free -h

NGINX

Apa ya nginx itu? simple nya nginx itu web server yang bisa ngasih koneksi SSL (HTTPS) ke nama domain yang akan kita hubungkan ke public IP server. Command line dasar yang penting yaitu:

Sebelum install nginx, harus tahu kita mau install versi development atau stable. Jadi di Ubuntu harus ditambahin argumen stabel baru kita install, caranya:

$ sudo -s
$ nginx=stable 
$ add-apt-repository ppa:nginx/$nginx

use nginx=development for latest development version.

kemudia baru di install nginx nya,

$ apt-get update
$ apt-get install nginx

Install NGINX

$ sudo apt-get install nginx

Start Nginx (NGINX START)

$ sudo /etc/init.d/nginx start

Stop Nginx (NGINX STOP)

$  sudo nginx -s stop

atau

$ sudo /etc/init.d/nginx stop

nge-Reload NGINX (NGINX RELOAD)

$ sudo nginx -s reload

atau

$ sudo /etc/init.d/nginx reload

Quit NGINX (NGINX QUIT)

$ sudo nginx -s quit

Restart Nginx (NGINX RESTART)

$ sudo nginx -s restart

atau

$ sudo /etc/init.d/nginx restart

Force Restart Nginx

$ sudo systemctl restart nginx

Uninstall Nginx

$ sudo apt-get purge nginx nginx-common nginx-full

Menggunakan Systemctl Pada Nginx

$ sudo systemctl restart nginx

$ sudo systemctl restart nginx

$ sudo systemctl start nginx

$ sudo systemctl stop nginx

Menggunakan SysVinit Pada Nginx

$ sudo service nginx restart

$ sudo service nginx start 

$ sudo service nginx stop

Firewall Ubuntu 18.04 Comannd Line List

Allowing connection HTTP and HTTPS

$ sudo ufw allow 'Nginx Full'

Setting Up Default Polices

$ sudo ufw default deny incoming

$ sudo ufw default allow outgoing

Allowing SSH Connection

$ sudo ufw allow ssh

Allowing ssh port 22

$ sudo ufw allow 22

Allowing ssh port 2222

$ sudo ufw allow 2222

Enabling UFW

$ sudo ufw enable

Checking UFW and Rules

$ sudo ufw status

atau

$ sudo ufw status verbose

Allowing Other Connection

HTTP PORT 80

$ sudo ufw allow 80

HTTTP PORT 443

$ sudo ufw allow 443

Specific Port Other Range

$ sudo ufw allow 6000:6007/tcp

$ sudo ufw allow 6000:6007/udp

Specific IP Addresss

$ sudo ufw allow from 255.0.123.4

atau ip addres with port

$ sudo ufw allow from 203.0.113.4 to any port 22

Disable UFW

$ sudo ufw disable

Reset UFW

$ sudo ufw reset

Status UFW Numbered

$ sudo ufw status numbered


Numbered Output:
Status: active

 To                         Action      From
 --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

Delete UFW Rules dengan number:

$ sudo ufw number 2

Delete UFW Rules tanpa number:

$ sudo ufw delete allow http

atau:

$ sudo ufw delete allow 80

UFW Rules List

$ sudo ufw app list

list yang tampil:

Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

UFW Add Rules Argument

$ sudo ufw allow 'Nginx Full'

Redirect WWW ke non-WWW

untuk bisa ke redirect www ke non-www, pertama banget, harus bikin file extensi .conf di directory /etc/nginx/conf.d

$ cd /etc/nginx/conf.d

lalu bikin filenya:

$ touch redirect.conf

terus buka file pake nano atau vim:

$ cd /etc/nginx/conf.d
$ nano redirect.conf

masukin codingan dibawah ini:

server {
    server_name www.domainkamu.com;
    return 301 $scheme://domainkamu.com$request_uri;
}

setelah itu restart nginxnya, lalu check konfigurasinya sudah bener atau belum.

$ curl -I http://example.com

Redirect non-WWW ke WWW

sama kayak cara diatas untuk bisa ke redirect non-www ke www, pertama banget, harus bikin file extensi .conf di directory /etc/nginx/conf.d

$ cd /etc/nginx/conf.d

lalu bikin filenya:

$ touch redirect.conf

terus buka file pake nano atau vim:

$ cd /etc/nginx/conf.d
$ nano redirect.conf

masukin codingan dibawah ini:

server {
    server_name domainkamu.com;
    return 301 $scheme://www.domainkamu.com$request_uri;
}

setelah itu restart nginxnya, lalu check konfigurasinya sudah bener atau belum.

$ curl -I http://example.com

MySQL

Install MySQL

$ sudo apt-get install mysql-server

MySQL Version Check

$ mysql -v

Start MySQL

$ /etc/init.d/mysqld start

atau

$ service mysqld stop

atau

$ service mysql stop

Stop MySQL

$ /etc/init.d/mysqld stop

atau

$ service mysqld stop

atau

$ service mysql stop

Configure Instalation Root User dan Password MySQL

$ mysql_secure_installation

validasi password plugin

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

jika pilih yes maka akan muncul:

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 

...

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Configurasi MYSQL User dan Password Root Cara Langsung

To set a password, run

$ sudo mysql

Now update your user with this password
Replace 'password' with your password, but keep the quote marks!

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Then exit MySQL

$ quit

Login MySQL

$ mysql -u root -p

-u root nunjukin username login adalah root lalu masukin passwordnya.

atau, untuk unix shell pakai -h :

$ [mysql dir]/bin/mysql -h hostname -u root -p

Command Line Didalam MySQL, syaratnya harus masuk (login) ke mysql

Show Databases

show databases;

Create Database

create database [namadatabase];

misal :

create databases sanengineer_db;

jangan lupa ngasih titik koma diakhir command.

Show MySQL User

SELECT user FROM mysql.user;

Add Host Column

SELECT user,host FROM mysql.user;

Select Version Statement

SELECT VERSION();

Show Variables Like Statement

SHOW VARIABLES LIKE ‘%version%’; 

Status Command Line

STATUS;

Switch to a database

use [db name];

To see all the tables in the db

show tables;

To see database's field formats

describe [table name];

To delete a db

drop database [database name];

To delete a table

drop table [table name];

Show all data in a table

SELECT * FROM [table name];