hospital-log/README.md

158 lines
9.3 KiB
Markdown
Raw Normal View History

# 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)