158 lines
9.3 KiB
Markdown
158 lines
9.3 KiB
Markdown
|
|
# Pengembangan Sistem Audit Rekam Medis Menggunakan Teknologi Blockchain
|
||
|
|
|
||
|
|
Repositori ini berisi <i>source code</i> 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 <i>ordering service</i>.
|
||
|
|
- 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](/backend/blockchain/network/), ikuti instruksi di file `README.md` untuk konfigurasi jaringan Hyperledger Fabric.
|
||
|
|
3. Masuk ke direktori [chaincode](/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:
|
||
|
|
```bash
|
||
|
|
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:
|
||
|
|
```bash
|
||
|
|
docker swarm join-token worker
|
||
|
|
```
|
||
|
|
Setelah itu, salin output dari command tersebut.
|
||
|
|
<br>
|
||
|
|
\*Output command tersebut kurang lebih adalah seperti berikut
|
||
|
|
```bash
|
||
|
|
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:
|
||
|
|
```bash
|
||
|
|
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](/backend/blockchain/network/docker/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:
|
||
|
|
```bash
|
||
|
|
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.
|
||
|
|
```bash
|
||
|
|
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](/backend/blockchain/network/docker/docker-compose-swarm.yaml), kalau dalam repositori ini berada dalam folder [docker](/backend/blockchain/network/docker/).
|
||
|
|
|
||
|
|
```bash
|
||
|
|
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.
|
||
|
|
```bash
|
||
|
|
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:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker exec -it cli bash
|
||
|
|
```
|
||
|
|
|
||
|
|
Setelah masuk ke dalam CLI fabric, lanjutkan dengan menjalankan command berikut:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
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:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# 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:
|
||
|
|
- [/backend](/backend/api/README.md)
|
||
|
|
- [/frontend](/frontend/hospital-log/README.md)
|