This repository contains the necessary files to deploy an MFT (Managed File Transfer) Server using Docker. Below is an explanation of the different components involved and how to structure an example Docker Compose file for deployment.
Please review the license terms prior to deployment
https://gallery.ecr.aws/redwood-software/redwood/mft_server
JSCAPE provides limited support for its products running in Docker containers.
- Functional product issues within the JSCAPE container itself
- Issues related to the container orchestration environment (e.g., Kubernetes, Docker Swarm), including:
- Orchestration platform configuration and management
- Container scheduling and networking
- You are responsible for configuring and maintaining the container orchestration environment
- Sample configurations are provided as a starting point, but they are not part of the core JSCAPE product
For support with JSCAPE-specific issues within a container, contact our support team with details of the problem and the Docker image used.
Run the Docker Compose: Find a working directory on your server where you'd like to configure the next items. For our purposes here I'll use a working directory called:
/home/user/mft/
-
Download the docker-compose.yaml (for Standalone) or postgres.compose.yaml (for JSCAPE with Postgres) file into your working directory using one of the following commands, or copy from the repository above:
Standalone:
wget -O docker-compose.yaml https://raw.githubusercontent.com/RedwoodSoftware/MFT_Server_Docker/refs/heads/main/docker-compose.yaml
JSCAPE with Postgres:
wget -O docker-compose.yaml https://raw.githubusercontent.com/RedwoodSoftware/MFT_Server_Docker/refs/heads/main/postgres.compose.yaml
-
Download a
.envfile template to start with using one of the following commands, or copy from the repository above:Standalone:
wget -O .env https://raw.githubusercontent.com/RedwoodSoftware/MFT_Server_Docker/refs/heads/2025.1.0.523/.env.example
JSCAPE with Postgres:
wget -O .env https://raw.githubusercontent.com/RedwoodSoftware/MFT_Server_Docker/refs/heads/2025.1.0.523/.env.postgres.example
-
Ensure that your license.lic file is in the working directory as well so that you have 3 files present:
/home/user/mft/ ├── .env ├── docker-compose.yaml └── license.lic -
Adjust .env values as needed. This generally includes passwords for your connections for example and should be updated with secure values.
-
Run the command below to startup the resources and deploy MFT Server
docker compose up -d
This will start the MFT Server with the specified configuration and make it accessible on the defined ports.
| Variable | Description | Default | Example | Notes |
|---|---|---|---|---|
JSCAPE_ADMIN_USER |
Username for initial MFT Server administrator account | None | "admin" |
Created during initial deployment. Optional if database already initialized. |
JSCAPE_ADMIN_PASSWORD |
Password for initial MFT Server administrator account | None | "SecureAdminPassword123!" |
Set in .env file for security; reference as ${JSCAPE_ADMIN_PASSWORD} in docker-compose. Required for initial deployment. |
JDBC_CONNECTION_STRING |
JDBC connection string for backend database | "" (empty) |
"jdbc:postgresql://postgres:5432/mft_server" |
Target database must exist before deployment. Other JDBC compliant flags are supported. Format: jdbc:<driver>://<host>:<port>/<database> |
JDBC_USER |
Username for database access | "" (empty) |
"jscape" |
User must have privileges to create/modify tables in target database. |
JDBC_PASSWORD |
Password for database user | None | "SecureDBPassword456!" |
Set in .env file for security; reference as ${JDBC_PASSWORD} in docker-compose. Required when using external database. |
| Variable | Description | Default | Example | Notes |
|---|---|---|---|---|
SERVER_MEMORY |
Memory in GB allocated to JVM | "4" |
"4", "8", "16" |
Sets JVM -Xmx parameter. Ensure container has sufficient resources. |
PREV_VERSION |
Previous JSCAPE version for upgrades | "" (empty) |
"2024.3.1.512" |
Format: YYYY.X.Y.BUILD. Only needed during upgrades. Leave empty for new deployments. |
JSCAPE_MANAGEMENT_HTTP_PORT |
HTTP port for admin interface | "11880" |
"11880", "8080" |
Must match port mapping in docker-compose. Used by health check. |
JSCAPE_MANAGEMENT_HTTPS_PORT |
HTTPS port for admin interface | "11443" |
"11443", "8443" |
Must match port mapping in docker-compose. Used by health check. |
FIPS_VERSION |
Enable FIPS compliance mode | "" (empty) |
"FIPS-140-2", "FIPS-140-3" |
Replaces Bouncy Castle libraries with FIPS-compliant versions. Empty disables FIPS. |
MAX_ATTEMPTS_STARTUP |
Max startup verification attempts | "3" |
"5", "10" |
Number of times to check if management port is listening (10s between attempts). |
DB_SYNC_PERIOD |
Database sync period in seconds | "30" |
"60", "120" |
Frequency of config synchronization with database. Lower = faster propagation, higher = less DB load. |
LICENSE_URL |
URL to download license file | None | "https://example.com/license" |
Alternative to volume-mounted license. Volume mount takes precedence if both provided. |
LICENSE_URL_PASSWORD |
Password for protected license URL | None | "SuperSecretPassword" |
Required when downloading a protected license via LICENSE_URL. Set in .env and reference as ${LICENSE_URL_PASSWORD} in docker-compose. |
Standalone Deployment (.env file):
JSCAPE_ADMIN_PASSWORD=SecureAdminPassword123!
JDBC_PASSWORD=SecureDBPassword456!PostgreSQL Deployment (.env file):
JSCAPE_ADMIN_PASSWORD=SecureAdminPassword123!
JDBC_PASSWORD=SecureDBPassword456!
POSTGRES_PASSWORD=SecurePostgresPassword789!FIPS-Compliant Deployment (docker-compose.yaml):
environment:
JSCAPE_ADMIN_USER: "admin"
JSCAPE_ADMIN_PASSWORD: ${JSCAPE_ADMIN_PASSWORD}
SERVER_MEMORY: "8"
FIPS_VERSION: "FIPS-140-3"
MAX_ATTEMPTS_STARTUP: "5"Upgrade Scenario (docker-compose.yaml):
environment:
JSCAPE_ADMIN_USER: "admin"
JSCAPE_ADMIN_PASSWORD: ${JSCAPE_ADMIN_PASSWORD}
JDBC_CONNECTION_STRING: "jdbc:postgresql://postgres:5432/mft_server"
JDBC_USER: "jscape"
JDBC_PASSWORD: ${JDBC_PASSWORD}
SERVER_MEMORY: "4"
PREV_VERSION: "2024.3.1.512"The MFT Server image defines the environment baseline configuration
- Base image is
alpine:3.22.2. - Defining environment variables for configuration.
- Installing necessary packages such as JRE, curl, unzip, and others.
- Defining volumes for persistent storage.
- Setting a health check to ensure the server is running on the administrative port/s.
The run.sh script is the entry point for the Docker container. It performs the following tasks:
- Configures the database connection.
- Initializes and/or upgrades the database schema.
- Sets server memory.
- Adds a default administrator if not present.
- Configures command-line tools and the Management UI.
- Generates a server key if not present.
- Starts the main server process.
- allows running of pre and post custom scripts
- allows toggling of FIPS compliance for 140-2 and 140-3 based on environment variables