diff --git a/examples/cluster/Makefile b/examples/cluster/Makefile index 2c23b6907c2..ec01ebaa58e 100644 --- a/examples/cluster/Makefile +++ b/examples/cluster/Makefile @@ -34,6 +34,7 @@ mspmap.cli := $(USERS_PATH)/Admin@org1.net RELEASE ?= latest CA_RELEASE ?= $(RELEASE) +COUCH_RELEASE ?= $(RELEASE) FABRIC_RELEASE ?= $(RELEASE) DOCKER_NS ?= hyperledger TLS ?= true @@ -116,6 +117,7 @@ build/docker-compose.yaml: compose/docker-compose.yaml.in | sed -e 's/_TLS_ENABLED_/${TLS}/g' \ | sed -e 's/_DOCKER_NS_/${DOCKER_NS}/g' \ | sed -e 's/_CA_RELEASE_/${CA_RELEASE}/g' \ + | sed -e 's/_COUCH_RELEASE_/${COUCH_RELEASE}/g' \ | sed -e 's/_FABRIC_RELEASE_/${FABRIC_RELEASE}/g' \ > $@ diff --git a/examples/cluster/compose/docker-compose.yaml.in b/examples/cluster/compose/docker-compose.yaml.in index e81e2e44ac4..31d46a78ab9 100644 --- a/examples/cluster/compose/docker-compose.yaml.in +++ b/examples/cluster/compose/docker-compose.yaml.in @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 # -version: '2' +version: '2.1' services: @@ -45,9 +45,21 @@ services: depends_on: - ca + couchdb-base: + image: _DOCKER_NS_/fabric-couchdb:_COUCH_RELEASE_ + logging: + <<: *logging + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:5984"] + interval: 10s + timeout: 10s + retries: 10 + peer-base: image: _DOCKER_NS_/fabric-peer:_FABRIC_RELEASE_ dns_search: . + logging: + <<: *logging environment: - CORE_PEER_TLS_ENABLED=_TLS_ENABLED_ - CORE_LOGGING_LEVEL=WARNING @@ -57,6 +69,11 @@ services: - /var/run/docker.sock:/var/run/docker.sock command: peer node start + couchdb1: + container_name: couchdb1 + extends: + service: couchdb-base + peer1: container_name: peer1 extends: @@ -66,12 +83,19 @@ services: - CORE_PEER_ADDRESS=peer1:7051 - CORE_PEER_GOSSIP_ENDPOINT=peer1:7051 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.net:7051 - logging: - <<: *logging + - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984 volumes: - ./nodes/peer1:/etc/hyperledger/fabric depends_on: - - orderer + orderer: + condition: service_started + couchdb1: + condition: service_healthy + + couchdb2: + container_name: couchdb2 + extends: + service: couchdb-base peer2: container_name: peer2 @@ -82,13 +106,21 @@ services: - CORE_PEER_ADDRESS=peer2:7051 - CORE_PEER_GOSSIP_ENDPOINT=peer2:7051 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2.org1.net:7051 - logging: - <<: *logging + - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984 volumes: - ./nodes/peer2:/etc/hyperledger/fabric depends_on: - - orderer - - peer1 + orderer: + condition: service_started + peer1: + condition: service_started + couchdb2: + condition: service_healthy + + couchdb3: + container_name: couchdb3 + extends: + service: couchdb-base peer3: container_name: peer3 @@ -99,13 +131,21 @@ services: - CORE_PEER_ADDRESS=peer3:7051 - CORE_PEER_GOSSIP_ENDPOINT=peer3:7051 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer3.org1.net:7051 - logging: - <<: *logging + - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984 volumes: - ./nodes/peer3:/etc/hyperledger/fabric depends_on: - - orderer - - peer1 + orderer: + condition: service_started + peer1: + condition: service_started + couchdb3: + condition: service_healthy + + couchdb4: + container_name: couchdb4 + extends: + service: couchdb-base peer4: container_name: peer4 @@ -116,13 +156,16 @@ services: - CORE_PEER_ADDRESS=peer4:7051 - CORE_PEER_GOSSIP_ENDPOINT=peer4:7051 - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer4.org1.net:7051 - logging: - <<: *logging + - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb4:5984 volumes: - ./nodes/peer4:/etc/hyperledger/fabric depends_on: - - orderer - - peer1 + orderer: + condition: service_started + peer1: + condition: service_started + couchdb4: + condition: service_healthy cli: image: _DOCKER_NS_/fabric-peer:_FABRIC_RELEASE_ diff --git a/examples/cluster/config/core.yaml b/examples/cluster/config/core.yaml index dbd5185b9cb..2c2a7fcb532 100644 --- a/examples/cluster/config/core.yaml +++ b/examples/cluster/config/core.yaml @@ -396,11 +396,28 @@ ledger: # stateDatabase - options are "goleveldb", "CouchDB" # goleveldb - default state database stored in goleveldb. # CouchDB - store state database in CouchDB - stateDatabase: goleveldb + stateDatabase: CouchDB couchDBConfig: + # It is recommended to run CouchDB on the same server as the peer, and + # not map the CouchDB container port to a server port in docker-compose. + # Otherwise proper security must be provided on the connection between + # CouchDB client (on the peer) and server. couchDBAddress: 127.0.0.1:5984 + # This username must have read and write authority on CouchDB username: + # The password is recommended to pass as an environment variable + # during start up (eg LEDGER_COUCHDBCONFIG_PASSWORD). + # If it is stored here, the file must be access control protected + # to prevent unintended users from discovering the password. password: + # Number of retries for CouchDB errors + maxRetries: 3 + # Number of retries for CouchDB errors during peer startup + maxRetriesOnStartup: 10 + # CouchDB request timeout (unit: duration, e.g. 20s) + requestTimeout: 35s + # Limit on the number of records to return per query + queryLimit: 10000 # historyDatabase - options are true or false # Indicates if the history of key updates should be stored in goleveldb