Deploying FME Server with Docker Compose

As a multi-container application, FME Server supports deployment with Docker Compose. We recommend deploying FME Server this way only if you have worked with Docker before and understand its architecture.

About the Docker Compose File for FME Server

Services

The Compose file defines containers for each of the services that comprise FME Server. These service names can be specified to start, stop, scale, or run other commands on a specific container. They are also used as the host names for the containers to communicate with each other.

Service

Description

fmeservercore FME Server Core
fmeserverwebsocket WebSocket Server
fmeserverweb FME Server Web Services
fmeserverdb FME Server Database
fmeserverengine FME Engines
fmeserverqueue Job Queues
nginx Reverse proxy for FME Server; receives all web traffic and forwards it to the right container. Also responsible for handling the https connection.

See Also

Ports

The FME Server deployment maps three ports to the host machine:

Once FME Server is deployed, any requests to these ports on the host machine are routed to the proper container. This means you can access the FME Server Web User Interface on port 443 of your host machine even though the fmeserverweb service is actually running inside a container.

Volumes

The Compose file defines two main volumes:

  • Database - Where the fmeserverdb service stores its database files.
  • FME Server System Share - Actually comprised of several volumes that restrict access to certain folders from containers that do not require it.

Deploying and Administering FME Server

Download the Docker Compose File for FME Server

Docker containers are versioned using tags, which are specified after the image name with a colon. For example, safesoftware/fmeserver-engine:2018.1.1-20181120 has image name safesoftware/fmeserver-engine and tag 2018.1.1-20181120.

The following tags apply to different versions of FME Server:

  • A tag for each official major release. For example, 2017.0, 2017.1, and 2017.1.1.
  • A tag for the number of a specific build that is made public. For example, 18505.

If a hotfix is applied to a particular release or build, the tag is updated with a date. For example, 2018.1.1-20181120. We recommend downloading the file that is tagged with the latest date of the version you want.

Docker Compose files and Kubernetes quick start scripts are available at http://fme.ly/container-deployments for each available tag of the FME Server container deployment.

Working with the docker-compose Command

Use the docker-compose command to create, start, and stop FME Server. This command looks in the current directory for a file named docker-compose.yaml, and uses that for the definition of what to deploy. Alternatively, you can pass in a path to a compose file using the -f parameter. Example commands below assume that a docker-compose.yaml exists in the current working directory.

To Launch a New FME Server Stack

Use the up parameter to bring up a new set of containers as defined in docker-compose.yaml. Pass in the -d parameter to run in the background.

docker-compose up -d

Docker Compose creates the networks, volumes and containers defined in the Compose file. When complete, you can connect to the FME Server Web User Interface on https://localhost/. The administrator user name and password defaults to admin and admin, respectively. You can change this on the Users page.

To Stop a Running FME Server

docker-compose stop

To Start FME Server

docker-compose start

To Restart FME Server

docker-compose restart

To Specify Services in the Compose File

You can specify the Services defined in the Compose file to start and stop. For example, to stop just the FME Server Web Services container:

docker-compose stop fmeserverweb

To Scale FME Engines

You can scale the number of running engines by launching additional FME Engines containers. (For more information, see Configuring the Number of FME Engines to Start.)

Use the scale command to specify the number of FME Engines you want after the command executes. The following command scales the number of engines to 4:

docker-compose up --scale fmeserverengine=4

To Remove an FME Server Deployment

The down command destroys all containers, volumes and networks that were created in the stack. The -v parameter removes the volumes as well.

docker-compose down -v

Without the -v parameter, the Database and FME Server System Share volumes are not destroyed, and if the same stack were launched again using up, no data would be lost.

To Upgrade an FME Server Deployment

  1. Make a local backup of FME Server on the Backup & Restore page of the Web User Interface. Make sure this file is saved somewhere outside of the FME Server Resources folders, as those will be removed.
  2. Remove the containers, volumes and networks.
  3. docker-compose down -v

  4. Download the latest version of the containers.
  5. docker-compose pull

  6. Deploy the new version of the containers.
  7. docker-compose up -d

  8. Restore your backup on the Backup & Restore page of the Web User Interface by uploading the backup file you saved in step 1.

To Run Multiple FME Servers on One Machine

While not recommended for production machines, running multiple FME Server stacks on a single machine may be useful if you are prototyping or testing workflows on multiple versions of FME Server.

When running multiple FME Servers on the same machine, keep in mind the following:

  • When launching a stack, docker-compose prepends a project name, separated by an underscore, to all the containers, volumes and networks. The project name defaults to the name of the working directory when the stack is created. In the image below, the stack was launched in a directory named server, so server_ is prepended to all the resources created:
  • If the docker-compose.yml files for each deployment are not in directories with different names, you can pass in a project name when launching the stack with the -p flag:

    docker-compose -p projectname up -d

  • Since a few Ports are mapped to the host machine, the same port cannot be used twice. You must either make sure only one is started at a time, or change the port mappings. For example, to use port 8080 instead of 443, delete the redirect port 80:8080 from the fmeserverweb container with this command:
  • EXTERNALPORT=8080 docker-compose up -d

    This sets the external port on all relevant containers to 8080 and brings up FME Server.

To Disable https

To run FME Server without https:

  1. Remove the exposed port 80 from the nginx container in the Docker Compose file (line 80:8080).
  2. Start the FME Server with WEBPROTOCOL=http and EXTERNALPORT=80 variables. For example:
  3. WEBPROTOCOL=http EXTERNALPORT=80 docker-compose up -d

To Use a Custom TLS/SSL Certificate

WARNING: Ensure a copy of the certificate is stored in a different location before mounting it in the nginx container. The code in the container may have untested "edge" cases that overwrite the certificate.

To use a valid SSL certificate, make the following files available in a directory on the FME Server host:

  • nginx.crt: The certificate, including full certificate chain, if necessary.
  • nginx.key: Private key used to generate the certificate.

Once provided, pass in the location to the certificate and key by setting the SSLCERTLOCATION=/path/to/certificates variable.

See Also