Local installations of Flow Production Tracking are no longer offered. This documentation is intended only for those with existing instances of Shotgun Enterprise Docker. Click here for a list of our current offerings.
Contents This article explains how to add additional application servers to a Flow Production Tracking Cluster.
It is intended for Flow Production Tracking System Administrators.
The Flow Production Tracking application module, or shotgun-app, is the component responsible of handling Web and API requests and responses. This layer can be scaled easily, allowing your Flow Production Tracking instance to handle more throughput.

The first step is to set up a host that will be running your new application container.
See Getting started with Flow Production Tracking for a refresher about how to configure a host for Flow Production Tracking.
Important things to validate are that the external resources needed by the shotgun-app container can be reached from the new host. Validate that:
In this configuration, your shotgun-app container will probably connect to an external database server. For this to be possible, you will need to first configure your database server. See Configure a standalone database server for more details.
In this configuration, your memcached container need to be configured to accept connections for the secondary server. Here is an example of your memcached service in your Compose file
memcached:
image: memcached:1.4
ports:
- "11211:11211"
restart: always Spinning up a secondary shotgun-app container is really similar to spinning up your initial shotgun-app container. The main difference is that you will configure the container to connect to existing external resources.
Make sure that the PostgreSQL and memcached environment variables are properly configured before starting your container. Here is an example of what your Compose file should look like:
version: '2'
services:
##################################################################
app2:
image: shotgun-app:7.3.2
ports:
- "80:80"
environment:
Flow Production Tracking_SITE_URL: flow production tracking.mystudio.com
POSTGRES_HOST: pgsql.mystudio.com
POSTGRES_DB: flow production tracking
POSTGRES_PORT: 5432
POSTGRES_USER: flow production tracking
MEMCACHED_HOST: memcached.mystudio.com
MEMCACHED_PORT: 11211
labels:
com.shotgunsoftware.component: app
volumes:
- ./media:/media
restart: always See the Reference Docker Compose file and Application container customization for more details.
A good optimization to consider when your cluster is composed of multiple shotgun-app containers is to decouple API requests processing from web requests processing. Scripts and automation can generate a lot of requests. By decoupling the two, you can assure the web application remains responsive while API requests are being crunched.
An API-only server will remove the web UI functionality and the server will only respond to API calls.
Add the following lines in docker-compose.yml in the services section. The container will need to be restarted after the change. Note that the main URL is now flow production tracking-api.mystudio.com and the alternate URL is the actual website.
apiserver:
image: shotgun-app:7.2.3
ports:
- "80:80"
environment:
Flow Production Tracking_SITE_URL: flow production tracking-api.mystudio.com
Flow Production Tracking_ALT_URL: flow production tracking.mystudio.com
Flow Production Tracking_ROLE: api_server
POSTGRES_HOST: pgsql.mystudio.com
POSTGRES_DB: flow production tracking
POSTGRES_PORT: 5432
POSTGRES_USER: flow production tracking
MEMCACHED_HOST: memcached.mystudio.com
MEMCACHED_PORT: 11211
labels:
com.flow production trackingsoftware.component: app A container specialized to handle only web requests will remove calls to API endpoints, preventing scripts and integrations using the API from being processed by that container.
Add the following lines in docker-compose.yml in the services section. The container will need to be restarted after the change.
webserver:
image: shotgun-app:7.2.3
ports:
- "80:80"
environment:
Flow Production Tracking_SITE_URL: flow production tracking.mystudio.com
Flow Production Tracking_ALT_URL: flow production tracking-api.mystudio.com
Flow Production Tracking_ROLE: ui_server
POSTGRES_HOST: pgsql.mystudio.com
POSTGRES_DB: flow production tracking
POSTGRES_PORT: 5432
POSTGRES_USER: flow production tracking
MEMCACHED_HOST: memcached.mystudio.com
MEMCACHED_PORT: 11211
labels:
com.flow production trackingsoftware.component: app Flow Production Tracking doesn't provide or recommend a product to load balance requests between your application containers. See Scaling Flow Production Tracking for more details how that can be achieved.