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
-
Clone repositori
-
Masuk ke direktori network, ikuti instruksi di file
README.mduntuk konfigurasi jaringan Hyperledger Fabric. -
Masuk ke direktori chaincode, ikuti instruksi di file
README.mdjika ingin mengubah logika bisnis dalam smartcontract, jika tidak, lanjut pada langkah ke-4. -
Jalankan command berikut di pc/vm yang akan menjadi gateway utama/docker swarm leader:
docker swarm init --advertise-addr [IP_PC_UTAMA] -
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 workerSetelah itu, salin output dari command tersebut.
*Output command tersebut kurang lebih adalah seperti berikutdocker swarm join --token SWMTKN-1-2ig... 192.168.11.74:2377 -
Selanjutnya, jalankan output command yang telah disalin tadi pada masing-masing pc/vm yang akan bergabung dalam jaringan menjadi docker swarm worker.
-
Pada pc/vm docker swarm leader, jalankan command berikut untuk mengidentifikasi pc/vm yang bergabung ke dalam docker swarm:
docker node ls -
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> -
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 -
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 -
Verifikasi status docker swarm dengan menjalankan command berikut pada pc/vm yang berperan sebagai docker swarm leader.
docker service ls -
Setelah jaringan berjalan, langkah selanjutnya adalah membuat channel, membuat peer dan orderer bergabung ke channel, dan melakukan deploy chaincode.
-
Untuk membuat channel dan membuat peer dan orderer bergabung ke channel, jalankan command berikut:
docker exec -it cli bashSetelah 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.blockSetelah berhasil, jangan keluar dari CLI terlebih dahulu.
-
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 -
Setelah blockchain berhasil di deploy, anda dapat menjalankan backend dan frontend. Panduan menjalankan backend dan front end dapat diakses pada masing-masing folder: