← Проекты

EspoCRM — CRM для клиентов и продаж

EspoCRM — CRM для клиентов и продаж

Открыть страницу

Что сделано

Подготовка системы

sudo apt update && sudo apt upgrade -y
sudo timedatectl set-timezone Europe/Moscow
sudo apt install -y ca-certificates curl ufw

Установка Docker

curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable --now docker

Каталог данных Docker я перенёс на отдельный диск:

sudo mkdir -p /data/docker
echo '{"data-root": "/data/docker", "log-driver": "json-file", "log-opts": {"max-size": "10m", "max-file": "3"}}' | sudo tee /etc/docker/daemon.json
sudo systemctl restart docker

Каталоги и пароли

sudo mkdir -p /data/espocrm && cd /data/espocrm
sudo mkdir -p data/db data/espo-data data/custom data/client-custom
sudo sh -c 'umask 077; printf "DB_ROOT_PASSWORD=%s\nDB_PASSWORD=%s\nADMIN_PASSWORD=%s\n" "$(openssl rand -hex 12)" "$(openssl rand -hex 12)" "$(openssl rand -hex 10)" > .env'

Пароли генерируются случайно и лежат в файле .env с правами 600, в самом compose их нет.

docker-compose.yml

services:
  espocrm-db:
    image: mariadb:11
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MARIADB_DATABASE: espocrm
      MARIADB_USER: espocrm
      MARIADB_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./data/db:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]

  espocrm:
    image: espocrm/espocrm:latest
    restart: unless-stopped
    environment:
      ESPOCRM_DATABASE_HOST: espocrm-db
      ESPOCRM_DATABASE_NAME: espocrm
      ESPOCRM_DATABASE_USER: espocrm
      ESPOCRM_DATABASE_PASSWORD: ${DB_PASSWORD}
      ESPOCRM_ADMIN_USERNAME: admin
      ESPOCRM_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      ESPOCRM_SITE_URL: "https://crm.example.ru"
      ESPOCRM_CONFIG_LANGUAGE: ru_RU
      ESPOCRM_CONFIG_TIME_ZONE: Europe/Moscow
    volumes:
      - ./data/espo-data:/var/www/html/data
      - ./data/custom:/var/www/html/custom
      - ./data/client-custom:/var/www/html/client/custom
    ports:
      - "127.0.0.1:8080:80"
    depends_on:
      espocrm-db:
        condition: service_healthy

  espocrm-daemon:
    image: espocrm/espocrm:latest
    restart: unless-stopped
    volumes:
      - ./data/espo-data:/var/www/html/data
      - ./data/custom:/var/www/html/custom
      - ./data/client-custom:/var/www/html/client/custom
    entrypoint: docker-daemon.sh
    depends_on:
      - espocrm

Запуск

cd /data/espocrm
sudo docker compose up -d
sudo docker compose ps

Первый запуск занимает около минуты: EspoCRM создаёт таблицы и учётную запись администратора. Войти можно с логином admin и паролем из файла .env.

Одна неприятность при установке

В свежих версиях образа нельзя монтировать весь каталог /var/www/html одним томом. Контейнер сразу останавливается с сообщением про «legacy installation method», а фоновый демон пишет, что не нашёл daemon.php. Лечится тремя отдельными томами (data, custom и client/custom), как в файле выше.

Что настроить после установки