Easy to Use
Non-technical users can create and manage content without coding
Backdrop CMS is a free, open-source content management system that helps you build modern, comprehensive websites on a reasonable budget. Forked from Drupal 7, Backdrop preserves the ease of use and extensive ecosystem that made Drupal 7 the most popular version of Drupal while maintaining active development and security updates.
With over 1,000 GitHub stars and an active community, Backdrop CMS powers more than 3,600 websites worldwide—from non-profits and educational institutions to small businesses and personal blogs. It offers a familiar interface for Drupal users while providing a straightforward upgrade path from legacy Drupal 7 sites.
Easy to Use
Non-technical users can create and manage content without coding
Fast Performance
Optimized to serve pages quickly, even on shared hosting
Drupal Compatible
Easy upgrade path from Drupal 7 with 1300+ add-ons
Actively Maintained
Regular security updates and predictable release cycles
Backdrop CMS provides comprehensive content management capabilities:
| Feature | Description |
|---|---|
| Content Types | Create custom content types with flexible fields |
| Layout System | Visual drag-and-drop page layouts |
| Views | Build dynamic content displays and listings |
| User Management | Roles, permissions, and user authentication |
| Multilingual | Built-in support for multiple languages |
| SEO Tools | Clean URLs, meta tags, and search optimization |
| Media Management | Upload and manage images, files, and media |
| Extensible | 1,300+ contributed modules and themes |
| API Access | RESTful web services for headless CMS usage |
| Configuration Management | Export/import site configuration |
Backdrop CMS requires:
| Component | Requirement |
|---|---|
| PHP | 7.1 or higher (8.x recommended) |
| Database | MySQL 5.5+ or MariaDB 5.5+ |
| Web Server | Apache (recommended) or Nginx |
| Disk Space | 15 MB minimum, 60+ MB recommended |
Before deploying Backdrop CMS on Klutch.sh, ensure you have:
Set up your Backdrop CMS deployment repository:
Backdrop CMS has an official Docker image. Create a Dockerfile to use it:
FROM backdrop:latest
# The official image is based on PHP 8.3 with Apache# and includes all required PHP extensions
# Backdrop files are in /var/www/htmlWORKDIR /var/www/html
# The sites and files directories need to be writable# These are handled by the base image
# Apache runs on port 80EXPOSE 80For more control over the version and configuration:
FROM php:8.3-apache
# Enable Apache mod_rewrite for clean URLsRUN a2enmod rewrite
# Install required PHP extensionsRUN apt-get update && apt-get install -y --no-install-recommends \ libzip-dev \ libonig-dev \ libpng-dev \ libjpeg-dev \ libpq-dev \ && rm -rf /var/lib/apt/lists/* \ && docker-php-ext-configure gd --with-jpeg=/usr \ && docker-php-ext-install gd mbstring pdo pdo_mysql pdo_pgsql zip
WORKDIR /var/www/html
# Download and extract Backdrop CMSENV BACKDROP_VERSION=1.32.1
RUN curl -fSL "https://github.com/backdrop/backdrop/releases/download/${BACKDROP_VERSION}/backdrop.zip" -o backdrop.zip \ && unzip backdrop.zip \ && mv backdrop/* . \ && mv backdrop/.htaccess . \ && rm -rf backdrop backdrop.zip \ && chown -R www-data:www-data sites files
# Copy custom entrypoint for database configurationCOPY docker-entrypoint.sh /entrypoint.shRUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]CMD ["apache2-foreground"]
EXPOSE 80Create a docker-entrypoint.sh to configure database settings:
#!/bin/bashset -e
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then # Check for required database configuration if [ -z "$BACKDROP_DB_HOST" ]; then echo >&2 'error: missing BACKDROP_DB_HOST environment variable' exit 1 fi
# Set defaults : ${BACKDROP_DB_USER:=backdrop} : ${BACKDROP_DB_NAME:=backdrop} : ${BACKDROP_DB_PORT:=3306} : ${BACKDROP_DB_DRIVER:=mysql}
if [ -z "$BACKDROP_DB_PASSWORD" ]; then echo >&2 'error: missing required BACKDROP_DB_PASSWORD environment variable' exit 1 fi
# Construct BACKDROP_SETTINGS JSON and pass to Apache export BACKDROP_SETTINGS="{\"databases\":{\"default\":{\"default\":{\"host\":\"$BACKDROP_DB_HOST\",\"port\":$BACKDROP_DB_PORT,\"username\":\"$BACKDROP_DB_USER\",\"password\":\"$BACKDROP_DB_PASSWORD\",\"database\":\"$BACKDROP_DB_NAME\",\"driver\":\"$BACKDROP_DB_DRIVER\"}}}}"
if [[ "$1" == apache2* ]]; then echo "PassEnv BACKDROP_SETTINGS" > /etc/apache2/conf-enabled/backdrop.conf fifi
exec "$@"Backdrop CMS Docker image uses the following environment variables:
| Variable | Description | Example |
|---|---|---|
BACKDROP_DB_HOST | MySQL/MariaDB hostname | mysql-hostname |
BACKDROP_DB_PASSWORD | Database password | your-secure-password |
| Variable | Description | Default |
|---|---|---|
BACKDROP_DB_USER | Database username | backdrop |
BACKDROP_DB_NAME | Database name | backdrop |
BACKDROP_DB_PORT | Database port | 3306 |
BACKDROP_DB_DRIVER | Database driver | mysql |
Test your Backdrop CMS setup locally:
services: backdrop: image: backdrop:latest container_name: backdrop ports: - "8080:80" environment: BACKDROP_DB_HOST: mysql BACKDROP_DB_USER: backdrop BACKDROP_DB_PASSWORD: backdrop BACKDROP_DB_NAME: backdrop volumes: - backdrop_files:/var/www/html/files - backdrop_sites:/var/www/html/sites depends_on: mysql: condition: service_healthy restart: unless-stopped
mysql: image: mysql:8.0 container_name: backdrop-db environment: MYSQL_DATABASE: backdrop MYSQL_USER: backdrop MYSQL_PASSWORD: backdrop MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' volumes: - mysql_data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 5s timeout: 5s retries: 5 restart: unless-stopped
volumes: backdrop_files: backdrop_sites: mysql_data:Deploy a MySQL database
backdropCREATE DATABASE backdrop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'backdrop'@'%' IDENTIFIED BY 'your-secure-password';GRANT ALL PRIVILEGES ON backdrop.* TO 'backdrop'@'%';FLUSH PRIVILEGES;Push your repository to GitHub
git initgit add .git commit -m "Initial Backdrop CMS configuration"git remote add origin https://github.com/yourusername/backdrop-cms.gitgit push -u origin mainCreate a new app on Klutch.sh
Configure environment variables
| Variable | Value |
|---|---|
BACKDROP_DB_HOST | Your MySQL hostname (internal Klutch.sh hostname) |
BACKDROP_DB_USER | backdrop |
BACKDROP_DB_PASSWORD | Your secure database password |
BACKDROP_DB_NAME | backdrop |
BACKDROP_DB_PORT | 3306 |
Configure the internal port
Set up persistent storage
| Mount Path | Size |
|---|---|
/var/www/html/files | 10 GB |
/var/www/html/sites | 5 GB |
Deploy your application
https://your-app.klutch.shAfter deployment, complete the Backdrop CMS installation:
Access the installation wizard
https://your-app.klutch.shChoose installation profile
Verify requirements
Database configuration
| Field | Value |
|---|---|
| Database name | backdrop |
| Database username | backdrop |
| Database password | Your password |
| Host | Your MySQL hostname |
| Port | 3306 |
Configure site information
Complete installation
Backdrop CMS provides intuitive content management:
Add a new content type
Add fields to your content type
Create new content
Backdrop’s layout system allows visual page building:
Access layout administration
Edit a layout
Backdrop has a built-in installer for add-ons:
Install from the admin interface
Enable the module/theme
Configure users, roles, and permissions:
Create user roles
Configure permissions
Add users
Backdrop’s configuration management allows you to export and import site settings:
Export configuration
Import configuration
Optimize your Backdrop site:
Enable caching
Configure cache lifetime
Update Regularly
Keep Backdrop core and modules updated for security patches
Strong Passwords
Use strong passwords for admin and database accounts
HTTPS Only
Klutch.sh provides automatic SSL certificates
Limit Permissions
Grant only necessary permissions to each role
Enable Backdrop’s security features:
Configure text formats
Review user permissions
# Export databasemysqldump -u backdrop -p backdrop > backdrop_backup.sql
# Import databasemysql -u backdrop -p backdrop < backdrop_backup.sqlThe persistent volumes contain:
/var/www/html/files - Uploaded content/var/www/html/sites - Configuration and site-specific dataBackdrop provides a built-in upgrade path from Drupal 7:
Prepare your Drupal 7 site
Perform the upgrade
update.php to perform database migrationsSee the Backdrop upgrade documentation for detailed instructions.
Common issues and solutions:
| Issue | Cause | Solution |
|---|---|---|
| White screen | PHP error | Check logs, enable error reporting |
| Database connection failed | Wrong credentials | Verify BACKDROP_DB_* environment variables |
| Clean URLs not working | mod_rewrite disabled | Ensure Apache mod_rewrite is enabled |
| Permission denied | File permissions | Check ownership of sites and files directories |
| Modules not installing | Disk space | Check persistent volume size |
Monitor logs through the Klutch.sh dashboard:
View application logs
Check Backdrop’s status report:
View status report