Skip to content

caresomebody/Project-KOM312-MiniNote

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 

Repository files navigation

MiniNote

GitHub package.json version Docker Cloud Build Status Say thanks
Original Repository : https://github.com/muety/mininote

Laporan Proyek Akhir KOM312 Komunikasi Data dan Jaringan

Anggota

Nama Nim
1 Rafael Tektano Grandiawan Eknanda G64180001
2 Bintang Fikriguska G64180024
3 Alvin Ferdiansyah G64180079
3 Muhammad Hafizhan G64180100

Sekilas Tentang Instalasi Konfigurasi Cara Pemakaian Pembahasan Referensi

📒 Sekilas Tentang MiniNote


MiniNote merupakan sebuah aplikasi Markdown Note garapan muety bersifat self-hosted menggunakan Vue 3 dan Express. Aplikasi ini dapat membuat sebuah teks dengan format markdown serta dapat langsung direpresentasikan. Sebagai tambahan, anda dapat mempelajari markdown di link berikut ini untuk memudahkan penggunaan. MiniNote pada projek ini telah di deploy ke alamat publik yang dapat diakses melalui https://mininote.bintangfikriguska.my.id/

🚜 Instalasi

Untuk menjalankan aplikasi terdapat beberapa cara, yaitu dengan cara manual dan juga docker pada localhost, dan menggunakan nginx server untuk deploy ke publik.

1. Manual

⚙️ Pre-Install Requirements

Terdapat beberapa requirements yang akan kita gunakan untuk melakukan install dan build pada aplikasi. Untuk itu, kita harus memastikan semua requirements dibawah ini terinstall dengan benar. Beberapa requirement memiliki minimal versi yang capable untuk digunakan. Namun di bawah ini adalah versi dari requirement yang kami install dan gunakan.

NodeJS v14.16.0

$ cd ~
$ curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
$ sudo bash nodesource_setup.sh
$ sudo apt install nodejs

Yarn 1.22.5

$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt update
$ sudo apt remove cmdtest
$ sudo apt install yarn

npm 6.14.11

$ sudo npm install


⚙️Build && Run

# **Clone Repositori orisinilnya**
$ git clone https://github.com/muety/mininote

# Install backend dependencies
$ yarn

# Install frontend dependencies and build
$ cd webapp && yarn && yarn build && cd ..

Pastikan anda sudah berada pada directory aplikasi, dan seluruh installan beserta pre-install requirement sudah terpenuhi. Apabila aplikasi diinstall pada local computer, secara default akan dijalankan pada port 3000. Sehingga kita dapat mengakses aplikasi pada localhost:3000. Setelah build berhasil, kita dapat langsung menjalankan aplikasi.

$ cd mininote
$ yarn start

🐳 2. Docker

Terdapat alternatif lain untuk menjalankan aplikasi, yaitu menggunakan docker. Docker sendiri merupakan program untuk membangun, mengemas, dan menjalankan aplikasi dengan membuatnya menjadi container (wadah). Keuntungan menggunakan docker salah satunya adalah terisolasi, aplikasi yang terisolasi akan terpisah dan tidak akan mengganggu host apabila terdapat masalah (Mirip seperti VM).

⚙️ Pre-Install Requirements:

Docker

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo usermod -a -G docker $USER

⌨️ Running the App

# Membuat volume persistent yang akan digunakan aplikasi
$ docker volume create mininote-data

# Mendownload image dari docker hub, membuat container, lalu menjalankannya
$ docker run -d -p 127.0.0.1:3000:3000 -v mininote-data:/app/data --name mininote n1try/mininote

Setelah command tersebut dijalankan, aplikasi bisa diakses di localhost port 3000 sama seperti penginstalan manual.

3. Nginx Server

Sebelumnya, kita perlu melakukan setup dan konfigurasi nginx terlebih dahulu yang dijelaskan pada bagian Konfigurasi. Setelah seluruh persiapan dan pengaturan di set dengan baik, kita dapat menjalankan perintah :

$ sudo nginx -s reload

Dan aplikasi pun akan dideploy dan berjalan pada alamat publik.


⚙️ Konfigurasi

1. Setup VPS

Kami mencoba untuk menginstall dan menjalankan aplikasi menggunakan Virtual Private Server. Untuk itu, terlebih dahulu kita perlu untuk membuat sebuah VPS dan melakukan beberapa setup. Disini kami menggunakan VPS dari Google Cloud Product menggunakan credit free trial . Pada prosesnya, pertama kita perlu membuat sebuah VM baru pada google cloud.

Adapun details VPS yang kami setup diantaranya :

  • Machine type : n1-standard-1 (1 vCPU, 3.75 GB memory)
  • CPU platform : Intel Skylake
  • Zone : asia-southeast2-a
  • External IP : 34.101.67.147 (ephemeral)
  • Operating System : Ubuntu 20.04 LTS
  • Remote Access : SSH

Karena aplikasi web akan dibuka sebagai akses publik, kita perlu untuk menyiapkan beberapa port dan rule firewall juga.

Kita juga harus memastikan bahwa server dapat terkoneksi menggunakan SSH. Kita dapat mengakses remote google cloud, dan login sebagai sudo untuk membuat akses baru agar server dapat diakses menggunakan SSH client, serta menambahkan beberapa pengaturan lain yang diperlukan. Setelah VPS siap digunakan, kita dapat lanjut ke langkah berikutnya yaitu mempersiapkan requirement untuk menginstall aplikasi.


2. 🔒 Setup domain dan SSL

Kami menggunakan cloudflare sebagai server penghubung antara server asli dengan visitor. Cloudflare sendiri adalah Content Delivery Network (CDN) yang memiliki banyak fasilitas. Oleh karena itu kami menggunakannya untuk instalasi SSL dan sebagai DNS.

Di sisi server, kami menggunakan nginx sebagai web server untuk melakukan setup domain dan sertikat SSL yang telah diberikan oleh cloudflare pada server. Selain itu, nginx juga digunakan untuk melakukan reverse proxy ke port tertentu tempat aplikasi berada.

2.a Konfigurasi Cloudflare

Register dan login pada akun cloudflare. Setelah itu tambahkan domain dengan menekan tombol add site

Masukkan domain website anda.

setelah itu pilih free plan jika ingin menggunakan plan yang gratis.

Akan terdapat table untuk menambahkan record DNS, masukkan IP publik server anda ke dalam record domain yang anda inginkan tersebut.

Ganti nameserver anda pada domain registrar dengan nameserver cloudflare.

Setelah nameserver diubah, pilih tab SSL/TLS, lalu tab Origin Server, dan pilih create certificate. Akan ada tampilan seperti berikut:

Setelah tombol Create ditekan, akan terdapat origin certificate dan private key. Copy dan simpan origin certificate ke dalam file /etc/ssl/certs/cert.pem dan private key ke dalam file /etc/ssl/private/priv.key. (File bisa diubah sesuai keinginan)

2.b Konfigurasi nginx

⚙️ Requirements:

nginx

$ sudo apt install nginx

Tambahkan file konfigurasi /etc/nginx/sites-available/mininote dengan isi sebagai berikut:

server {
    listen 80;
    listen [::]:80;
    
    # Sesuaikan dengan domain anda
    server_name mininote.bintangfikriguska.my.id www.mininote.bintangfikriguska.my.id;

    return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        # Sesuaikan dengan domain anda
        server_name mininote.bintangfikriguska.my.id www.mininote.bintangfikriguska.my.id;
        
        # Sesuaikan dengan sertifikat file yang terdapat di server anda
        ssl_certificate /etc/ssl/certs/cert.pem;
        ssl_certificate_key /etc/ssl/private/priv.key;

        access_log /var/log/nginx/reverse-access.log;
        error_log /var/log/nginx/reverse-error.log debug;

        location / {

                proxy_set_header        Host $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto $scheme;
                
                proxy_pass              http://localhost:3000;
        }
}

Setelah itu buat symbolic link (symlink) /etc/nginx/sites-enabled/mininote yang mengarah ke /etc/nginx/sites-available/mininote.

$ sudo ln -s /etc/nginx/sites-available/mininote /etc/nginx/sites-enabled/

Setelah membuat symlink di dalam folder tersebut, file konfigurasi yang telah kita buat tersebut akan diaggap aktif oleh nginx (setelah di-reload). Alasan digunakannya symlink di folder sites-enabled adalah agar lebih terorganisir, jadi apabila ingin menonaktifkan file konfigurasi (menghapus symlink) dan suatu saat ingin mengaktifkannya lagi, tinggal membuat symlink yang baru ke folder sites-enabled.

Lakukan reload file konfigurasi nginx.

$ sudo nginx -s reload

Setelah itu, aplikasi sudah bisa diakses menggunakan domain kita yang sudah terinstal ssl. Web akhir aplikasi dapat diakses secara publik pada web berikut : MiniNote

💻 Cara Pemakaian


Aplikasi dapat diakses pada alamat publik kami di https://mininote.bintangfikriguska.my.id/. Aplikasi ini memiliki beberapa fitur sederhana, diantaranya :

  • Membuat Sebuah Repository
    Pengguna dapat membuat repository dari notenya sendiri dengan fitur penamaan repository beserta password untuk mengakses. Password dan nama respository dapat diubah
  • Markdown Editor
    Pengguna dapat menuliskan teks dengan format markdown dan sistem dapat langsung menampilkan hasilnya (pada Kotak A)
  • Membuat Note Baru
    Pengguna dapat membuat note baru (pada Kotak C)
  • Mencari Note
    Dapat dilihat pada Kotak B
  • Menyimpan dan Mengubah Nama serta Password
    Dapat dilihat dan diakses pada tab label D

🗣️ Pembahasan


Kelebihan

  • Aplikasi ini cukup responsif dalam menginterpretasikan markdown
  • Fitur password dan nama directory user cukup fungsional
  • Aplikasi dibangun dengan node js yang cukup sederhana dan mudah diinstal
  • Lebih mirip ke markdown playground
  • Mitigasi serangan DDoS.
  • HTTPS, Instalasi menggunakan sertifikat SSL, sehingga lebih secure.

Kekurangan

  • Aplikasi ini memiliki user interface yang kurang menarik dengan user experience yang kurang nyaman. Pengguna harus benar-benar menghafal format markdown tanpa ada autofill.
  • Fitur yang disediakan juga tidak banyak seperti yang ditawarkan oleh Notion

Perbandingan dengan Aplikasi Sejenis

  • Notion memiliki fitur yang lebih banyak dibanding MiniNote (dapat meng-input tabel, gambar, embed website, dan lebih banyak lagi
  • Notion memiliki user-experience yang ramah, pengguna yang tidak paham tentang script akan mudah menggunakannya



📚 Referensi

  1. how to host a website using cloudflare and nginx on ubuntu 20 04 - DigitalOcean

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published