Linux-specific Architecture Specifications

Linux Single-server vs Multi-server Configuration

For detailed images of various Linux server configurations, see Architectural Diagrams.

Docker

EnterWorks architecture uses Docker to facilitate scalability across multiple servers. EnterWorks components may run in containers controlled by a Docker swarm manager. PostgreSQL can run in a Docker container or on a separate server.

EnterWorks uses shared volumes to move data between Docker containers. Docker is configured to use both a Docker bridge network and Docker network overlays.

EnterWorks uses Docker to communicate with EPX. This is similar to opening a port through a firewall to support communications among different server environments.

When a process in a container references a process in another container, the best practice is to use the target container’s name rather than the name or IP address of the server running the target container. This is because when a container or VM is restarted, it may be assigned a new local or dynamic IP address.

Anytime a container is restarted, restart all containers and services. Failing to restart all containers and services could result in broken communication links.

If a resource is being accessed that is not in a container, use the static IP address or DNS resolved address of the server the resource is running on. If the server does not have a static IP address or DNS resolved address, it must be referenced by a dynamic IP address and any references to the resource must be updated anytime the server is restarted.

Note that Docker includes everything under its context (about 130MB) for each image build, so if there is a random file that is 10GB located in the context, the Docker image becomes 10GB instead of 130mb. If there are files that do not need to be in the Docker context for each build, include their paths inside the .dockerignore file to reduce the size of the image.

Installing EnterWorks requires using basic Docker commands and some advanced shell scripting commands. Docker and Linux commands are used to manage Docker containers.

The installation of EnterWorks on a Linux OS differs from EnterWorks installed on a Windows OS in that EPX uses the EPIM database to store some work flow data.

Docker’s default logging mechanism is used for standard out (stdout). Therefore, any output to stdout by any process can be accessed with the docker container logs command.

Allocation of Services to Containers

EnterWorks components are allocated to containers as follows:

  • EPIM is comprised of two containers:
    • Tomcat
    • JBoss
  • Slaves uses containers as defined by the Solution Architecture.
  • EPX Workflow is comprised of two containers:
    • Tomcat
    • JBoss
  • 3rd Party servers that may run in individual docker containers include:
    • RabbitMQ
    • Elasticsearch
    • MongoDB
    • PostgreSQL
  • All Go Language based microservices will run in a docker container.
  • The PostgreSQL databases and the MongoDB database run in separate containers.
  • RabbitMQ and Elasticsearch run in separate containers.

Referencing Services

The Docker swarm manager assigns each container in the internal Docker network a unique identifier, either the IP address of the server it is running on or a different unique identifier. Containers use this identifier to reference other containers. This allows each server to readily communicate to the other server end-points.

When a service in a container references a service in another container, the best practice is to use the target container’s name rather than the name or IP address of the server running the target container. This is because when a container or VM is restarted, it may be assigned a new local or dynamic IP address.

If a resource is being accessed that is not in a container, use the static IP address or DNS resolved address of the server the resource is running on. If the server does not have a static IP address or DNS resolved address, it must be referenced by a dynamic IP address and any references to the resource must be updated anytime the server is restarted.

Linux File Maps

EnterWorks File Structure

EnterWorks File Structure

File Path

Notes

/enterworks-root/software

The folder where installation files will be copied to and then expanded from.

/opt/enable/backup

Directory containing all archived files from the /opt/enable/enterworks-root folder. This folder is deliberately not under /opt/enable/enterworks-root to allow /opt/enable/enterworks-root to be searched without finding the backup files as well as the current files.

/opt/enable/enterworks-root

The main Enable folder. The files it contains includes scripts for installing and patching EnterWorks, configuration files, log files for Docker containers, and shared folders for files that need to be shared across containers.

/enterworks-root/working/{_ <temp files created during the install> _}

Temporary files.

/enterworks-root/software/micro-svc/

The install folders for Linux-based microservices.

/enterworks-root/enterworks/{custom, logs, shared, Utilities}

Similar to the enterworks folder in windows, logs, custom jars, html, shared{damroot…}, etc.

Configuration Files

Configuration Files

File Path

Notes

/enterworks-root/config/EnterworksInstall.properties

Configuration file from the tar ball. It is tokenized by the scripts and used to configure EPIM. Installation properties can be edited here directly.

/enterworks-root/docker/epx/EnterworksInstall.properties

EPX configuration files. It is tokenized by the scripts and used to configure EPX. Installation properties can be edited here directly.

/enterworks-root/config/EnterworksInstall.replaced

File containing the replaced values in the properties file, after scripts run.

env.original

Main build data, with placeholders that are replaced during installation with actual runtime values and written to the file: env.configure

env.configure

Used by the scripts to configure enable2020 microservices.