Tools: Self-Hosting SuiteCRM with Docker Compose

Tools: Self-Hosting SuiteCRM with Docker Compose

What Is SuiteCRM?

Prerequisites

Docker Image Situation

Docker Compose Configuration

Initial Setup

Configuration

Reverse Proxy

Backup

Troubleshooting

Slow Initial Page Load

Scheduler Jobs Not Running

"File Permission" Errors After Container Restart

Verdict

Related SuiteCRM is an open-source CRM forked from SugarCRM in 2013. It covers sales pipeline management, marketing campaigns, customer support cases, reporting, and workflow automation. With over 4 million downloads, it's the most widely deployed open-source CRM and a genuine Salesforce alternative for teams that want full data control without per-seat licensing. SuiteCRM does not publish an official Docker image. The Bitnami image (bitnami/suitecrm) was the standard choice for years with 9 million+ Docker Hub pulls, but Broadcom moved it to bitnamilegacy/suitecrm in late 2025 — a frozen archive with no security updates. Updated images are only available through Bitnami's paid "Secure Images" subscription. The legacy image is pinned at SuiteCRM 8.1.2 while the upstream project is at 8.9.2 (January 2026). Community Docker projects exist (jontitmus-code/SuiteCRM8_docker, LibreCodeCoop/suitecrm-docker) but none are widely adopted or production-hardened. For production use, a traditional LAMP installation on a VM remains the most supported path. The Docker Compose below uses the legacy Bitnami image, which works for evaluation and small teams. SuiteCRM 7.15.0 ESR (extended support until ~2027) is also available for teams that need stability over new features. Create a docker-compose.yml file: First startup takes 2-5 minutes as SuiteCRM runs its installation routine. Access the CRM at http://your-server-ip:8080. Important note: The bitnamilegacy/suitecrm image is frozen at version 8.1.2 (formerly labeled 8.8.1) and receives no security updates. The upstream SuiteCRM is at version 8.9.2. For production deployments, run SuiteCRM directly on a VM with PHP 8.2+ and Apache/Nginx. The Docker route works well for evaluation and small teams who accept the version gap. Key first-time configuration: SMTP for email notifications: PHP tuning for larger deployments: Point your reverse proxy to http://suitecrm:8080. Set the SUITECRM_HOST environment variable to match your external domain so generated URLs are correct. For a dedicated reverse proxy setup, see Reverse Proxy Guide. Back up the MariaDB database and the SuiteCRM data volume: For general backup strategies, see Backup Strategy. Symptom: First page load after startup takes 30-60 seconds. Fix: This is normal — SuiteCRM compiles its metadata cache on first access. Subsequent loads are much faster. If slowness persists, increase PHP_MEMORY_LIMIT to 512M or higher. Symptom: Workflows, email reminders, and campaign emails don't trigger. Fix: SuiteCRM requires its scheduler to run. Check Admin → Schedulers — all jobs should show "Active." The Bitnami image includes a cron configuration, but verify it's running: docker exec suitecrm cat /etc/cron.d/suitecrm. Symptom: Permission denied errors in SuiteCRM after upgrading or restarting the container. Fix: The Bitnami image expects specific ownership on the data volume. Run: docker exec -u root suitecrm chown -R 1001:1001 /bitnami/suitecrm. SuiteCRM is a full enterprise CRM — it's heavier than lightweight contact managers but handles thousands of accounts and contacts without issues. SuiteCRM is the most feature-complete open-source CRM available. Sales pipelines, marketing campaigns, customer support cases, reporting, and workflow automation — it covers the full Salesforce feature set without per-seat licensing. The learning curve is steep (enterprise CRM complexity is inherent, not a software problem), and the Docker situation is the weakest part: no official image, the Bitnami legacy image is frozen, and community Docker projects are immature. For smaller teams that just need contact management and basic sales tracking, Twenty or EspoCRM offer a more modern UX with simpler Docker setup. SuiteCRM is the answer when you need the full enterprise CRM toolkit and are willing to either accept the legacy Docker image or deploy on a traditional LAMP stack. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Command

Copy

$ services: suitecrm: image: bitnamilegacy/suitecrm:8.8.1-debian-12-r3 container_name: suitecrm -weight: 500;">restart: unless-stopped ports: - "8080:8080" - "8443:8443" environment: # Database SUITECRM_DATABASE_HOST: suitecrm-db SUITECRM_DATABASE_PORT_NUMBER: "3306" SUITECRM_DATABASE_NAME: suitecrm SUITECRM_DATABASE_USER: suitecrm SUITECRM_DATABASE_PASSWORD: change-this-password # CHANGE THIS # Admin account SUITECRM_USERNAME: admin SUITECRM_PASSWORD: change-admin-password # CHANGE THIS SUITECRM_EMAIL: [email protected] # Application SUITECRM_HOST: crm.example.com # CHANGE to your domain ALLOW_EMPTY_PASSWORD: "no" volumes: - suitecrm-data:/bitnami/suitecrm depends_on: - suitecrm-db networks: - suitecrm suitecrm-db: image: mariadb:11.4 container_name: suitecrm-db -weight: 500;">restart: unless-stopped environment: MARIADB_USER: suitecrm MARIADB_DATABASE: suitecrm MARIADB_PASSWORD: change-this-password # Must match above MARIADB_ROOT_PASSWORD: change-root-password # CHANGE THIS volumes: - suitecrm-db:/var/lib/mysql networks: - suitecrm volumes: suitecrm-data: suitecrm-db: networks: suitecrm: driver: bridge services: suitecrm: image: bitnamilegacy/suitecrm:8.8.1-debian-12-r3 container_name: suitecrm -weight: 500;">restart: unless-stopped ports: - "8080:8080" - "8443:8443" environment: # Database SUITECRM_DATABASE_HOST: suitecrm-db SUITECRM_DATABASE_PORT_NUMBER: "3306" SUITECRM_DATABASE_NAME: suitecrm SUITECRM_DATABASE_USER: suitecrm SUITECRM_DATABASE_PASSWORD: change-this-password # CHANGE THIS # Admin account SUITECRM_USERNAME: admin SUITECRM_PASSWORD: change-admin-password # CHANGE THIS SUITECRM_EMAIL: [email protected] # Application SUITECRM_HOST: crm.example.com # CHANGE to your domain ALLOW_EMPTY_PASSWORD: "no" volumes: - suitecrm-data:/bitnami/suitecrm depends_on: - suitecrm-db networks: - suitecrm suitecrm-db: image: mariadb:11.4 container_name: suitecrm-db -weight: 500;">restart: unless-stopped environment: MARIADB_USER: suitecrm MARIADB_DATABASE: suitecrm MARIADB_PASSWORD: change-this-password # Must match above MARIADB_ROOT_PASSWORD: change-root-password # CHANGE THIS volumes: - suitecrm-db:/var/lib/mysql networks: - suitecrm volumes: suitecrm-data: suitecrm-db: networks: suitecrm: driver: bridge services: suitecrm: image: bitnamilegacy/suitecrm:8.8.1-debian-12-r3 container_name: suitecrm -weight: 500;">restart: unless-stopped ports: - "8080:8080" - "8443:8443" environment: # Database SUITECRM_DATABASE_HOST: suitecrm-db SUITECRM_DATABASE_PORT_NUMBER: "3306" SUITECRM_DATABASE_NAME: suitecrm SUITECRM_DATABASE_USER: suitecrm SUITECRM_DATABASE_PASSWORD: change-this-password # CHANGE THIS # Admin account SUITECRM_USERNAME: admin SUITECRM_PASSWORD: change-admin-password # CHANGE THIS SUITECRM_EMAIL: [email protected] # Application SUITECRM_HOST: crm.example.com # CHANGE to your domain ALLOW_EMPTY_PASSWORD: "no" volumes: - suitecrm-data:/bitnami/suitecrm depends_on: - suitecrm-db networks: - suitecrm suitecrm-db: image: mariadb:11.4 container_name: suitecrm-db -weight: 500;">restart: unless-stopped environment: MARIADB_USER: suitecrm MARIADB_DATABASE: suitecrm MARIADB_PASSWORD: change-this-password # Must match above MARIADB_ROOT_PASSWORD: change-root-password # CHANGE THIS volumes: - suitecrm-db:/var/lib/mysql networks: - suitecrm volumes: suitecrm-data: suitecrm-db: networks: suitecrm: driver: bridge -weight: 500;">docker compose up -d -weight: 500;">docker compose up -d -weight: 500;">docker compose up -d environment: SUITECRM_SMTP_HOST: smtp.example.com SUITECRM_SMTP_PORT: "587" SUITECRM_SMTP_USER: [email protected] SUITECRM_SMTP_PASSWORD: smtp-password SUITECRM_SMTP_PROTOCOL: tls environment: SUITECRM_SMTP_HOST: smtp.example.com SUITECRM_SMTP_PORT: "587" SUITECRM_SMTP_USER: [email protected] SUITECRM_SMTP_PASSWORD: smtp-password SUITECRM_SMTP_PROTOCOL: tls environment: SUITECRM_SMTP_HOST: smtp.example.com SUITECRM_SMTP_PORT: "587" SUITECRM_SMTP_USER: [email protected] SUITECRM_SMTP_PASSWORD: smtp-password SUITECRM_SMTP_PROTOCOL: tls environment: PHP_MEMORY_LIMIT: "512M" PHP_POST_MAX_SIZE: "100M" PHP_UPLOAD_MAX_FILESIZE: "100M" environment: PHP_MEMORY_LIMIT: "512M" PHP_POST_MAX_SIZE: "100M" PHP_UPLOAD_MAX_FILESIZE: "100M" environment: PHP_MEMORY_LIMIT: "512M" PHP_POST_MAX_SIZE: "100M" PHP_UPLOAD_MAX_FILESIZE: "100M" # Database -weight: 500;">docker exec suitecrm-db mariadb-dump -u suitecrm -p suitecrm > suitecrm-backup.sql # Application data (config, uploads, custom modules) -weight: 500;">docker run --rm -v suitecrm-data:/data -v $(pwd):/backup alpine tar czf /backup/suitecrm-data.tar.gz /data # Database -weight: 500;">docker exec suitecrm-db mariadb-dump -u suitecrm -p suitecrm > suitecrm-backup.sql # Application data (config, uploads, custom modules) -weight: 500;">docker run --rm -v suitecrm-data:/data -v $(pwd):/backup alpine tar czf /backup/suitecrm-data.tar.gz /data # Database -weight: 500;">docker exec suitecrm-db mariadb-dump -u suitecrm -p suitecrm > suitecrm-backup.sql # Application data (config, uploads, custom modules) -weight: 500;">docker run --rm -v suitecrm-data:/data -v $(pwd):/backup alpine tar czf /backup/suitecrm-data.tar.gz /data - A Linux server (Ubuntu 22.04+ recommended) - Docker and Docker Compose installed (guide) - 4 GB of RAM recommended (2 GB minimum) - 10 GB of free disk space - A domain name (recommended for production use) - Log in with the admin credentials you set in the environment variables - Complete the setup wizard if prompted - Configure your organization details under Admin → System Settings - RAM: ~400-600 MB idle, ~1-2 GB under active use with multiple users - CPU: 2 cores minimum, CPU-intensive during report generation - Disk: 2 GB for the application, 10+ GB recommended with database and attachments - SuiteCRM vs EspoCRM: Which CRM to Self-Host? - SuiteCRM vs Salesforce: Self-Hosted Alternative? - Twenty vs SuiteCRM: Which Should You Self-Host? - How to Self-Host Twenty CRM - How to Self-Host EspoCRM - Best Self-Hosted CRM Tools - Docker Compose Basics - Reverse Proxy Guide - Backup Strategy - Best Self-Hosted Invoicing Tools