Note: Before completing this guide, make sure you have completed the general onboarding guide in the base mojaloop repository.
- Prerequisites
- Installing and Building
- Running Locally
- Running Inside Docker
- Testing
- Common Errors/FAQs
If you have followed the general onboarding guide, you should already have the following cli tools installed:
brew(macOS), [todo: windows package manager]curl,wgetdocker+docker-composenode,npmand (optionally)nvm
In addition to the above cli tools, you will need to install the following to build and run the ml-api-adapter:
Firstly, clone your fork of the ml-api-adapter onto your local machine:
git clone https://github.com/<your_username>/ml-api-adapter.gitThen cd into the directory and install the node modules:
cd ml-api-adapter
npm installIf you run into problems running
npm install, make sure to check out the Common Errors/FAQs below.
In this method, we will run all of the core dependencies (kafka, mysql and mockserver) inside of docker containers, while running the central-ledger server on your local machine.
Alternatively, you can run the
ml-api-adapterinside ofdocker-composewith the rest of the dependencies to make the setup a little easier: Running Inside Docker.
Note: mockserver below is optional. Include it if you require its use.
# start all back-end dependencies in Docker
docker-compose up -d mysql kafka simulator mockserver central-ledgerThis will do the following:
docker pulldown any dependencies defined in thedocker-compose.ymlfile, and the services (mysql, kafka, etc) specified in the above command- run all of the containers together
- ensure that all dependencies (i.e. mysql, kafka) have started for each services.
# start the server
npm run startUpon running npm run start, your output should look similar to:
> @mojaloop/ml-api-adapter@4.4.1 start /fullpath/to/ml-api-adapter
> run-p start:api
> @mojaloop/ml-api-adapter@4.4.1 start:api /fullpath/to/ml-api-adapter
> node src/api/index.js
http://hostname.local:4000
GET / Metadata
GET /documentation
GET /health Status of adapter
GET /metrics Prometheus metrics endpoint
GET /swagger.json
GET /swaggerui/{path*}
GET /swaggerui/extend.js
POST /transfers Transfer API.
GET /transfers/{id} Get a transfer by Id
PUT /transfers/{id} Fulfil a transfer
2019-02-01T13:30:30.454Z - info: participantEndpointCache::initializeCache::start
2019-02-01T13:30:30.456Z - info: participantEndpointCache::initializeCache::Cache initialized successfully
2019-02-01T13:30:30.457Z - info: Notification::startConsumer
2019-02-01T13:30:30.458Z - info: Notification::startConsumer - starting Consumer for topicNames: [topic-notification-event]docker-compose logs -fWe use docker-compose to manage and run the ml-api-adapter along with its dependencies with one command.
# start all services in Docker
docker-compose up -dThis will do the following:
docker pulldown any dependencies defined in thedocker-compose.ymlfiledocker buildtheml-api-adapterimage based on theDockerfiledefined in this repo- run all of the containers together
- ensure that all dependencies (i.e. mysql, kafka) have started for each services.
docker-compose logs -fYou can run docker-compose in 'detached' mode as follows:
npm run docker:up -- -dAnd then attach to the logs with:
docker-compose logs -fWhen you're done, don't forget to stop your containers however:
npm run docker:stopWe use npm scripts as a common entrypoint for running the tests.
Note: Ensure that you stop all Docker services (
docker-compose stop) prior to running the below commands.
# unit tests:
npm run test:unit
# integration tests
npm run test:integration
# functional tests
npm run test:functional
# check test coverage
npm run test:coverage- Follow the steps as described in
5.2. Verifying Mojaloop Deploymentfrom the Deployment Guide. - Clone the Postman Collection repo:
# Clone Mojaloop Postman repo git clone https://github.com/mojaloop/postman.git # Switch to postman directory cd ./postman
- Refer to 4. Support Scripts for Docker-compose of the readme for additional prerequisites.
Refer to section 4. Support Scripts for Docker-compose of the readme.
Refer to section 4. Support Scripts for Docker-compose of the readme.
Resolved by installing v2.0.3 npm install sodium@2.0.3
Undefined symbols for architecture x86_64:
"_CRYPTO_cleanup_all_ex_data", referenced from:
_rd_kafka_transport_ssl_term in rdkafka_transport.o
"_CRYPTO_num_locks", referenced from:
........
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Resolved by installing openssl brew install openssl and then running:
export CFLAGS=-I/usr/local/opt/openssl/include
export LDFLAGS=-L/usr/local/opt/openssl/lib
npm installShutdown all docker images, and modify the following line in the docker-compose: - TRANSFERS_ENDPOINT=http://host.docker.internal:3000
simulator:
image: mojaloop/simulator:latest
container_name: ml_simulator
ports:
- "8444:8444"
environment:
- LOG_LEVEL=info
- TRANSFERS_ENDPOINT=http://host.docker.internal:3000
- TRANSFERS_FULFIL_RESPONSE_DISABLED=false
networks:
- ml-mojaloop-net
healthcheck:
test: ["CMD", "sh", "-c" ,"apk --no-cache add curl", ";", "curl", "http://localhost:8444/health"]
timeout: 20s
retries: 10
interval: 30sReplace host.docker.internal with 172.17.0.1 as per the following example:
simulator:
image: mojaloop/simulator:latest
container_name: ml_simulator
ports:
- "8444:8444"
environment:
- LOG_LEVEL=info
- TRANSFERS_ENDPOINT=http://172.17.0.1:3000
- TRANSFERS_FULFIL_RESPONSE_DISABLED=false
networks:
- ml-mojaloop-net
healthcheck:
test: ["CMD", "sh", "-c" ,"apk --no-cache add curl", ";", "curl", "http://localhost:8444/health"]
timeout: 20s
retries: 10
interval: 30sNote: This will ensure that the simulator can send requests to the host machine. Refer to the following issue for more information or if the above ip-address is not working for you: docker/for-linux#264.
Restart all docker images.