4.1.14 Installation CMS Made Simple on hosting and server

CMS Made Simple Banner The Host

CMS Made Simple (CMSMS) is a lightweight CMS in PHP for corporate and small projects, focused on a simple template structure and modularity. It supports clean URLs, flexible Smarty template management, extensions via modules, and stable operation on the classic Nginx/Apache + PHP-FPM + MySQL/MariaDB stack. The Smarty templating engine with layout and block inheritance simplifies component reuse and clear separation of presentation. Multilingual projects (via modules), fine-grained access roles, and page/template caching are supported, which speeds up rendering and simplifies SEO configuration.

Preparing the environment

Requirements

  • An active Hosting, Virtual or Dedicated server service.
  • CPU: 2 vCPU; RAM: from 2 GB; SSD: from 10 GB.
  • OS: Ubuntu 22.04 LTS/24.04 LTS.
  • Web server: Nginx 1.20+ or Apache 2.4+.
  • PHP: 8.1–8.3; memory_limit256M.
  • DBMS: MySQL 5.7+/MariaDB 10.4+.
  • Access: root or a user with sudo privileges.

Environment variables

  • DOMAIN_NAME — your domain.
  • CMSMS_VERSION — CMSMS version, e.g. 2.2.20.
  • DB_HOST, DB_NAME, DB_USER, DB_PASSWORD — database parameters.
  • WWW_USER, WWW_GROUP — web project owner, usually www-data.

Installing CMS Made Simple on hosting

  1. Download the CMSMS distribution. Download the stable archive from the official website and save it locally.

  2. Upload the archive to hosting via the file manager or via FTP. Extract it into the site root.

  3. Create a user and a database.

  4. Start the web installer. Open http://DOMAIN_NAME/cmsms-<version>-install.php/ and follow the installation wizard:

  • Specify the desired language for installation

web installation sms cms step1

  • Run a check of the existing software in the installation directory

web installation sms cms step2

  • Check the environment and PHP extensions.

web installation sms cms step3

  • Enter the parameters of the created database: DB_HOST, DB_NAME, DB_USER, DB_PASSWORD.

web installation sms cms step4

  • Create a superuser for the administration panel.

web installation sms cms step5

  • Specify the site name and select an additional language

web installation sms cms step6

  • Confirm file extraction

web installation sms cms step7

  • Confirm database creation and configuration

web installation sms cms step8

  • Installation completed successfully

web installation sms cms step9

Installing CMS Made Simple on a server

Preparing the directory and downloading

Create the project directory, download the release, and extract it:

Creating a directory and downloading the archive
sudo mkdir -p /var/www/DOMAIN_NAME && cd /var/www/DOMAIN_NAME
sudo wget -O cmsms.zip "https://downloads.cmsmadesimple.org/{$CMSMS_VERSION}/cmsms-CMSMS_VERSION.zip"
sudo apt update && sudo apt install -y unzip
sudo unzip cmsms.zip && sudo rm cmsms.zip
sudo chown -R WWW_USER:WWW_GROUP /var/www/DOMAIN_NAME

Creating the database and user

Creating a database and MySQL/MariaDB user
mysql -u root <<'SQL'
CREATE DATABASE DB_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'DB_USER'@'localhost' IDENTIFIED BY 'DB_PASSWORD';
GRANT ALL PRIVILEGES ON DB_NAME.* TO 'DB_USER'@'localhost';
FLUSH PRIVILEGES;

Installing PHP modules

For Ubuntu 22.04/24.04, install PHP and extensions:

Installing PHP extensions
sudo apt install -y php8.2 php8.2-fpm php8.2-cli php8.2-mysql php8.2-xml php8.2-gd \
  php8.2-curl php8.2-zip php8.2-intl php8.2-mbstring
php -v
php -m | grep -E "mbstring|intl|zip|curl|xml|gd|mysql"

Configure PHP in the php.ini file: memory_limit=256M, max_execution_time=180, upload_max_filesize=32M, post_max_size=32M.

Nginx configuration

/etc/nginx/sites-available/cmsms.conf
server {
    listen 80;
    server_name DOMAIN_NAME;

    root /var/www/DOMAIN_NAME;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_read_timeout 120;
    }

    # Restrict direct access to service paths
    location ~* ^/(tmp|install|backup|uploads/secure)/ {
        deny all;
        return 403;
    }
}

Enabling the site and verification:

Enabling the site and restarting Nginx
sudo ln -s /etc/nginx/sites-available/cmsms.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
nginx -v

After that, open http://DOMAIN_NAME/cmsms-<version>-install.php/ and complete the installation in the browser.

Permissions and ownership: make sure that storage/tmp, uploads/ and cache directories are owned by WWW_USER:WWW_GROUP and writable by the web server.

Configuring additional CMS Made Simple features

HTTPS (Let’s Encrypt)

Attach a certificate and enable redirect to HTTPS. See the full guide in our article: Let’s Encrypt (Certbot).

Example of automatic redirect in Nginx
# Add this to the server block:
if ($scheme = http) { return 301 https://$host$request_uri; }

Friendly URLs and routing rules

Enable Friendly URL in the CMSMS settings and ensure that try_files is enabled as in the example. For Apache, use the .htaccess file from the distribution.

Template cache and performance

In the admin panel, enable caching and periodic cleanup of temporary files. Under high load, use OPcache in PHP.

Caching

Localization and date/time

Set the required PHP locale and time zone:

Configuring TZ for PHP-FPM
sudo sed -i 's#;date.timezone =#date.timezone = Europe/Kyiv#g' /etc/php/8.2/fpm/php.ini
sudo systemctl reload php8.2-fpm

Verifying operation

  1. Open http://DOMAIN_NAME/ — the main page should load without 404 or 500 errors.
  2. Log in to the admin panel and clear the cache. Create a test page.
Common issues
Error/Symptom Cause Solution
404 with Friendly URLs enabled No try_files or a conflicting location block Apply try_files $uri $uri/ /index.php?$query_string;
500 during installation Missing PHP modules Install gd, mbstring, intl, curl, zip, xml, pdo_mysql
No writes in uploads Incorrect file and directory permissions that prevent www-data processes from writing to the specified directory Run chown -R WWW_USER:WWW_GROUP and chmod 775 for the required directories
“Could not connect to database” Incorrect database connection details or localhost ≠ socket Check DB_HOST, access, GRANT, and use 127.0.0.1
Infinite redirect to HTTPS Duplicate redirect rules Leave a single redirect on the HTTP server

Official documentation and communities