MinIO S3 WHMCS module Description Changelog Installation and Configuration Guide Step-by-step instructions for installing, configuring, and setting up the MinIO S3 WHMCS module, including MinIO server preparation, WHMCS integration, email templates, and product configuration. WHMCS Installation and Update MinIO S3 module WHMCS Order now | Download | Community System requirements Requirement Minimum / Supported Version WHMCS 8.x+, 9.x+. PHP 7.4, 8.1, 8.2, 8.3, 8.4 ionCube Loader v15+ MinIO Server RELEASE.2025-04-22T22:12:26Z or lower [!IMPORTANT] MinIO Server Version: The module works exclusively with MinIO server version RELEASE.2025-04-22T22:12:26Z or lower. Versions newer than this release are not supported. ionCube Loader: The module uses ionCube encoding. Make sure ionCube Loader is installed and active on your server. Download Note: The module now uses ionCube 15, which provides universal out-of-the-box support for all encodings across modern PHP runtimes. All versions can be found at this link: https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-MinIO-S3/ Older module versions for WHMCS 8 are available in the archive directory: https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-MinIO-S3/archive/ Download the latest version of the module directly to your server: wget https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-MinIO-S3/PUQ_WHMCS-MinIO-S3-latest.zip Unzip the archive: unzip PUQ_WHMCS-MinIO-S3-latest.zip Installation Upload files Copy the puqMinIOS3 directory from the extracted archive to the WHMCS servers module directory: cp -r puqMinIOS3 /path/to/whmcs/modules/servers/ Or target path: WHMCS_WEB_DIR/modules/servers/puqMinIOS3 Once the files are uploaded, proceed to the configuration chapter to set up your server and product. Update The update procedure is the same as installation — replace the existing files with the new version: Download the latest version as described in the Download section. Unzip the archive. Replace the existing WHMCS_WEB_DIR/modules/servers/puqMinIOS3 directory with the new one. Verify the version number in the module interface matches the new release. Setup guide: MinIO S3 setup Section 1 — Installing and configuring the MinIO server [!IMPORTANT] Supported MinIO Version: The module works exclusively with MinIO server version RELEASE.2025-04-22T22:12:26Z or lower. Update packages and download the compatible MinIO binary: sudo apt update # Download the supported release (RELEASE.2025-04-22T22-12-26Z): wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2025-04-22T22-12-26Z -O minio Install the binary and set up the MinIO user: sudo chmod +x minio sudo mv minio /usr/local/bin sudo useradd -r minio-user -s /sbin/nologin sudo chown minio-user:minio-user /usr/local/bin/minio sudo mkdir /usr/local/share/minio sudo chown minio-user:minio-user /usr/local/share/minio sudo mkdir /etc/minio sudo chown minio-user:minio-user /etc/minio Create the environment configuration file /etc/default/minio: MINIO_ACCESS_KEY="minio" MINIO_VOLUMES="/usr/local/share/minio/" MINIO_OPTS="-C /etc/minio --address :9000 --console-address :9001" MINIO_SECRET_KEY="miniostorage" Section 2 — Installing the Systemd MinIO startup script Create the service file /etc/systemd/system/minio.service: [Unit] Description=MinIO Documentation=https://docs.min.io Wants=network-online.target After=network-online.target AssertFileIsExecutable=/usr/local/bin/minio [Service] WorkingDirectory=/usr/local/ User=minio-user Group=minio-user EnvironmentFile=/etc/default/minio ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi" ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES Restart=always LimitNOFILE=65536 TimeoutStopSec=infinity SendSIGKILL=no [Install] WantedBy=multi-user.target Section 3 — Starting the MinIO Server sudo systemctl daemon-reload sudo systemctl enable minio sudo systemctl start minio sudo systemctl status minio Section 4 — Securing Access to MinIO Server with Let's Encrypt SSL/TLS Certificate Install certbot and nginx: sudo apt update sudo apt install certbot nginx python3-certbot-nginx -y Create the nginx configuration file /etc/nginx/sites-enabled/minio: server { listen 80 default_server; server_name yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/cert.pem; ssl_session_timeout 20m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_verify_client off; ignore_invalid_headers off; client_max_body_size 0; proxy_buffering off; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_connect_timeout 300; proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off; proxy_pass http://localhost:9001; } } Remove the default nginx config and generate SSL certificate: rm /etc/nginx/sites-enabled/default sudo certbot --nginx -d yourdomain.com sudo service nginx restart Add certificate auto-renewal to crontab: 0 12 * * * /usr/bin/certbot renew --quiet Default Login Credentials After installation, you can access the MinIO console at https://yourdomain.com: Username: minio Password: miniostorage 04-minio-setup.png Setup guide: WHMCS setup MinIO S3 module WHMCS Order now | Download | Community Step 1 — Add server in WHMCS Create a new MinIO S3 server in WHMCS: Navigate to: System Settings → Products/Services → Servers Click Add New Server Enter the correct Name and Hostname In the Server Details section, select the PUQ MinIO S3 module and enter the correct username and password for the MinIO web interface Click the Test connection button to verify 05-add-server-1.png 06-add-server-2.png Step 2 — Create Product Navigate to: System Settings → Products/Services → Create a New Product In the Module Settings section, select the PUQ MinIO S3 module and configure the product options. 05-add-server-1.png Email Template (puqMinIOS3 Notification disk limit) Create an email template for customer notifications when disk usage approaches the limit. Navigate to: System Settings → Email Templates → Create New Email Template Template configuration Parameter Value Email Type Product/service Unique Name puqMinIOS3 Notification disk limit Email Subject Disk space usage {$disk_used_percentage} % - {$username} Email Body Dear {$client_name}, This letter informs you that the disk space usage limit is coming to an end. Product/Service: {$service_product_name} Due Date: {$service_next_due_date} Username: {$username} Disk limit: {$disk_limit_bytes*$unit_coefficient} {$unit} Disk used: {$disk_used_unit} {$unit} ({$disk_used_percentage} %) Disk free: {$disk_free_unit} {$unit} ({$disk_free_percentage} %) {$signature} Available template variables Variable Description {$username} MinIO S3 account username {$disk_limit_bytes*$unit_coefficient} Total disk space limit {$disk_used_unit} Used disk space {$disk_free_unit} Free disk space {$disk_used_percentage} Used disk space percentage {$disk_free_percentage} Free disk space percentage {$unit} Disk space unit (MB, GB, TB, PB) Note: Standard WHMCS merge fields are also available in this template. 07-email-template-1.png 08-email-template-2.png Email Template (puqMinIOS3 service Suspension Notification disk limit) Create an email template for customer notifications when the S3 account is suspended due to exceeding the disk limit. Navigate to: System Settings → Email Templates → Create New Email Template Template configuration Parameter Value Email Type Product/service Unique Name puqMinIOS3 service Suspension Notification disk limit Email Subject Suspension Information - {$username} Email Body Dear {$client_name}, This email informs you that the S3 account has been disabled due to running out of free space. It is also possible to upgrade to a package with more space. Product/Service: {$service_product_name} Due Date: {$service_next_due_date} Username: {$username} Disk limit: {$disk_limit_bytes*$unit_coefficient} {$unit} Disk used: {$disk_used_unit} {$unit} ({$disk_used_percentage} %) Disk free: {$disk_free_unit} {$unit} ({$disk_free_percentage} %) {$signature} Available template variables Variable Description {$username} MinIO S3 account username {$disk_limit_bytes*$unit_coefficient} Total disk space limit {$disk_used_unit} Used disk space {$disk_free_unit} Free disk space {$disk_used_percentage} Used disk space percentage {$disk_free_percentage} Free disk space percentage {$unit} Disk space unit (MB, GB, TB, PB) Note: Standard WHMCS merge fields are also available in this template. 09-email-template-suspension-1.png 10-email-template-suspension-2.png Add server (MinIO S3) Add a new server to the system WHMCS Navigate to: System Settings → Servers → Add New Server Step 1 — General settings Enter the correct Name and Hostname for your MinIO S3 server. 05-add-server-1.png Step 2 — Module settings In the Server Details section: Select the PUQ MinIO S3 module Enter the correct username and password for the MinIO web interface Click the Test connection button to verify the connection 06-add-server-2.png Note: The MinIO user must have administrator privileges to manage users, policies, and buckets via the API. Product Configuration Add new product to WHMCS Navigate to: System Settings → Products/Services → Create a New Product In the Module Settings section, select the PUQ MinIO S3 module. Configuration parameters Parameter Description License key A pre-purchased license key for the PUQ MinIO S3 module. For the module to work correctly, the key must be active Unit Packet disk space units (MB, GB, TB, PB) Disk space size Disk size in this product (set to 0 for unlimited) Notification disk limit email template Email template that will be sent when the disk quota is exceeded in % Notification, used disk space X % Sets a percentage parameter (1-100, default 90), after exceeding this parameter a notification will be sent to the user Group The group that will be assigned to the user on the server side of the MinIO S3 Raw Policy The policy that is assigned to the user during creation on the server Suspend exceeding disk limit email template The template of the letter that will be sent to the client if his disk limit is 100% or less 100% Raw policy Disk limit The policy that will be applied to the client when the client runs out of space Save usage history (days) The number of days it takes to save user disk usage statistics Link to instruction Link to the instruction, if filled out, it will be reflected in the client area Default Bucket Options to enable or disable the creation of a default bucket, and also set its prefix Client Area Client zone settings — show or not show the password in the client zone, type how to show the password Username rule Default: {client_id}-{service_id} Macro Description {client_id} Client ID {service_id} Service ID {unixtime} Current Unix timestamp {date} Current date (YYYY-MM-DD) {time} Current time (HH-MM-SS) {random_digit_x} Random digit string of length x {random_letter_x} Random letter string of length x Password rule Default: 12:123456789QAZWSXEDCRFVTGBYHNUJMIKqazwsxedcrfvtgbyhnujmikolp Format: length:charset — where length is the password length and charset is the set of characters to use. Raw Policy (Standard) The policy that is assigned to the user during creation on the server: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "admin:Heal", "admin:SetBucketTarget", "admin:TopLocksInfo", "admin:DataUsageInfo", "admin:GetBucketQuota", "admin:GetBucketTarget" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::*" ] } ] } Raw Policy Disk Limit The policy that will be applied to the client when the client runs out of space: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "admin:Heal", "admin:SetBucketTarget", "admin:TopLocksInfo", "admin:DataUsageInfo", "admin:GetBucketQuota", "admin:GetBucketTarget" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::*" ] } ] } Important: Policy recalculation occurs once a day during the collection of server statistics (UpdateServerUsage). 11-product-configuration.png Client Area Overview of the client-facing features available in the MinIO S3 WHMCS module, including the home screen, email notifications, and disk usage statistics. Home screen Screenshot when the account is in a normal state. The end customer, after logging in to his own customer panel, has access to the following information and options: Link to the user manual (which was defined by the administrator when setting up the service) MinIO server address Authorization data (username and password with copy buttons) Usage statistics graph Table with data on the use of the service Bucket Information 01-description-client-area.png 02-description-disk-stats.png 14-home-screen-3.png Email notification Below you can see an example of an email notification regarding data limit. When the disk usage exceeds the configured percentage threshold, the system automatically sends an email notification to the customer using the configured email template. 15-email-notification.png Disk statistics Client can check the data usage statistics in the menu item Used space statistics. The statistics page displays disk usage data collected by the WHMCS cron and stored in the database: Last 30 days chart — daily disk usage displayed as a column chart Average per month chart — monthly average disk usage Both charts are rendered using Google Charts. 02-description-disk-stats.png 14-home-screen-3.png Admin Area Administrative features and tools available in the WHMCS admin panel for managing MinIO S3 services. Product Information Here is the data presented for the service admin in WHMCS. The admin area provides the following information and controls: License verification status — green/red indicator showing license validity API connection status — real-time test of the MinIO server connection User information — username, enabled status, group, and email Disk usage — visual progress bar with detailed usage table Management actions — Create, Suspend, Unsuspend, Terminate, Change Password, Change Package Policy management Update Policy button — force the system to select and apply the necessary policy. If there is more than 0 free space on the disk, a permissive policy will be applied; if there is 0 free space on the disk, a restrictive policy will be applied. Set Standard Policy and Set Limited Policy buttons — enforce the application of the standard policy and the limited policy respectively. Important: Policy recalculation occurs once a day during the collection of server statistics (UpdateServerUsage). 03-description-admin-area.png