Confluence has been updated to version 6.15.9

This article shows how to install the Exalate app for Azure DevOps on the server using Docker.

You need to install the Docker. Check docker documentation for more details.

How to install Exalate for Azure DevOps

Check the release notes for the latest version.

1. Create a docker-compose.

Create a directory which would hold the docker-compose file: 

cd ~
mkdir exalate-azurenode

Create a docker-compose.yml file in it: 

cd exalate-azurenode
touch docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '2'
 
services:
  database:
    restart: unless-stopped
    image: postgres:9.4.25
    volumes:
      - ./persist/db:/var/lib/postgresql/data
      - ./createdb.sh:/docker-entrypoint-initdb.d/init-user-db.sh
    environment:
      - DB_NAME=azurenode
      - DB_USER=idalko
      - DB_PASS=idalko
    networks:
      - database
 
  azurenode:
    restart: unless-stopped
    ports:
      - 9000:9000
    image: idalko/azurenode:5.0.9     # <--- use the latest version https://hub.docker.com/r/idalko/azurenode
    depends_on:
      - database #wait for postgres to be started, not for ready
    volumes:
      - volazurenode:/opt/azurenode/data
    environment:
# Add your enviroment settings here
      - AZURENODE_PG_HOST=database
      - AZURENODE_PG_DB=azurenode
      - AZURENODE_PG_USER=idalko
      - AZURENODE_PG_PWD=idalko
      - AZURENODE_PORT=9000
    networks:
      - database
      - default
volumes:
  voldatabase:
  volazurenode:

 
networks:
  database:
    driver: bridge
  default:
    driver: bridge


EOF


Below you can find the environment variables used for the app container. All of them are optional, and in the given example, we've overridden AZURENODE_PG_DB, AZURENODE_PG_USER, and AZURENODE_PG_PWD just to show how to pass different credentials to the Exalate application.

 Full list of environment variables
Variable nameDefault valueExampleDescription
AZURENODE_PG_HOSTAZURENODE_PG_HOST=databaseAZURENODE_PG_HOST=db.acme.comtells the exalate application where is the postgres database to connect to hosted
AZURENODE_PG_DBAZURENODE_PG_DB=azurenodeAZURENODE_PG_DB=exalatetells the exalate application what is the postgres database name for the exalate application
AZURENODE_PG_USERAZURENODE_PG_USER=idalkoAZURENODE_PG_USER=exalatetells the exalate application what is the postgres database user name for the exalate application to perform queries with
AZURENODE_PG_PWDAZURENODE_PG_PWD=idalkoAZURENODE_PG_PWD=secrettells the exalate application what is the postgres database user's password for the exalate application to perform queries with
AZURENODE_PORTAZURENODE_PORT=9000AZURENODE_PORT=8080

tells what which is the port to start the exalate application on. Note that this is the port within the exalateazurenode_azurenode_1 container, thus if this variable is changed (for example to 80), the

    ports:
      - 9000:9000

should also be changed to

    ports:
      - 8080:8080


AZURENODE_SMTP_HOST_NAMEAZURENODE_SMTP_HOST_NAME=mail.server.comAZURENODE_SMTP_HOST_NAME=smtp.gmail.comis used to send email notifications about errors blocking synchronization
AZURENODE_SMTP_PORTAZURENODE_SMTP_PORT=465AZURENODE_SMTP_PORT=587is used to send email notifications about errors blocking synchronization
AZURENODE_SMTP_FROMAZURENODE_SMTP_FROM=admin@admin.comAZURENODE_SMTP_FROM=my.name@gmail.comis used to send email notifications about errors blocking synchronization
AZURENODE_SMTP_USERAZURENODE_SMTP_USER=adminAZURENODE_SMTP_USER=my.nameis used to send email notifications about errors blocking synchronization
AZURENODE_SMTP_PASSAZURENODE_SMTP_PASS=1234567AZURENODE_SMTP_PASS=secretis used to send email notifications about errors blocking synchronization
AZURENODE_SMTP_TLSAZURENODE_SMTP_TLS=trueAZURENODE_SMTP_TLS=trueis used to send email notifications about errors blocking synchronization. Can be set to false, but then the AZURENODE_SMTP_PORT should be set to the port, that accepts non-SSL and non-TLS connections


create createdb.sh (referenced from docker-compose.yml):

touch createdb.sh
cat > createdb.sh << 'EOCREATEDB'
#!/bin/bash

TEST=`psql -U postgres <<-EOSQL
   SELECT 1 FROM pg_database WHERE datname='$DB_NAME';
EOSQL`

echo "******CREATING DOCKER DATABASE******"
if [[ $TEST == "1" ]]; then
    # database exists
    # $? is 0
    exit 0
else
psql -U postgres <<-EOSQL
   CREATE ROLE $DB_USER WITH LOGIN ENCRYPTED PASSWORD '${DB_PASS}' SUPERUSER;
EOSQL

psql -U postgres <<-EOSQL
   CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UNICODE' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0;
EOSQL

psql -U postgres <<-EOSQL
   GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;
EOSQL
fi

echo ""
echo "******DOCKER DATABASE CREATED******"
EOCREATEDB


Ensure that the volumes are included in your backup strategy:

  • voldatabase
  • volazurenode

2. Start the application.

cd ~/exalate-azurenode
docker-compose up -d

How to manage the application on docker

Run queries to the application's database

cd ~/exalate-azurenode
docker exec -it exalateazurenode_database_1 bash
su postgres
psql -A $DB_NAME

You can find all tables using psql's \dt+ command: 

\dt+

All the postgres SQL queries are permitted

To exit the application's DB:

\q
# \q exits the psql 
exit
# exits the postgres user session
exit
# exits the exalateazurenode_database_1 bash session

Inspect the application's filesystem

cd ~/exalate-azurenode
docker exec -it exalateazurenode_azurenode_1 bash

Remove the application

cd ~/exalate-azurenode
docker-compose rm

Remove the application data

Danger zone - do this only if you wish to lose all the synchronization information, including the current synchronizations enqueued to be performed and synchronization status.

Be sure that the remote side (you exalate issues with) knows that you're stopping synchronization and are ready to handle synchronization errors.

cd ~/exalate-azurenode
# docker volume ls | grep exalateazurenode_vol |  awk '{ print $2 }' | xargs docker volume rm
docker volume rm exalateazurenode_voldatabase
docker volume rm exalateazurenode_volazurenode

Troubleshooting

Problems during the installation of the Exalate server for Azure DevOps

If you have problems during the installation of the Exalate app for Azure DevOps you can find logs describing possible problem inside /tmp.

The name for the file is generated randomly and automatically by the OS, but you can find the file by the creation date.

Problems while running the Exalate server for Azure DevOps

Logs will be generated under the directory: /opt/azurenode/data/logs.

Refer to these logs to get more information about possible problems and communicate with our support if you need any assistance.

What's next?

Verify Exalate for Azure DevOps


Support

Check our Support options.