ProcessWire CMS on AlmaLinux 9 — Developer-Centric Content Management on a Stable RHEL-Based System

ProcessWire is a robust, open-source CMS and content development framework (CMF) that prioritizes flexibility, clean code, and developer control. Running it on AlmaLinux 9, a 1:1 binary-compatible clone of RHEL 9, offers a secure, enterprise-ready platform ideal for scalable, long-term content management solutions.


Why Use AlmaLinux 9 for ProcessWire?

AlmaLinux 9 is designed for users who need the reliability of Red Hat Enterprise Linux (RHEL) without the vendor lock-in. It’s suitable for mission-critical applications and offers consistent behavior across development, staging, and production environments—ideal for deploying ProcessWire CMS.

AlmaLinux 9 FeatureBenefit for ProcessWire CMS
Kernel 5.14Stable and performance-optimized for hosting workloads
PHP 8.1 via AppStreamFully supported by ProcessWire 3.0.200+ and its ecosystem
Apache 2.4.57 / Nginx 1.22Compatible with ProcessWire’s flexible templating system
MariaDB 10.5+ / MySQL 8.0Officially supported by ProcessWire for content storage
SELinux (enforcing)Adds hardened runtime security for production deployments
10-year support lifecycleIdeal for long-term, stable CMS projects

ProcessWire CMS: Architectural Overview

ProcessWire is structured more like a development framework than a traditional CMS. It is especially attractive to developers who want precise control over content relationships, access levels, and rendered output.

Core Concepts:

  • Page Tree – Content is structured as a hierarchy of pages, each with a type and custom fields.
  • Template System – Templates are PHP files, giving developers full control over markup and logic.
  • API-First – $pages, $fields, $templates, $input, and more expose all data and system behavior programmatically.
  • Fieldtype Architecture – Flexible system to define text, images, files, repeaters, references, and more.
  • Hooking System – Modify system behavior without modifying core code.

Ideal Use Cases for ProcessWire on AlmaLinux

  • Bespoke websites and apps where templating freedom and content structure are key
  • Multilingual websites with page-level translation and localized fields
  • Internal tools, portals, and dashboards with fine-grained user permissions
  • Agencies building reusable content platforms for clients
  • Headless CMS solutions via ProcessWire’s direct API access

Compatible Web Stack Components on AlmaLinux 9

ComponentCompatibility Notes
Web ServerApache (mod_php or PHP-FPM) or Nginx (with PHP-FPM)
PHP VersionPHP 8.1 available via AppStream (use Remi repo for newer versions)
DatabaseMariaDB 10.5+ and MySQL 8.0+ are supported by ProcessWire
FilesystemXFS or Ext4; suitable for managing ProcessWire’s page and asset trees
HTTPSSupported via OpenSSL 3.0, mod_ssl, and Let’s Encrypt integrations
FirewallDManage inbound access for HTTP/S, FTP, SSH easily

Security Features with AlmaLinux 9 Integration

Security LayerBenefit for ProcessWire Hosting
SELinuxControls access to files, logs, and services at runtime
Role-Based AccessBuilt into ProcessWire for admin users and field/template access
HTTPSEasily set up with certbot, Apache, or Nginx SSL modules
PHP HardeningDisable unnecessary functions like exec(), shell_exec()
Service IsolationSystemd unit isolation for Apache, MariaDB, and PHP-FPM

AlmaLinux’s RHEL-compatible ecosystem ensures that these features are not just available, but supported by enterprise-grade tooling (e.g., auditd, setroubleshoot, tuned).


Developer Experience on AlmaLinux 9

ProcessWire CMS provides a developer-first interface:

  • All content is API-accessible via object-oriented PHP
  • Fields and templates are editable via backend or JSON-based exports
  • Sites can be version-controlled, with minimal configuration
  • No vendor lock-in or theme engine—HTML and PHP live side-by-side

This makes ProcessWire extremely compatible with CI/CD pipelines, Git, and containerization strategies (e.g., Docker or Podman on AlmaLinux).


Comparison with Other CMS Platforms

Feature/AspectProcessWireWordPressJoomlaDrupal
TemplatingRaw PHPTheme-based + pluginsOverride systemTwig templating
Custom FieldsCore functionalityRequires ACF/MetaboxSupported in coreVery complex
Security ModelField/Page ACLsBasic rolesRole-permission modelGranular, complex
PerformanceLean corePlugin-heavyModerateRequires caching setup
Developer APIUnified object APILimited nativeAvailable via pluginsAdvanced, steep curve

ProcessWire is ideal for custom projects where exact control over data structures, rendering logic, and permissions is critical.


Running ProcessWire CMS on AlmaLinux 9 combines a powerful, developer-centric CMS with a reliable, RHEL-compatible operating system. This stack is well-suited for:

  • Long-term, stable hosting environments
  • Custom website and application development
  • Organizations that value transparent, scriptable deployments
  • Teams requiring security features like SELinux and role-based access control

For developers and sysadmins seeking a clean, controlled, and secure web stack, ProcessWire + AlmaLinux 9 is a dependable pairing.


Step 1: Create a VPS Instance on Shape.Host

Before proceeding with the CMS installation, you’ll need a server running Alma Linux 9. We recommend using Shape.Host due to its speed, reliability, and seamless setup experience.

Follow these instructions to deploy your Alma Linux 9 instance:

Go to https://shape.host and log in to your account.

Click “Create”, then choose “Instance”.

Shape.host Resources dashboard with Create > Instance highlighted.

Choose your preferred server location for optimal latency.

Shape.host instance form with the data center location selector highlighted.

Select Alma Linux 9 (64-bit) as the operating system.

Choose a hosting plan with at least 2 CPUs, 2 GB RAM, and 20 GB SSD.

Shape.host instance form with the data center location selector highlighted.

Click “Create Instance”.

Shape.host instance form with the Create Instance button highlighted.

Once the instance is created, you’ll find its public IP address under the “Resources” section of the dashboard.

Make sure you note down your root credentials or SSH key — you’ll need them in the next step.

Shape.host Resources dashboard with the server IP address highlighted.

Step 2: Connect to Your Server Using SSH

On Linux/macOS

Open a terminal and use:

ssh root@your-server-ip

On Windows

Use PuTTY:

  • Enter the server IP in the “Host Name” field: root@your-server-ip
  • Click Open, then confirm any security prompt

Replace your-server-ip with the IP address of your Shape.Host server.


Step 3: Install ProcessWire CMS

We will now update the system, install dependencies, configure the web server, and set up the ProcessWire CMS.

3.1 Update Your System

dnf update

Updates all installed packages to their latest versions.

Terminal showing DNF/YUM package management commands and output.

3.2 Enable EPEL and Remi Repositories

dnf install epel-release

Installs the EPEL repository for extra packages.

dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

Adds the Remi repository required for modern PHP versions.

Terminal showing DNF/YUM package management commands and output.

3.3 Enable PHP 8.1 via Remi

dnf module reset php

Resets any existing PHP module stream.

dnf module enable php:remi-8.1

Enables PHP 8.1 from Remi.

Terminal showing DNF/YUM package management commands and output.

3.4 Install Apache, MariaDB, PHP, and Required Extensions

dnf install httpd mariadb-server php php-cli php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip php-intl unzip wget

Installs the LAMP stack and necessary PHP extensions.

Terminal showing DNF/YUM package management commands and output.

3.5 Start and Enable Apache and MariaDB

systemctl enable --now httpd mariadb

Starts and enables the services to auto-start at boot.

Terminal showing systemd service management commands or output.

3.6 Secure the MariaDB Installation

mysql_secure_installation

Go through the prompts to set a root password, remove anonymous users, disallow remote root login, and remove test databases.

Terminal showing MariaDB/MySQL database security configuration prompts.

3.7 Create a Database and User for ProcessWire

mysql -u root -p

Then execute the following SQL commands:

CREATE DATABASE processwire CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'pwuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON processwire.* TO 'pwuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

This creates the database and user with full access.

Terminal showing SQL database and user configuration commands.

3.8 Download and Extract ProcessWire

cd /var/www
wget https://github.com/processwire/processwire/archive/master.zip
unzip master.zip
mv processwire-master processwire
rm -f master.zip

These commands download the latest ProcessWire CMS and organize the files.

Terminal showing file download commands and transfer output.

3.9 Set Permissions for Apache

chown -R apache:apache /var/www/processwire
chmod -R 755 /var/www/processwire

Ensures Apache can read and execute the necessary files.

Terminal showing file ownership or permission commands.

3.10 Configure Apache Virtual Host

Create a new config file:

nano /etc/httpd/conf.d/processwire.conf

Paste the following configuration, replacing your-domain.com:

<VirtualHost *:80>
    ServerName your-domain.com
    DocumentRoot /var/www/processwire

    <Directory /var/www/processwire>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/pw_error.log
    CustomLog /var/log/httpd/pw_access.log combined
</VirtualHost>

Save and exit the file.

Terminal showing web server configuration text.

3.11 Allow Database Access via SELinux

setsebool -P httpd_can_network_connect_db 1

This SELinux policy change lets Apache connect to MariaDB.


3.12 Restart Apache

systemctl restart httpd

Reloads Apache to apply the new virtual host.

Terminal showing systemd service management commands or output.

3.13 Install Certbot and Secure the Site

dnf install certbot python3-certbot-apache
certbot --apache -d your-domain.com

This installs Certbot and configures a free SSL certificate using Let’s Encrypt.

Terminal showing DNF/YUM package management commands and output.
Terminal showing an Apache configuration test.

Step 4: Verify the Installation

Open your browser and navigate to:

http://your-domain.com

You should see the ProcessWire installation page. Follow the steps:Absolutely — here is another version of each step, subtly rephrased to maintain clarity while making the content unique and reusable:


Step 1 – Launch the Installer

You’ve arrived at the ProcessWire setup screen. Click Get Started to begin the configuration.

ProcessWire installer welcome screen.

Step 2 – Pick a Site Profile

Select which site template to use. The Blank profile gives you a clean slate with no preset content.
Unless you’ve added a custom profile, leave this as is and click Continue.

ProcessWire site installation profile selector.

Step 3 – Check Server Compatibility

The installer will now verify that your hosting environment meets all the technical requirements.
If everything checks out, click Continue To Next Step.

ProcessWire installer compatibility checks.

Step 4 – Configure Site and Database Settings

Database Info

Enter your database details:

  • Database name, user, and password
  • Keep the host set to localhost, and leave the default port and engine settings

Time Zone

Choose the time zone that best fits your server’s location or your preference.

File Permissions

Default permissions (755 for folders, 644 for files) work for most setups.

Host Configuration

Input your domain or server name (e.g. example.com).

Debug Mode

It’s safer to leave this off for live sites. Enable it only during development.

Press Continue to move forward.

ProcessWire installer database, time zone and file permission settings.
ProcessWire installer HTTP hostname and debug mode settings.

Step 5 – Final Details and Admin Setup

Import Log

You’ll see a summary of imported files and database content.

Admin Access URL

Choose the path you’ll use to log in to the backend, such as /admin or /processwire.

Admin Credentials

Set your administrator username, password, and contact email.

Remove Setup Files

It’s best to keep all cleanup options checked to delete installation files after setup.

Click Continue to finish.

ProcessWire administrator account and installation cleanup settings.

Step 6 – Setup Summary

The system confirms everything is installed and configured.

  • Admin user is created
  • Suggestions are listed to help secure your site (like updating permissions)
  • The login path to your admin dashboard is shown

From here, you can go to the admin area or open the site’s front page.

ProcessWire installation summary with account and cleanup messages.

Step 7 – Log Into Admin Panel

Use your newly created admin credentials to log in.
Enter your username and password, then click Login.

ProcessWire administrator sign-in form.

Step 8 – Welcome to the Backend

You’re now in the ProcessWire admin interface.

  • Use the Pages tab to build and manage content
  • You can create new pages via the Add New button
ProcessWire administration page listing site pages.

Congratulations — you’ve successfully deployed ProcessWire CMS on Alma Linux 9! You now have a secure, optimized CMS environment ready to power any content-heavy website or application.

For unbeatable uptime, blazing-fast Cloud VPS, and world-class support, consider running all your future projects on Shape.Host.

Launch your own Lixu SSD VPS with Shape.Host now and enjoy scalable, developer-friendly infrastructure.