3‐Masalah Umum - lindduncoding/database-bsb GitHub Wiki

Masalah System Load

Jika perangkat server yang dipilih merupakan perangkat dengan spesifikasi minimum, maka masalah ini merupakan masalah yang akan sering muncul. Walaupun begitu, solusinya cukup sederhana dan cara mendeteksinya pun mudah.

Ciri-ciri Server Mati (karena system load)

  1. Ketika diakses menggunakan alamat IP dan port akan memberikan respon Internal Server Error.
  2. Ketika diakses menggunakan SSH koneksi terputus secara prematur dengan pesan error kex_exchange_identification: read: Connection reset by peer.
  3. Ketika dilakukan IP scanning, alamat IP server tidak muncul atau muncul tetapi dengan status INACTIVE HOST.
  4. Tanda-tanda fisik seperti perangkat yang panas atau lampu indikator tidak menyala.

Solusi

  1. Force restart server dengan menekan tombol power untuk dimatikan kemudian tekan lagi untuk dinyalakan. Bisa juga dengan mencabut kabel power server (tidak direkomendasikan)
  2. Tunggu beberapa saat hingga alamat IP server kembali muncul dan berstatus ACTIVE berdasarkan laporan IP Scanning.
  3. Lakukan koneksi SSH ke server, kemudian jalankan kembali perintah nohup.

Untuk langkah ketiga, jika server mampu, daftarkan layanan uvicorn/FastAPI ke entri systemd

Ketika server mati lagi, ia akan secara otomatis menjalankan kembali layanan tersebut seperti layanan MariaDB yang otomatis menyala lagi jika server terganggu.

Masalahnya, pendafataran layanan menggunakan systemd memakan resource server yang lumayan banyak sehingga untuk pemasangan pada perangkat dengan spesifikasi minimum solusi ini TIDAK direkomendasikan.

Pencegahan

  1. Ketahui kemampuan server, jangan jalankan lebih dari 1 aplikasi secara bersamaan.
  2. Upgrade server :D

Di sisi lain, server bisa saja masih aktif tetapi router tidak menyala sehingga server berada pada status offline. Apapun masalahnya, jika akar permasalahan adalah server atau router yang mati, solusinya cukup sederhana yaitu lakukan restart.

Masalah Database

Can't connect to MySQL instance

Ada beberapa kemungkinan, seperti layanan mariadb yang belum berjalan atau masalah keamanan. Untuk memastikan lakukan hal berikut:

  1. Jalankan perintah sudo systemctl status mariadb untuk melihat status MariaDB. Jika tidak menunjukkan status ACTIVE, maka jalankan ulang database MariaDB dengan perintah sudo systemctl start mariadb.
  2. Cek konfigurasi MariaDB, terutama opsi bind-address. Pastikan MariaDB dikonfigurasi untuk mendengarkan SEMUA alamat (0.0.0.0).
  3. Cek aturan firewall, terutama pada port 3306 dengan perintah sudo netstat -tulnp. Perhatikan output seperti berikut:
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1234/mariadb

Jika tidak terdapat output seperti di atas maka database MariaDB belum diperbolehkan firewall untuk menerima request dari port 3306.

Terakhir, cek aturan keamanan database. Perhatikan langkah pembuatan user MariaDB saat instalasi database. Pastikan username, password, alamat client (source destination) cocok dengan aturan keamanan yang telah dibuat.

CREATE USER '[username]'@'192.168.0.%' IDENTIFIED BY '[password]';

Jika konfigurasi alamat IP berubah sehingga menyebabkan alamat client dan server tidak berada di jangkauan alamat yang diatur ketika membuat akun MariaDB, lakukan SSH ke server untuk mengakses MariaDB sebagai root, kemudian lakukan ALTER USER.

Masalah HTTP

Unauthorized (401)

  1. Pastikan sudah login dengan berhasil sebelum mengakses fitur lain.
  2. Jika ingin melakukan testing backend endpoint menggunakan curl atau Postman, jangan lupa memberikan header Authorization: Bearer [Token] untuk setiap request HTTP yang dibuat.
  3. Direkomendasikan untuk menggunakan endpoint /docs bawaan FastAPI untuk melakukan testing backend endpoint.

Internal Server Error (500)

Ada beberapa kemungkinan, seperti server yang mati atau kesalahan logika pada backend/frontend. Untuk memastikan, lakukan hal berikut:

  1. Akses server menggunakan SSH. Jika gagal, berarti server mati. Nyalakan kembali dan tunggu beberapa saat.
  2. Navigasi ke folder database-bsb menggunakan perintah cd database-bsb/app.
  3. Baca output.log menggunakan perintah cat output.log dan lihat apakah ada error yang berkaitan dengan Python, MariaDB, atau HTML.
  4. Jika output.log tidak memberikan tanda-tanda anomali, cek apakah layanan masih berjalan menggunakan perintah top. Cari proses yang memiliki nama uvicorn. Jalankan ulang perintah nohup jika tidak ditemukan adanya proses uvicorn yang berjalan.