sudo apt update && sudo apt upgrade -y
sudo timedatectl set-timezone Europe/Moscow
sudo apt install -y ca-certificates curl ufwcurl -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 dockersudo 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 их нет.
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:
- espocrmcd /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), как в файле выше.
data/