hospital-log/README.md

9.3 KiB

Pengembangan Sistem Audit Rekam Medis Menggunakan Teknologi Blockchain

Repositori ini berisi source code untuk pengembangan sistem audit rekam medis berbasis blockchain.

Gambaran Proyek

Dalam proyek ini terdapat 3 node peer dan 1 node orderer. Keempat peer tersebut dijalankan pada 3 pc desktop menggunakan docker swarm dengan detail sebagai berikut:

  • PC 1 (Ubuntu 24.04.3): PC 1 ini sebagai host docker swarm dan menjalankan peer serta orderer.
  • PC 2 (Ubuntu 24.04.3): PC 2 ini sebagai worker docker swarm pertama dan menjalankan peer.
  • PC 3 (Windows WSL dengan distro Ubuntu 24.04.1): PC 3 ini sebagai worker docker swarm keuda dan menjalankan peer.

Proyek ini mengimplementasikan sistem rekam medis menggunakan teknologi blockchain dengan rincian sebagai berikut:

  • Hyperledger Fabric sebagai framework blockchain dengan chaincode dibangun menggunakan bahasa pemrograman javascript.
  • Mekanisme konsensus RAFT untuk ordering service.
  • PostgreSQL sebagai basis data dan penyimpanan rekam medis offchain.
  • REST API Gateway sebagai penghubung antara pengguna dan jaringan blockchain, dibangun menggunakan javascript.

Struktur Repositori

  • /backend - Folder backend yang di dalamnya terdapat kode program backend api dan blockchain.
  • /frontend - Folder frontend yang di dalamnya terdapat kode program frontend.

Prasyarat

  • Docker & Docker Compose
  • Node.js (v20 atau lebih tinggi)
  • Instalasi Hyperledger Fabric (v2.5.13)
  • Jika menggunakan Windows, pastikan WSL2 telah diinstal dan diaktifkan serta jalankan proyek ini di dalam WSL2.
  • PostgreSQL (PostgreSQL 16.11 atau lebih tinggi)
  • Pastikan semua pc/vm yang digunakan memiliki IP Statis
  • Pastikan port berikut tersedia karena diperlukan untuk koneksi docker swarm: 2377 (TCP), 7946 (TCP/UDP), 4789 (UDP)

Instalasi

  1. Clone repositori

  2. Masuk ke direktori network, ikuti instruksi di file README.md untuk konfigurasi jaringan Hyperledger Fabric.

  3. Masuk ke direktori chaincode, ikuti instruksi di file README.md jika ingin mengubah logika bisnis dalam smartcontract, jika tidak, lanjut pada langkah ke-4.

  4. Jalankan command berikut di pc/vm yang akan menjadi gateway utama/docker swarm leader:

    docker swarm init --advertise-addr [IP_PC_UTAMA]
    
  5. Kemudian jalankan command berikut untuk mendapatkan token docker swarm yang akan digunakan pc/vm lain untuk bergabung ke dalam docker swarm:

    docker swarm join-token worker
    

    Setelah itu, salin output dari command tersebut.
    *Output command tersebut kurang lebih adalah seperti berikut

    docker swarm join --token SWMTKN-1-2ig... 192.168.11.74:2377
    
  6. Selanjutnya, jalankan output command yang telah disalin tadi pada masing-masing pc/vm yang akan bergabung dalam jaringan menjadi docker swarm worker.

  7. Pada pc/vm docker swarm leader, jalankan command berikut untuk mengidentifikasi pc/vm yang bergabung ke dalam docker swarm:

    docker node ls
    
  8. Setelah list node yang bergabung ke dalam docker swarm susah sesuai, maka selanjutnya adalah memberi nama masing-masing node yang bergabung ke dalam docker swarm. Untuk pemberian nama ini, pastikan sesuai dengan nama label yang ada dalam docker-compose-swarm.yaml. (Contohnya dalam file docker compose, peer 1 ada constraint placement yang bernilai label lokasi pc-tengah, maka pelabelan lokasi pc/vm yang harus jadi peer 1 haruslah pc-tengah). Untuk memberi label jalankan command berikut:

    docker node update --label-add lokasi=[LABEL] <ID_NODE>
    
  9. Kemudian, jalankan command berikut untuk membuat jaringan overlay yang berfungsi untuk membuat jalur komunikasi virtual agar container di pc/vm berbeda bisa saling bicara.

    docker network create --driver overlay --attachable hospital-net
    
  10. Selanjutnya jalankan command berikut pada pc/vm yang berperan sebagai docker swarm leader di dalam folder yang ada docker-compose-swarm.yaml, kalau dalam repositori ini berada dalam folder docker.

    docker stack deploy -c docker-compose.yaml hospital
    
  11. Verifikasi status docker swarm dengan menjalankan command berikut pada pc/vm yang berperan sebagai docker swarm leader.

    docker service ls
    
  12. Setelah jaringan berjalan, langkah selanjutnya adalah membuat channel, membuat peer dan orderer bergabung ke channel, dan melakukan deploy chaincode.

  13. Untuk membuat channel dan membuat peer dan orderer bergabung ke channel, jalankan command berikut:

    docker exec -it cli bash
    

    Setelah masuk ke dalam CLI fabric, lanjutkan dengan menjalankan command berikut:

    export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem
    
    # Buat channel
    peer channel create -o [ip_orderer_atau_domain_orderer_sesuai_konfigurasi]:[port_orderer] -c mychannel \
    -f ./channel-artifacts/mychannel.tx \
    --outputBlock ./channel-artifacts/mychannel.block \
    --tls --cafile "$ORDERER_CA"
    
    # Export peer address
    export CORE_PEER_ADDRESS=[ip_peer_atau_domain_peer_sesuai_konfigurasi]:[port_peer]
    # Gabung ke dalam channel
    peer channel join -b ./channel-artifacts/mychannel.block
    
    # !PENTING! Jika memiliki lebih dari satu peer, peer tersebut juga
    # harus bergabung ke dalam channel
    export CORE_PEER_ADDRESS=[ip_peer_atau_domain_peer_sesuai_konfigurasi]:[port_peer]
    peer channel join -b ./channel-artifacts/mychannel.block
    

    Setelah berhasil, jangan keluar dari CLI terlebih dahulu.

  14. Masih dalam CLI fabric, untuk melakukan deploy chaincode modifikasi dan jalankan command berikut sesuai konfigurasi jaringan anda:

    # Sesuaikan domain dengan peer yang digunakan, file ini dapat dilihat dalam
    # folder organizations
    export CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/medorg.example.com/peers/peer0.medorg.example.com/tls/server.crt
    export CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/medorg.example.com/peers/peer0.medorg.example.com/tls/server.key
    
    peer lifecycle chaincode package logVerification.tar.gz \
    --path /opt/gopath/src/github.com/hyperledger/fabric/peer/chaincode/logVerification \
    --lang golang \
    --label logVerification_1.0
    # Jika anda mengembangkan dan ingin mengubah versi chaincode supaya
    # dapat mempermudah dalam hal version control, anda dapat mengubah labelnya
    # Contoh, untuk pengembangan selanjutnya dapat menggunakan label berikut:
    # --label logVerification_1.1
    
    export CORE_PEER_ADDRESS=[ip_peer_atau_domain_peer_sesuai_konfigurasi]:[port_peer]
    peer lifecycle chaincode install logVerification.tar.gz
    
    # Install chaincode pada semua peer yang ada.
    # Contoh, jika terdapat dua peer, maka jalankan export CORE_PEER_ADDRESS
    # lagi dengan ip_peer untuk peer kedua.
    export CORE_PEER_ADDRESS=[ip_peer_atau_domain_peer_kedua_sesuai_konfigurasi]:[port_peer]
    peer lifecycle chaincode install logVerification.tar.gz
    
    # Setelah anda menjalankan command peer lifecycle chaincode queryinstalled berikut
    # maka akan muncul package_id chaincode anda, simpan id tersebut.
    peer lifecycle chaincode queryinstalled
    
    export NEW_CC_PACKAGE_ID=[isi_dari_output_command_peer_lifecycle_chaincode_queryinstalled]
    
    peer lifecycle chaincode approveformyorg -o [ip_orderer_atau_domain_orderer_sesuai_konfigurasi]:[port_orderer] --channelID mychannel \
    --name test-med --version [isi_dengan_versi_contoh_1.0] --package-id $CC_PACKAGE_ID --sequence [isi_dengan_sequence_ke_berapa_dan_sequence_harus_selalu_bertambah_sehingga_catat_selalu_sequence_ke_berapa] \
    --tls --cafile "$ORDERER_CA"
    
    # Command berikut berfungsi untuk melakukan commit chaincode.
    # Perhatikan pada --peerAddressess, jika memiliki lebih dari satu peer
    # sertakan juga dengan flag --peerAdressess dan format yang sesuai.
    peer lifecycle chaincode commit -o [ip_orderer_atau_domain_orderer_sesuai_konfigurasi]:[port_orderer] --channelID mychannel \
    --name test-med --version [isi_dengan_versi_contoh_1.0] --sequence [isi_dengan_sequence_ke_berapa_dan_sequence_harus_selalu_bertambah_sehingga_catat_selalu_sequence_ke_berapa]\
    --collections-config /opt/gopath/src/github.com/hyperledger/fabric/peer/config/collections_config.json \
    --tls --cafile "$ORDERER_CA" \
    --peerAddresses [ip_peer_atau_domain_peer_sesuai_konfigurasi]:[port_peer] --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/medorg.example.com/peers/peer0.medorg.example.com/tls/ca.crt \
    --peerAddresses [ip_peer_atau_domain_peer_sesuai_konfigurasi]:[port_peer] --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/medorg.example.com/peers/peer1.medorg.example.com/tls/ca.crt
    
  15. Setelah blockchain berhasil di deploy, anda dapat menjalankan backend dan frontend. Panduan menjalankan backend dan front end dapat diakses pada masing-masing folder: