Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Monolith can be deployed on-premises and in your IT environment
These are the basic requirements for hosted Monolith on-premises
Docker or Docker Desktop is required for Monolith on-premises deployments. Installation instructions can be found here.
The following hardware is required to properly run the Monolith API backend within Docker:
Microsoft Windows 10/11, MacOS, or Ubuntu 20 system
4GB of RAM
2-core CPU
At least 100 GB of storage (>500 GB recommended)
Monolith is not currently supported for Windows Server operating systems. This is due to lack of support for Docker installation on Windows Server.
To enable Monolith’s email capabilities, an email account is required with SMTP credentials:
SMTP host
SMTP port
SMTP user
SMTP password
These values are supplied to the Monolith API server/Docker container at run-time.
If you want to store Monolith files in AWS S3, you will need to have the following to integrate S3:
AWS Access Key
AWS Secret Key
AWS Region & Endpoint
Once you have purchased Monolith and are ready to deploy - you will be provided with a Monolith On-premises deployment package. This package will contain configuration files necessary to run the deployment.
The package will contain the following items:
.env
This is an environment file that will contain variables that are injected into your Monolith deployment at run time. This is where your licensing information will be location along with other settings.
docker-compose.yml
This is a Docker deployment configuration file. This file dictates how the various Monolith containers will be built and deployed.
This allows you to use a pre-defined configuration so that you don't need to build the Monolith Docker deployment from scratch.
init folder
This contains additional configuration files needed for successful deployment.
This is an environment variables file that is loaded into the Monolith Docker deployment at build/run time. These values determine various setup options and licensing information for your Monolith deployment.
The values are typically set for you when you purchase Monolith.
Make sure the file name is changed to ".env" from "env.txt".
This is a license key that allows for your Monolith deployment to get licensing information from our online license server. Using this value ensures that your Monolith deployment always has up to date license info.
This key will be provided to you upon purchase.
This is a signed token that contains licensing information for your Monolith purchase. This can be used to utilize cached license info without needed to query our licensing server for license info.
This is a good option for Monolith deployments that exist in air-gapped environments.
If this value is provided, Monolith will use this instead of the license key value.
This should be a long alphanumeric string. This value is used for various cryptographic operations related to access tokens, encryption, and session management.
This should be a long alphanumeric string. This value is used for various cryptographic operations related to access tokens, encryption, and session management.
This is the name of the MySQL schema that the Monolith API server should connect to.
This is the domain or IP address of the MySQL database host that the Monolith API server should connect to.
This is the MySQL user name that should be used for database connections.
NOTE: This should only be root if you are using the default MySQL container. If using an external MySQL database, you should provision a user account other than root to use here.
The port that should be used for database connections. The default MySQL port is 3306.
MySQL password used to establish database connections.
First name of initial Monolith user. Only required for first time setup/deployment.
Last name of initial Monolith user. Only required for first time setup/deployment.
Email of initial Monolith user. Only required for first time setup/deployment.
Password of initial Monolith user - this will be used for firs time login to Monolith. Only required for first time setup/deployment.
Initial tenant name for your Relay deployment. Only required for first time setup/deployment.
Organization name for your Relay deployment. Only required for first time setup/deployment.
URL slug for your Relay deployment. Only required for first time setup/deployment.
Initial tenant email for your Relay deployment. Only required for first time setup/deployment.
The Monolith API server runs in "cluster" mode. This allows multiple instances to run at the same time, which increases scalability. This value defaults to 1 and is disabled by default. You will likely not need to use this value, but contact support if you think this is needed.
This value determines whether Monolith will use a local file system or Amazon S3 to store Monolith files. Allowed values are "S3" or "Local". The default value is "Local". If you set this to "S3", you will also need to set the S3 access key values.
This value configures Monolith to use the correct AWS region with your S3 bucket.
The S3 bucket where you would like to store files uploaded to Relay.
The S3 bucket where you would like to store files uploaded to Monolith.
AWS access key to use S3 APIs for file storage.
AWS secret key to use S3 APIs for file storage.
Email host domain to enable email capabilities in Monolith.
Email port to enable email capabilities in Monolith. This value is typically 587.
User value to enable email capabilities in Monolith. May not be required if you are using an SMTP relay.
User password to enable email capabilities in Monolith. May not be required if using an SMTP relay.
How to manage your on-premises licensing for Monolith
Currently, your on-premises license to Monolith is managed within the ".env" file that is within your Monolith package deployment folder.
There are two values within the ".env" file that related to your Monolith License:
When the Monolith server starts up, it derives your license from one of these two values.
When both values are present, the MONOLITH_LICENSE_TOKEN value takes precedence.
The Monolith license token is a long string that is a securely signed token that contains your licensing information.
This method works in both online and offline environments and does not use the internet to operate.
The Monolith server derives your license details from this token.
This is the preferred method, because it does not rely on our licensing server to work and will keep your Monolith deployment operational even during internet outages.
A license token must be provided to you from Monolith support. These tokens expire on your annual renewal date and must be refreshed each year. Contact support@monolithforensics.com to get a new token.
The Monolith license key is a short, unique string that is associated with your Monolith customer account. Monolith uses this value to retrieve your licensing information from our online licensing server on the internet.
This licensing method will not work in air-gapped environments
To update your license, simply replace the License key or token value in your ".env" file with a new one and restart your Monolith Docker deployment.
You can restart your Monolith Docker deployment with the following commands:
Be sure to run these commands from the same directory as your ".env" file and "docker-compose.yml" file
Docker configuration and deployment file
This file is used to define the deployment options for the various Docker containers that make up the Monolith on-premises deployment.
Unless you require an advanced deployment, you will not need to modify this file.
Note: Indentation matters in this file - if the indentation is not set properly, you may see errors when trying to deploy Monolith.
This file is used with the following commands to build, re-build, and remove the containers that run Monolith.
Monolith utilizes Docker for on-premises deployments
Docker is a platform that uses OS-level virtualization to deliver software in packages called "containers". Docker is used to deploy, manage, and run containers within a variety of environments.
Monolith is deployed in on-premises environments using containers and Docker is recommended as the container management system to run and manage Monolith.
Monolith runs in a server-client configuration where users access and manage data via the Monolith desktop client or web application. A Monolith API server runs on a centralized host and handles HTTP requests from the desktop clients and web application. The API server communicates with a database to create, update, delete, and read data from the database.
The image above illustrates the basic setup of containers within an on-premises deployment. The containerized nature of Monolith allows for flexible and scalable on-premises deployment options.
This is a web server container that handles incoming requests from clients and proxies traffic to one of 3 containers: Monolith Web App,Monolith API, or the Relay App. This container can be configured to include custom domain TLS certificates.
This is the Monolith web application that can be access via a web browser. To access this application, you just need to navigate to the host system IP address or assigned domain name in a web browser - Ex: https://192.168.1.12
This container hosts an API server that can send authenticated requests for data to and from the Monolith and Relay web applications. This container connects directly to the MySQL server to store data and a file system to store files uploaded to Monolith.
The Relay app container runs the Relay application. Relay is a web-based request system that allows non-monolith users to submit requests for forensic services.
This container runs a MySQL database that stores data accessed and managed by users of Monolith and Relay. The MySQL database does not have to be a container inside Docker. You can use an external hosted MySQL database if you wish.
This is not a container, it represents your chosen file system component to store files that are uploaded to Monolith and Relay. This can be the file system on the host system, AWS S3 object storage, or a network file share.
Watchtower is an optional container that manages automatic updates for the other containers. Watchtower checks for container updates every 30 seconds. When an update is available, Watchtower downloads the new container images and replaces the current containers with new containers built from the updates container images.
These are the documented methods of installation for Docker
To Install Docker on Windows, you need to install Docker Desktop for Windows. This installer can be downloaded from here:
To deploy Monolith on Windows, you will need to install the WSL package for Windows. This allows Windows to run Linux containers. During the Docker Desktop install, Docker typically prompts you to install this. If not, here is a direct link to download and install WSL:
To Install Docker on MacOS, you need to install Docker Desktop for MacOS. This installer can be downloaded from here:
To install Docker on a Linux OS, refer to the following Docker documentation for Linux installations:
Deploying Monolith with the default configuration is a simple matter.
Install Docker -
Pick a location to store your on-premises package files.
Open a command terminal.
Navigate to the location of your Monolith On-premises package files.
This is the folder that contains the .env and docker-compose.yml files.
Run the following command to download, deploy, and run the Monolith containers referenced in the docker-compose.yml file:
docker compose up -d
This will download the Monolith container images which may take a few minutes.
Once downloaded, the containers will launch and build the initial Monolith system.
You can then navigate to Monolith in a web browser using the IP address of the host system running Monolith:
https://{host_server_ip}
To remove the docker containers, you can use the following command:
docker compose down
NOTE: If deploying Monolith inside of a virtual machine, you must enable "nested virtualization" for Docker to work.
These commands can be used together to conduct a "hard" restart of Monolith.
Restarting Monolith in this way does not cause any data loss and should be used when you need to update your licensing from a license token.
Additional Docker commands can be reviewed on Dockers official documentation pages:
https://docs.docker.com/engine/reference/run/
Additional Docker compose commands can be reviewed on Docker's official documentations pages:
Monolith On-premises deployments do not include a native backup solution.
The customer is responsible for creating and managing backups for data stored in the Monolith deployment.
The customer should set up a backup system that creates backups of the "data" folder maintained by the Monolith server. A backup solution for the MySQL Monolith database should also be implemented. The MySQL backup process should create something similar to SQL dumps of the databases stored by Monolith in MySQL.
This section will cover restoring a database backup of your Monolith MySQL database.
This restore process assumes you have previously created a SQL dump of your Monlith databse from MySQL. A SQL dump file is a plain text file that contains your database data in a SQL format.
MySQL has a concept called "schemas". Schemas are the data segements within MySQL that store tables and data. You can have any number of schemas within a MySQL database. Your Monolith data is stored within a single schema within MySQL.
Schemas are the data object that we will backup and restore from backups.
Recommended Tools:
MySQL Workbench
This is a free tool provided by the MySQL team to access and manage MySQL databases. It also has several useful utilities including database backup and backup import services.
Open MySQL Workbench
Ensure that Workbench has a connection to your Monolith database.
Open your Monolith database in MySQL workbench.
Select "Server >> Data Import" from the Workbench menu bar.
The import wizard should start at the "Import from Disk" tab - select this tab if its not selected.
Under "Import Options", check the radio button for "Import from Self-Contained file".
Use the file select browser to locate and choose your Monolith database backup, which should have a ".sql" extension.
(Optional) Select a default target schema or create a new one.
This is optional because your SQL dump file likely already has a directive to create a new schema with the correct name.
Click the "Start Import" button.
This process will create a new "schema" and populate it with tables and data from your Monolith database backup.
If the new schema has a different name from your original Monolith schema (database), then you may need to update your Monolith deployment configuration.
If you have deployed Monolith with the Watchtower container, the Monolith API server, Monolith web app, and Relay web app will automatically update if the host system has internet access.
Watchtower checks for updates to these container every 30 seconds.
You may disable these automatic updates by simply removing the Watchtower container from your Monolith deployment.
If you don't want to wait for Watchtower or if you want to buld updates into a recurring script, you can force an update with a couple of commands.
The following commands use Docker compose to pull down the latest Monolith images, and rebuild the entire Monolith deployment with the new images.
Be sure to run these commands from the same directory as your Monolith docker-compose.yml file.
You can imbed these commands within a bash or batch script if you would like to implement your own scheduled updates instead of using watchtower.
You can also update the Monolith server containers manually. This can be useful in air-gapped environments or if you do not wish to deploy with automatic updates.
Run the following commands to download the latest container images for Monolith deployment or updates:
Run the following commands to export the container images to TAR files that can be transferred to the the host running the Monolith server:
You can now transfer these TAR files to the host system that runs your Monolith deployment.
To import the TAR files, run the following commands on the host system that is using Docker to deploy the Monolith containers:
To restart Monolith with the new containers, run the following commands on your Monolith host and from the directory that includes your docker-compose.yml file:
To use an external database instead of using the MySQL Docker container that is included with the default Monolith deployment, just set the following values in the .env file to the connection details for your external MySQL database:
Once deployed, Monolith will store data in a folder called "data". This folder contains log files, files uploaded to Monolith, files uploaded to Relay, and database files generated by MySQL.
This data folder is important to maintain and create backups as the data that you store in Monolith will reside in this location.
Setting up a custom domain for Monolith requires just a couple of item and steps:
Setup the domain that you want to use.
Create SSL certificates with any necessary intermediate certs that are required for the domain.
Add those SSL certificates to your Monolith deployment.
Update the docker-compose.yml file
Copy the SSL certs to your Monolith deployment folder.
If you require a more complex setup, contact us at support@monolithforensics.com.
This process will be different for everyone, but usually your IT department can establish a specific Domain for you to use to access your Monolith deployment in a web browser.
This is helpful because it allows you to use domain resolution in your browser instead of a plain IP address that points at your Monolith server.
This also lets you setup SSL that can be verified by your browser and create secure and encrypted web traffic between your Monolith users and the Monolith server.
Again, this process varies, but you will need to generate two SSL certificates that are associated with your custom domain. These certificate file comprise of a certificate file and a key file.
This is also a process that your IT department can help you with.
Before we can use the new SSL certificates, we need to update our Monolith deployment config so that it will override the built in self-signed certificates that Monolith uses by default.
Under the "nginx" block of the docker-compose.yml file, add the following line under "volumes":
The entire "nginx" block should look like this:
When using custom SSL certs, Monolith is looking for certificates with specific names - rename your SSL certs to the following file names:
Copy the SSL certs to "data" folder within your Monolith deployment, the final cert locations should look like this:
In order for Monolith to start using the new certs, we need to redeploy/restart the Monolith server so that it will indest the cert files.
Open a terminal or command prompt in the location of the docker-compose.yml file.
Enter the following commands, in order, to re-deploy and restart the Monolith server:
Now, Monolith will start using these certs and your custom domain to create a secure and encrypted connection between the server and your clients systems; both in the web browser and the Monolith desktop client.
If a user's email has changed and you need to update it in Monolith, the change must be made directly in the Monolith database.
Here are the steps to make that change.
Install MySQL Workbench, open it, and create a connection to your Monolith database.
Open the Monolith database connection in MySQL workbench.
Navigate to your Monolith Database under the "schemas" tab and expand the schema and tables list. The Monolith db is usally called "monolith_db".
Scroll to the "users" table and open the table in Workbench to reveal the user records.
Find the user record that you want to update and click into that user's email column. Then type in the new email.
Click the "apply" button at the bottom right in Workbench, then click apply again in the confirm dialog that appears.
Once this is completed, the user's email has been updated and they can start logging into Monolith with that email address.
Default Monolith deployments store files on the local file system of the host that is running Monolith's Docker containers.
If you want to use an external file share, you will need to adjust the docker-compose.yml file to include configuration settings for the file share you would like to use.
To connect to a basic Windows file share, add the following configuration to the bottom of your docker-compose.yml file:
Replace your_username
, your_password
, your_domain
with the appropriate credentials for accessing the CIFS share. your_domain
is not required if your share does not have a specific domain, so you can omit this value.
Replace //<SHARE_IP_ADDRESS>/share
with the network path to your CIFS share, but append the "/data" location at the end.
To utilize this new volume, we need adjust the current volumes listed in each service block of the docker-compose.yml file.
The following demonstrates the final docker-compose.yml file once a CIFS share has been configured:
When running MySQL in Docker or as a container, you may need to update the version of MySQL from time to time.
To update MySQL within Docker using Docker compose, you need to update your "docker-compose.yml" file.
Find this line in the MySQL block:
Update the MySQL version in this line to the next version:
This will tell Docker which version of MySQL to use when deploying Monolith.
Redeploy Monolith using the standard Docker compose command syntax:
This will stop the current Monolith deployment and restart it fresh containers. You should see the new version of MySQL download as a Docker image during this process.
Once redeployed, MySQL will go through a breif process of updating itself that may last a minute or two, so it may take a minute or two for Monolith to be available for use.
After completing steps 1 and 2, you should have a new version of MySQL installed and deployed for use with your Monolith deployment.