I've installed the latest Espo in Ubuntu with docker, and I need install php-intl. What is the best way to do this?
Could a custom Dockerfile be used for this?
Could a custom Dockerfile be used for this?
FROM php:8.4-apache # Copy Composer from the official Composer image COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # Install system dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ libpng-dev \ libjpeg-dev \ libfreetype6-dev \ libzip-dev \ exif \ unzip \ git \ libzmq3-dev \ pkg-config \ netcat-openbsd \ cron \ fonts-dejavu-core \ fonts-dejavu-extra \ libmagickwand-dev # PHP extensions RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install gd zip exif pdo pdo_mysql pcntl posix # Install Imagick RUN pecl install imagick \ && docker-php-ext-enable imagick # ZMQ extension (with fallback manual build) RUN pecl install zmq || ( \ git clone https://github.com/zeromq/php-zmq.git /tmp/php-zmq && \ cd /tmp/php-zmq && phpize && ./configure && make && make install \ ) && docker-php-ext-enable zmq # uncomment when in final production # RUN apt-get clean && rm -rf /var/lib/apt/lists/* RUN echo "* * * * * cd /var/www/html; /usr/local/bin/php -f cron.php > /dev/null 2>&1" | crontab -u www-data - RUN a2enmod rewrite WORKDIR /var/www/html COPY . /var/www/html/ COPY docker/apache.cnf /etc/apache2/sites-available/espocrm.conf RUN a2dissite 000-default.conf \ && a2ensite espocrm.conf COPY docker/apache-timeout.conf /etc/apache2/conf-available/timeout.conf RUN a2enconf timeout.conf RUN mkdir -p /var/www/html/data/cache/application/acl \ && mkdir -p /var/www/html/data/cache/application/aclMap \ && mkdir -p /var/www/html/data/logs RUN chown -R www-data:www-data /var/www/html \ && chmod -R 755 /var/www/html RUN echo "memory_limit = 1024M" > /usr/local/etc/php/conf.d/memory-limit.ini

services:
db:
image: mariadb:latest
container_name: ${CONTAINER_NAME}-db
restart: unless-stopped
environment:
TZ: Europe/London
MARIADB_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MARIADB_USER: ${DB_USER}
MARIADB_PASSWORD: ${DB_PASSWORD}
MARIADB_DATABASE: ${DB_DATABASE}
volumes:
- db-data:/var/lib/mysql
- mysql-logs:/var/log/mysql
- ./docker/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
- ./docker/mysql.cnf:/etc/mysql/conf.d/my_custom.cnf:ro
#- ./my-debug.cnf:/etc/mysql/conf.d/my.cnf
healthcheck:
test: [ "CMD", "healthcheck.sh", "--connect", "--innodb_initialized" ]
interval: 20s
start_period: 10s
timeout: 10s
retries: 3
ports:
- "${DB_PORT:-3307}:3306"
expose:
- "${DB_PORT:-3307}"
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
networks:
- espocrm-net
app:
build: .
image: ${CONTAINER_NAME}:latest
command: apache2-foreground
container_name: ${CONTAINER_NAME}-app
restart: unless-stopped
environment:
TZ: Europe/London
PHP_MEMORY_LIMIT: 512M
PHP_DISPLAY_ERRORS: ${PHP_DISPLAY_ERRORS}
PHP_DISPLAY_STARTUP_ERRORS: ${PHP_DISPLAY_STARTUP_ERRORS}
PHP_ERROR_REPORTING: ${PHP_ERROR_REPORTING}
ESPOCRM_DATABASE_PLATFORM: Mysql
ESPOCRM_DATABASE_HOST: ${CONTAINER_NAME}-db
ESPOCRM_DATABASE_USER: ${DB_USER}
ESPOCRM_DATABASE_PASSWORD: ${DB_PASSWORD}
ESPOCRM_ADMIN_USERNAME: ${ESPOCRM_ADMIN_USERNAME}
ESPOCRM_ADMIN_PASSWORD: ${ESPOCRM_ADMIN_PASSWORD}
ESPOCRM_SITE_URL: ${ESPOCRM_SITE_URL}
APACHE_SERVER_NAME: ${SERVER_NAME}
volumes:
- ./:/var/www/html
- upload:/var/www/html/data/upload
- ./docker/php.ini:/usr/local/etc/php/conf.d/zzz-custom.ini
# - ./docker/php-dev.ini:/usr/local/etc/php/conf.d/zzz-custom.ini
# - ./docker/localhost.crt:/etc/ssl/certs/localhost.crt
# - ./docker/localhost.key:/etc/ssl/private/localhost.key
depends_on:
db:
condition: service_healthy
ports:
- "${WEB_PORT:-80}:80"
healthcheck:
test: ["CMD-SHELL", "curl -kfsS ${SITE_URL}:${WEB_PORT} || exit 1"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
networks:
- espocrm-net
websocket:
image: ${CONTAINER_NAME}:latest
container_name: ${CONTAINER_NAME}-websocket
command: php websocket.php
restart: unless-stopped
environment:
TZ: Europe/London
ESPOCRM_DATABASE_PLATFORM: Mysql
ESPOCRM_DATABASE_HOST: ${CONTAINER_NAME}-db
ESPOCRM_DATABASE_USER: ${DB_USER}
ESPOCRM_DATABASE_PASSWORD: ${DB_PASSWORD}
ESPOCRM_CONFIG_USE_WEB_SOCKET: "true"
ESPOCRM_CONFIG_WEB_SOCKET_PORT: "8080"
ESPOCRM_CONFIG_WEB_SOCKET_DEBUG_MODE: "false"
ESPOCRM_CONFIG_PHP_EXECUTABLE_PATH: "/usr/local/bin/php"
ports:
- "${WEBSOCKET_PORT}:8080"
volumes:
- ./:/var/www/html
depends_on:
- db
healthcheck:
test: ["CMD", "php", "-r", "echo (fsockopen('127.0.0.1', 8080) ? 'OK' : 'FAIL');"]
interval: 30s
timeout: 5s
retries: 3
networks:
- espocrm-net
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
daemon:
image: ${CONTAINER_NAME}:latest
container_name: ${CONTAINER_NAME}-daemon
command: php daemon.php
restart: unless-stopped
environment:
TZ: Europe/London
ESPOCRM_DATABASE_PLATFORM: Mysql
ESPOCRM_DATABASE_HOST: ${CONTAINER_NAME}-db
ESPOCRM_DATABASE_USER: ${DB_USER}
ESPOCRM_DATABASE_PASSWORD: ${DB_PASSWORD}
# Daemon configuration
ESPOCRM_CONFIG_DAEMON_MAX_PROCESS_NUMBER: "5"
ESPOCRM_CONFIG_DAEMON_INTERVAL: "10"
ESPOCRM_CONFIG_DAEMON_PROCESS_TIMEOUT: "36000"
ESPOCRM_CONFIG_PHP_EXECUTABLE_PATH: "/usr/local/bin/php"
volumes:
- ./:/var/www/html
- upload:/var/www/html/data/upload
depends_on:
db:
condition: service_healthy
networks:
- espocrm-net
healthcheck:
test: ["CMD-SHELL", "pgrep -f 'php daemon.php' >/dev/null || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
db-data:
mysql-logs:
upload:
driver: local
driver_opts:
type: nfs
o: addr=192.9.201.130,nfsvers=4
device: ":/volume2/espofiles/upload"
networks:
espocrm-net:
driver: bridge
Comment