CLI tool
centminmod/centminmod avatar
centminmod/centminmod

centmin.sh installs a LEMP stack from a numbered installer script

Shell menu based Nginx LEMP web stack auto installer (GPLv3 licensed) for AlmaLinux and Rocky Linux

667 stars153 forksShellGPL-3.0

At a glance

What is it?
Centmin Mod is a shell menu driven installer that builds an Nginx, MariaDB, PHP-FPM stack on AlmaLinux and Rocky Linux. Which PHP version you get depends on the installer filename you fetch, and the project now runs two branch lines, a stable one and a beta one.
Who is it for?
centmin.sh is a good fit for a sysadmin who wants a working Nginx, PHP-FPM and MariaDB stack with a menu interface and a known configuration on a fresh AlmaLinux or Rocky Linux server, and for anyone who values a documented community forum over configuration management.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A menu driven shell installer for the AlmaLinux and Rocky families

Centmin Mod is a shell based, menu driven installer for a LEMP stack, meaning Linux with Nginx, MariaDB and PHP, and the description in the repository is explicit that it targets AlmaLinux and Rocky Linux under a GPLv3 licence. The core of the project is a single large script, centmin.sh, which the README tells you to edit if you want to change variables directly, and a companion entry point, centmin-cli.sh, for command line use. The script is the interface: you run it, it presents a menu, and you pick the software you want installed. That model is a deliberate choice for its audience, which is a system administrator provisioning a fresh server over SSH. The repository also carries the surrounding machinery a real installer needs, an init directory, an inc directory for includes, a config directory, an addons directory, a cron directory, a datamanagement directory, a downloads directory, an Extras directory and a htdocs directory. It is a large, mature tree rather than a single script, and the depth of that tree is what a hundred plus install paths imply.

The recommended install is a curl and a root shell, not a git clone

The README states that the stack can be installed through the unattended command line method or by following the official install guide on the project site, and that installation via Git is deprecated and no longer supported. The unattended method is described as the fastest and the one that allows a fully unattended installation. For the stable line on a fresh AlmaLinux or Rocky Linux server, the installer for PHP 8.3 looks like this.

bash
yum -y update
curl -O https://centminmod.com/installer83.sh && chmod 0700 installer83.sh && bash installer83.sh

The permissions are set to 0700 rather than the more usual 0755, which tells you something about how the project treats the installer as a privileged script. The README is also candid about duration, saying installation should take between 15 and 30 minutes on a fast server and up to 50 to 70 minutes on a slower one, depending on server specifications and network connectivity and download speed. That range is wide, and it is the practical argument for running the installer on a fresh machine rather than on one that already has services running.

Two branch lines now run in parallel, stable and beta

The README documents a branch transition that began on July 1, 2024. The previous 124.00stable is moving to 131.00stable, which is described as essentially the well tested 130.00beta01 branch with all of its development and changes folded in. Alongside that, a 140.00beta01 branch started, also based on 130.00beta01 but with additional development and code to eventually support EL8 plus operating systems such as CentOS 8, AlmaLinux 8 and Rocky Linux 8, and EL8 plus support is stated to be officially supported. In practice that means two installers to choose from, one on the stable line and one on the beta line, and the choice is consequential because the two lines will drift. The README lists the active branches as 131.00stable and 140.00beta01, with changes from the active branches usually merged into the master branch about once a week, and the pull request guidance points contributors at those two branches rather than at master. A reviewer looking for a stable target should treat 131.00stable as the reference and the beta branch as the place where the newest platform support lands.

The PHP version is encoded in the installer filename

The detail that most affects a real deployment is that the PHP version is chosen by which installer script you download. The README lists a separate installer for each supported PHP release, and the naming convention makes the choice obvious once you see the pattern. For the stable line, installer83.sh brings PHP 8.3.x, installer82.sh brings 8.2.x, installer81.sh brings 8.1.x, installer80.sh brings 8.0.x with backported security fixes, and installer74.sh brings 7.4.x, also with backported security fixes.

bash
yum -y update
curl -O https://centminmod.com/installer74.sh && chmod 0700 installer74.sh && bash installer74.sh

The beta line mirrors that set with a betainstaller prefix, so betainstaller83.sh and down to betainstaller74.sh.

bash
yum -y update
curl -O https://centminmod.com/betainstaller83.sh && chmod 0700 betainstaller83.sh && bash betainstaller83.sh

What this does not do is select a PHP version at run time through a flag. The version is fixed by the script you fetched, which means a change of PHP major version is a change of script and a new run rather than a switch inside a menu. Both stable and beta installers state a minimum of 4GB of installed memory for fresh AlmaLinux or Rocky Linux servers.

custom_config.inc is the supported way to override installer variables

If you want to change what gets installed without editing the main script, the README describes a supported path. You can pre-populate a persistent configuration file, /etc/centminmod/custom_config.inc, with overriding variables, and the example file in the repository, example/custom_config.inc, shows the expected shape. The ordering matters and the README is explicit about it: the customisation goes in before you run the installer, and you should not edit centmin.sh directly for the same purpose. That is a better pattern for an unattended install, because the file survives a re-run of the installer and the override is visible in one place rather than diffed into a thousand line script. The README points to a community forum thread for worked examples of the file. The same reasoning applies to the rest of the tree: the project keeps separate installer entry points for very different outcomes, including a minimal installer, a ModSecurity installer, a pagespeed installer, an edge installer, a GitLab installer and a DNF installer, each with its own script in the repository root.

Dozens of installer variants live side by side in one repository

The repository listing shows the shape of the project more clearly than the prose does. There is a long sequence of numbered installers, from installer.sh and installer-latest.sh through installer55.sh, installer56.sh, installer7.sh, installer71.sh up to installer72.sh, installer73.sh, installer74.sh, installer80.sh, installer81.sh, installer82.sh, installer83.sh, installer84.sh and installer85.sh, and each of those has a gitlab counterpart such as installer83-gitlab.sh and installer-latest-gitlab.sh. Alongside them sit installer-dnf.sh, installer-edge.sh, installer-minimal.sh, installer-modsecurity.sh, installer-ngxpagespeed.sh, installer-latest-gitlab.sh and installer-minimal-gitlab.sh, and the entry points centmin.sh and centmin-cli.sh. The numbering is a historical record of PHP versions over the project's life, and keeping them all in the tree means a server built in 2021 and one built today can be produced from the same repository. The cost of that approach is obvious in the listing: the same capability exists in dozens of near duplicate files, and a reviewer has to work out which one applies to their situation. The command_shortcuts.txt file and the changelog files for the beta branch, in bbcode, html and markdown form, help with that.

Support and contributions run through the community forum

The project has a distinctive support model that is worth knowing before you adopt it. The README directs questions about how Centmin Mod works under the hood to the Centmin Mod Insights forum, and it says that every Git committed change has a corresponding forum thread in the repository forums section, so people who prefer the forums to the GitHub issue tracker can work there instead. Bug reports can go to the GitHub issue tracker or to the Bug Reports forum, and suggestions and feedback have the same two routes. The install guide on the project site is what the README tells you to bookmark and read after installing, and the community forum is listed as the place for tips and troubleshooting. This is a small community operation rather than a commercial product with a support contract, which cuts both ways: you get a knowledgeable user base, and you get no vendor obligation to answer you. The project is GPL-3.0 licensed, the repository is not archived, the last push was on 2026-10-22, and there are no GitHub releases, so there is no tag to pin a deployment to. The version is in the branch name and the installer filename.

Editorial conclusion

centmin.sh is a good fit for a sysadmin who wants a working Nginx, PHP-FPM and MariaDB stack with a menu interface and a known configuration on a fresh AlmaLinux or Rocky Linux server, and for anyone who values a documented community forum over configuration management. It is a poor fit for a team that wants reproducible, reviewable infrastructure, since the recommended path is to curl a numbered script and run it as root on a fresh server, and a poor fit for Debian or Ubuntu hosts, which the installers do not target. Verify three things before you run it: that the branch you pick, 131.00stable or 140.00beta01, matches the operating system release you are on, that the PHP version encoded in the installer filename is the one your application needs, and that the four gigabyte memory requirement in the README is met by the machine. The licence is GPL-3.0, the last push was on 2026-10-22, and the repository publishes no GitHub releases, so the version scheme lives in branch names and installer filenames rather than in tags.

Frequently asked questions

How do I install Centmin Mod on AlmaLinux or Rocky Linux?

The README describes an unattended command line install run as root over SSH on a fresh server, using one of the numbered installer scripts fetched with curl. The stable line offers installer83.sh down to installer74.sh for PHP 8.3 through 7.4, and a minimum of 4GB of installed memory is required.

What is the difference between 131.00stable and 140.00beta01?

The README describes a branch transition that began on July 1, 2024. 131.00stable folds the well tested 130.00beta01 work into a stable line, while 140.00beta01 is the development branch that adds code for EL8 plus operating systems such as AlmaLinux 8 and Rocky Linux 8.

Can I customise what Centmin Mod installs?

The README says you can pre-populate the persistent config file /etc/centminmod/custom_config.inc with overriding variables before running the installer, rather than editing centmin.sh directly. An example file is provided in the repository at example/custom_config.inc.

Which PHP versions does Centmin Mod support?

The README lists separate installers for PHP 8.3.x, 8.2.x, 8.1.x, 8.0.x and 7.4.x, with the 8.0 and 7.4 installers described as carrying backported security fixes. The PHP version is selected by the installer script you download, not by a menu option.

Official sources

  1. centminmod/centminmod on GitHub
  2. Issues
  3. License: GPL-3.0
  4. Project website
  5. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/centminmod-centminmod.svg)](https://hysenlabs.com/projects/centminmod-centminmod)

Was this useful?