Ada Installation Guide (Linux) - Version 0.10.1

(Expected time: 30-45 mins)

 

0. Preparation

Recommended OS: Ubuntu 16.04/18.04

Recommended resources:

 

1. Java 1.8

sudo apt install openjdk-8-jdk

 

2. Mongo DB

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org=4.0.10 mongodb-org-server=4.0.10 mongodb-org-shell=4.0.10 mongodb-org-mongos=4.0.10 mongodb-org-tools=4.0.10
  ...
  wiredTiger:
    engineConfig:
      cacheSizeGB: 5
      journalCompressor: none
    collectionConfig:
      blockCompressor: snappy
mongodb    soft    nofile          1625538
mongodb    hard    nofile          1625538
mongodb    soft    nopro           64000
mongodb    hard    nopro           64000
mongodb    soft    memlock         unlimited
mongodb    hard    memlock         unlimited
mongodb    soft    fsize           unlimited
mongodb    hard    fsize           unlimited
mongodb    soft    cpu             unlimited
mongodb    hard    cpu             unlimited
mongodb    soft    as              unlimited
mongodb    hard    as              unlimited
[Service]

LimitNOFILE=1625538
LimitNPROC=64000
LimitFSIZE=infinity
LimitCPU=infinity
LimitAS=infinity
sudo systemctl daemon-reload
sudo service mongod start

 

sudo apt-get update
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.16.deb
sudo dpkg -i elasticsearch-5.6.16.deb
sudo systemctl enable elasticsearch.service
  cluster.name: ada-cluster       (if not changed "elasticsearch" is used by default)
  bootstrap.memory_lock: true
  network.host: x.x.x.x           (set to a non-localhost ip address if the db should be accessible within a network)
  thread_pool:
      index:
          queue_size: 8000
      search:
          queue_size: 8000 
      bulk:
          queue_size: 500
  indices.query.bool.max_clause_count: 4096
path.data: /your_custom_path

(Note that you need to make your_custom_path writeable for the elasticsearch user)

elasticsearch    soft    nofile          1625538
elasticsearch    hard    nofile          1625538
elasticsearch    soft    memlock         unlimited
elasticsearch    hard    memlock         unlimited
 sudo wget https://github.com/lmenezes/cerebro/releases/download/v0.8.3/cerebro-0.8.3.zip
 sudo unzip cerebro-0.8.3.zip

 

4. Application Server (Netty)

wget https://webdav-r3lab.uni.lu/public/ada-artifacts/ada-web-0.10.x/ada-web-0.10.1.zip
sudo apt-get install unzip
unzip ada-web-0.10.1.zip
cd ada-web-0.10.1/bin
mkdir ada_temp

1 . Mongo

if not password-protected (default) set ADA_MONGO_DB_URI

export ADA_MONGO_DB_URI="mongodb://localhost:27017/ada?rm.nbChannelsPerNode=20"

if password-protected set the following variables

export ADA_MONGO_DB_HOST=x.x.x.x:27017
export ADA_MONGO_DB_NAME="ada"
export ADA_MONGO_DB_USERNAME="xxx_user"
export ADA_MONGO_DB_PASSWORD="XXX"

2 . Elastic Search

if non-localhost server is used set ADA_ELASTIC_DB_HOST

export ADA_ELASTIC_DB_HOST=x.x.x.x:9200

Also set the custom ES cluster name if it was configured in Section 3 (see /etc/elasticsearch/elasticsearch.yml)

export ADA_ELASTIC_DB_CLUSTER_NAME="ada-cluster"

3 . General Setting

project {
  name = "Ultimate"
  url = "https://ada-discovery.github.io"
  logo = "images/logos/ada_logo_v4.png"
}

datasetimport.import.folder = "/custom_path"
assets.external_paths = ["/folder_in_classpath"]

(Warning: Never set any of the folders to “/” since this would make all the classpath files, including common configuration files, accessible from outside as application assets. An example: https://localhost:8080/assets/application.conf)

Now you can use the logo images placed in your folder_in_classpath by adapting custom.conf for instance as

project {
  ....
  logo = "syscid_large.png"
}

footer.logos = [
  {url: "https://www.aetionomy.eu", logo: "aetionomy.png", height: 150},
  {url: "https://www.efpia.eu", logo: "efpia_logo.png"}
]

(Note an optional height attribute)

./runme

(if cannot be executed chmod +x runme might be needed)

http://localhost:8080
http://localhost:8080/loginAdmin

Homepage example:

<p>
	Ada provides key infrastructure for secured integration, visualization,
	and analysis of heterogeneous clinical and experimental data generated
	during the <a href="http://www.project_url_to_set.com">My TODO project</a>.
</p>
<p>
	My TODO research project focuses on improving ...
</p>
<button type="button" class="btn btn-default btn-sm" data-toggle="collapse" data-target="#more-info">Read More</button>
<div id="more-info" class="collapse">
	<blockquote>
		<h4>The platform currently ...</h4>
	</blockquote>
</div>
<br/>

Contact example:

<strong>Dr. John Snow</strong></br>
Winterfell Team</br>
Westeros Centre For Systems Biomedicine (WCSB)</br>
University of Seven Kingdoms</br></br>
<i class="glyphicon glyphicon-envelope"></i>
<a href="mailto:john.snow@north.edu?Subject=Ada Question">john.snow@north.edu</a><br>
<i class="glyphicon glyphicon-chevron-right"></i>
<a target="_blank" href="http://www.north.edu/wcsb">www.north.edu/wcsb</a><br>

Links example:

<li><a href="https://www.project-redcap.org">RedCap</a></li>
<li><a href="https://www.synapse.org">Synapse</a></li>
<li role="separator" class="divider"></li>
<li><a href="https://uni.lu/lcsb">LCSB Home</a></li>

 

5. OpenID

oidc {
  clientId = "ADA_OIDC_CLIENT_ID"
  secret = "ADA_OIDC_SECRET"
  discoveryUrl = "ADA_OIDC_DISCOVERY_URL"
  adaBaseUrl = "ADA_BASE_URL"
  tokenEndPointUrl = "ADA_OIDC_TOKEN_ENDPOINT_URL"
  logoutUrl = "ADA_OIDC_LOGOUT_URL"

  returnAttributeIdName = "sub"
  accessTokenName = "access_token"
  refreshTokenName = "refresh_token"
  rolesAttributeName = "roles"
  realmAccessAttribute = "realm_access"
  resourceAccessAttribute = "resource_access"
  roleAdminName = "ROLE_ADA_ADMIN"
  dataSetGlobalIdPrefix = "DATASET_GLOBAL_ID_PREFIX"
  dataSetGlobalIdRegex = "DATASET_GLOBAL_ID_REGEX"
  clientAuthenticationMethod = "client_secret_post"    // optional
  preferredJwsAlgorithm = "RS256"                      // optional
//  responseType = "code" // id_token token            // optional
//  scope = "openid email profile phone"               // optional
//  useNonce = "true"                                  // optional
//  enableCentralLogout = false                        // optional - true by default
}

where some parameters must be substituted with a proper value:

The rest of the configuration should remain unchanged using Keycloak.