OpenLogs

All tools

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

espocrm/espocrm

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

Config check passed docker compose config exited 0 on this exact file on 2026-10-22.
installation.md Version 1
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

  1. 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.

  2. 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.

  3. 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.

  4. Start it (github.com/espocrm/documentation/blob/83c4d13/docs/administration/docker/installation.md)
    docker compose up -d
  5. 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

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)