EspoCRM
Customer relationship management web app for contacts, accounts, leads and sales.
- Replaces
-
Paid CRM services, such as Salesforce.
All open-source alternatives to Salesforce
- Difficulty
-
Difficulty: Medium
4 services (1 database or broker: mariadb), 4 volume mounts, no env values to set, no elevated host access. Heuristic score 5 of 11: medium.
- Stack
PHP (language), MariaDB (database)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
AGPL-3.0(OSI-approved open source)Read from github.com/espocrm/espocrm/blob/ddd727b/LICENSE.txt
- Business model
-
Unknown
The README at the pinned commit does not state a business model, so it stays unknown.
Source: github.com/espocrm/espocrm/blob/ddd727b/README.md, read on .
- Repository
GitHub stats
- Stars
- 3,508
- Forks
- 1,014
- Open issues and pull requests
- 66
- Last push
- 2026-10-22
- Latest release
- 10.0.10
- Released
- 2026-10-14
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as AGPL-3.0.
Compose file
services:
espocrm-db:
image: mariadb:latest
container_name: espocrm-db
environment:
MARIADB_ROOT_PASSWORD: database_root_password
MARIADB_DATABASE: espocrm
MARIADB_USER: espocrm
MARIADB_PASSWORD: database_password
volumes:
- espocrm-db:/var/lib/mysql
restart: unless-stopped
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 20s
start_period: 10s
timeout: 10s
retries: 3
espocrm:
image: espocrm/espocrm:latest
container_name: espocrm
environment:
ESPOCRM_DATABASE_HOST: espocrm-db
ESPOCRM_DATABASE_USER: espocrm
ESPOCRM_DATABASE_PASSWORD: database_password
ESPOCRM_ADMIN_USERNAME: admin
ESPOCRM_ADMIN_PASSWORD: admin_password
ESPOCRM_SITE_URL: "http://localhost:8080"
volumes:
- espocrm-data:/var/www/html/data
- espocrm-custom:/var/www/html/custom
- espocrm-custom-client:/var/www/html/client/custom
restart: unless-stopped
depends_on:
espocrm-db:
condition: service_healthy
healthcheck:
test: ["CMD", "bin/command", "app-check"]
start_period: 20s
interval: 60s
timeout: 20s
retries: 3
ports:
- 8080:80
espocrm-daemon:
image: espocrm/espocrm:latest
container_name: espocrm-daemon
volumes_from:
- espocrm
restart: unless-stopped
entrypoint: docker-daemon.sh
depends_on:
espocrm:
condition: service_healthy
healthcheck:
test: ["CMD", "bin/command", "app-check"]
start_period: 20s
interval: 180s
timeout: 20s
retries: 3
espocrm-websocket:
image: espocrm/espocrm:latest
container_name: espocrm-websocket
environment:
ESPOCRM_CONFIG_USE_WEB_SOCKET: "true"
ESPOCRM_CONFIG_WEB_SOCKET_URL: "ws://localhost:8081"
ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBSCRIBER_DSN: "tcp://*:7777"
ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBMISSION_DSN: "tcp://espocrm-websocket:7777"
volumes_from:
- espocrm
restart: unless-stopped
entrypoint: docker-websocket.sh
depends_on:
espocrm:
condition: service_healthy
healthcheck:
test: ["CMD", "bin/command", "app-check"]
start_period: 20s
interval: 180s
timeout: 20s
retries: 3
ports:
- 8081:8080
volumes:
espocrm-db:
espocrm-data:
espocrm-custom:
espocrm-custom-client:
From a separate packaging repository: github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md.
Compose example from the project's own docs: espocrm/documentation:docs/administration/docker/installation.md.
Install
- Docker with the Compose plugin (github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md#L178-L272)
A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
- Save the code block as docker-compose.yml (github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md)
Use the compose file shown above.
- What the compose file check ran with (github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md#L178-L272)
This compose file is copied unchanged from the code block in https://github.com/espocrm/documentation/blob/83c4d13db362eea1c6f220cdab14304344c3e718/docs/administration/docker/installation.md#L178-L272. The check ran on that block alone. The Docker installation guide shows this docker-compose.yml and tells the reader to run docker compose up -d.
- Start it (github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md)
docker compose up -d - Open the app (github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md)
Open http://localhost:8080. The compose file publishes host port 8080 for the espocrm service.
Compose file check: config_ok on 2026-10-22.
Gotchas and maintenance
Gotchas
- Some images use the latest tag or no tag. Images without a pinned version: espocrm-db: mariadb:latest, espocrm: espocrm/espocrm:latest, espocrm-daemon: espocrm/espocrm:latest, espocrm-websocket: espocrm/espocrm:latest. A later pull can get a different version. (github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md, checked 2026-10-22)
- The compose file publishes host ports. Host ports: 8080 (espocrm), 8081 (espocrm-websocket). A port without a host address listens on all host network interfaces. (github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md, checked 2026-10-22)
Signals
- Open issues and pull requests: 66
- Last push: 2026-10-22 (0 days before this page was built)
- Latest release: 10.0.10 on 2026-10-14 (8 days before this page was built)