Deployment guide

MintHCM

Overview

MintHCM is a free, open-source Human Capital Management and HR platform built on the SuiteCRM and SugarCRM lineage. From a single self-hosted application it manages employee records, organisational structure and positions, recruitment and candidates, time off and leave, timesheets, projects and HR reporting. Your organisation keeps full ownership of its HR data.

This SecureAnyCloud image runs MintHCM as a self-contained appliance on one AWS instance. It combines an Apache and PHP 8.2 application container, a Percona Server 8.0 database and an Elasticsearch index, orchestrated with Docker Compose.

What you get:

  • An Apache and PHP 8.2 application container serving MintHCM on port 80
  • A Percona Server 8.0 database and an Elasticsearch index that powers list views and Global Search
  • All three services orchestrated with Docker Compose and started automatically on boot
  • No installed application and no credentials in the image: on first boot, a one-shot service generates a fresh administrator password, database password and site secret, runs the MintHCM installation headlessly with those secrets, and sets the site URL to the instance address
  • The administrator password written to /root/minthcm-credentials.txt with mode 0600, so only the root user can read it
  • Unique credentials per instance: two instances launched from the same Amazon Machine Image never share credentials, and the stock default password never exists on a launched instance
  • The Elasticsearch index bound to the loopback interface only
  • The MintHCM version pinned into the image, so every instance installs the same release offline with no dependency on external download servers
  • The Percona data directory on a dedicated EBS volume at /var/lib/minthcm/db
  • The Elasticsearch index and application state on a second dedicated EBS volume at /var/lib/minthcm/app
  • Both data volumes separate from the operating system disk and independently resizable

Prerequisites

Before you deploy this image, you need:

  • An Amazon Web Services account where you can launch EC2 instances
  • IAM permissions to launch instances, create security groups and subscribe to AWS Marketplace products
  • An EC2 key pair in the target Region for SSH access to the instance
  • A VPC and subnet in the target Region, with a security group that allows inbound port 22 from your management network and inbound ports 80 and 443 from the networks your HR users connect from
  • The AWS CLI (version 2) installed locally, if you plan to deploy from the command line

Connecting to your instance

Connect over SSH as the default login user for your operating system variant. MintHCM is served on port 80.

  • Ubuntu 24.04: SSH login user ubuntu
1

Launch the instance from the AWS Marketplace

Sign in to the AWS Management Console, open the EC2 service and select Launch instance. Under Application and OS Images, choose AWS Marketplace AMIs and search for MintHCM. Select the SecureAnyCloud listing, choose Select, then choose Continue on the subscription summary.

Pick an instance type of m5.large or larger. MintHCM runs a PHP application, a database and an Elasticsearch index on the same instance, so memory matters. m5.large (8 GiB) is the recommended minimum.

Choose your EC2 key pair under Key pair (login). Under Network settings, select your VPC and subnet, then create or select a security group that allows inbound port 22 from your management network and inbound ports 80 and 443 from the networks your HR users connect from. Leave the root volume at the default size or larger.

Select Launch instance. First boot runs the MintHCM installation, which takes a few minutes after the instance state becomes Running and the status checks pass. When it finishes, the sign-in page is served on port 80.

2

Launch the instance from the AWS CLI

The command below launches an instance from the SecureAnyCloud MintHCM Marketplace AMI into an existing subnet and security group. Replace the following values first:

  • <ami-id>: the AMI ID shown on the Marketplace listing
  • <key-name>: your EC2 key pair name
  • <subnet-id>: your subnet ID
  • <security-group-id>: a security group that opens ports 22, 80 and 443 as described above
aws ec2 run-instances \
  --image-id <ami-id> \
  --instance-type m5.large \
  --key-name <key-name> \
  --subnet-id <subnet-id> \
  --security-group-ids <security-group-id> \
  --block-device-mappings '[{"DeviceName":"/dev/sda1","Ebs":{"VolumeSize":40,"VolumeType":"gp3"}}]' \
  --metadata-options 'HttpTokens=required,HttpEndpoint=enabled' \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=minthcm}]'
3

Connect and retrieve the initial credentials

Connect over SSH as ubuntu, using your key pair and the instance's public IP:

ssh -i /path/to/your-key.pem ubuntu@your-instance-public-ip

Then read the per-instance credentials file. First boot creates it with mode 0600, so only root can read it:

sudo cat /root/minthcm-credentials.txt

The file lists the generated administrator and database credentials for this instance:

minthcm.url=http://<instance-public-ip>/ minthcm.admin.user=admin minthcm.admin.pass=<generated-per-instance> minthcm.db.user=root minthcm.db.pass=<generated-per-instance>

If the file contains a note instead of credentials, first boot has not finished the installation yet. Wait a minute and read the file again.

4

Verify the stack is running

The appliance runs as three Docker containers managed by Docker Compose. Confirm that they are up:

sudo docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
NAMES IMAGE STATUS minthcm-minthcm-web-1 minthcm/minthcm:latest Up 38 minutes minthcm-minthcm-db-1 percona/percona-server:8.0 Up 38 minutes (healthy) minthcm-minthcm-es-1 docker.elastic.co/elasticsearch/elasticsearch:7.16.3 Up 38 minutes

Confirm the web application answers on port 80:

curl -I http://127.0.0.1/
HTTP/1.1 200 OK Server: Apache/2.4.58 (Ubuntu)
5

Sign in for the first time

Browse to http://<instance-public-ip>/. Sign in with the admin username and the password from /root/minthcm-credentials.txt.

For production, put MintHCM behind HTTPS (Step 9) before you sign in over the public internet. That way the credentials are never sent in clear text.

6

Manage employees, candidates and positions

MintHCM organises HR data into modules that you reach from the top navigation: Employees, Candidates, Positions, Organizational Units, Leave, Timesheets and more. Each record carries contact details, related documents, meetings, tasks and org-structure relationships. A candidate record, for example, shows its contact information and related panels.

Positions describe your organisational structure. Each position has a status, a supervised unit and relationships to the employees who hold it.

7

Administration

Open the Administration panel to manage users and roles, configure OAuth2 clients, define organisational units, and set system-wide options such as locale, languages, currencies and search.

Under User Management, create a named user account for each HR team member instead of sharing the administrator login. Assign roles to control which modules and records each user can see.

8

Change the administrator password

The administrator password is generated per instance. To change it, sign in as the admin user and open Administration > User Management. Select the admin user, choose Edit, and set a new password in the password fields.

Store the new password securely. The file at /root/minthcm-credentials.txt records only the original generated password.

9

Enable HTTPS

For production, terminate TLS in front of MintHCM. The simplest approach is to place the instance behind an AWS Application Load Balancer with an ACM certificate. The load balancer forwards HTTPS on port 443 to the instance on port 80 within your VPC.

Alternatively, install a reverse proxy such as nginx or Caddy on the instance, with a Let's Encrypt certificate for your domain, and proxy to http://127.0.0.1:80.

After you put MintHCM behind HTTPS, open Administration > System Settings and change the site URL to the https:// address, so that generated links use HTTPS.

10

Review the storage layout

The database and the search index each live on their own dedicated EBS volume, separate from the operating system disk, so you can resize each tier independently. List the mounts with:

df -h /var/lib/minthcm/db /var/lib/minthcm/app
Filesystem Size Used Avail Use% Mounted on /dev/nvme1n1 20G 305M 19G 2% /var/lib/minthcm/db /dev/nvme2n1 20G 49M 19G 1% /var/lib/minthcm/app

To grow a tier, expand the corresponding EBS volume in the EC2 console. Then grow the filesystem on the instance with resize2fs.

11

Back up and maintain the appliance

Back up the database with a logical dump from the Percona container:

# Logical database dump
DBPASS=$(sudo grep '^DB_PASS=' /opt/minthcm/.env | cut -d= -f2-)
sudo docker exec minthcm-minthcm-db-1 sh -c "mysqldump -uroot -p'$DBPASS' minthcm" > minthcm-backup.sql

For a full point-in-time copy, take EBS snapshots of the /var/lib/minthcm/db and /var/lib/minthcm/app volumes.

The appliance containers restart automatically on reboot. To restart them manually, run cd /opt/minthcm && sudo docker compose restart.

Screenshots

MintHCM sign-in:

A candidate record:

The administration panel:

A position record:

Support

SecureAnyCloud publishes this image and provides 24/7 technical support by email and chat. We can help with MintHCM deployment, upgrades, HR module configuration, recruitment and leave workflows, Elasticsearch indexing, email and database administration.

MintHCM is licensed under the GNU Affero General Public License version 3 (AGPL-3.0) and is shipped unmodified.

Deploy on AWS

Launch MintHCM on AWS with 24/7 support from SecureAnyCloud.

View on Marketplace

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on AWS