Неустранимая ошибка PHP: Uncaught RuntimeException: невозможно создать каталог Doctrine Proxy при чистой установке SuiteCRM

у меня возникла проблема с новой установкой SuiteCRM 8.6 с докеризацией, которая возвращается каждый раз, когда я пытаюсь восстановить кеш из пользовательского интерфейса:

Неустранимая ошибка PHP: Uncaught RuntimeException: невозможно создать каталог прокси-сервера Doctrine «/bitnami/suitecrm/cache/prod/doctrine/orm/Proxies».

После многих дней тестирования я понял, что проблема, по-видимому, связана с несовместимостью между SuiteCRM (Symphony) и привязкой Docker.

Я тестировал разными способами:

  1. Разрешения и право собственности на файлы проверяются дважды. Имейте в виду, что восстановление кеша из пользовательского интерфейса запускается пользователем Apache (www-data), а владельцем файла и группой является www-data:www-data.

  2. Проблема возникает каждый раз, когда я работаю с привязкой Docker, но, как ни странно, работает отлично, если я попробую использовать официальную версию Bitnami без привязки. Если я установлю привязку монтирования в этой установке, проблема возникнет снова.

Я обратился за помощью на официальный форум поддержки здесь и GitHub, но безуспешно.

У кого-нибудь есть идеи о том, как решить эту проблему?

Заранее спасибо.

Редактируйте, я даю вам дополнительную информацию.

Мой Докерфайл:

FROM ubuntu:24.04

ARG USER_ID=1000

ENV TZ=Europe/Rome
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update
RUN apt -y upgrade
RUN apt-get install vim -y
ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get install apache2 -y

RUN apt -y install ca-certificates apt-transport-https software-properties-common
RUN add-apt-repository ppa:ondrej/php
RUN apt-get -y update
RUN apt-get install -y php8.2 libapache2-mod-php8.2
RUN apt-get install -y php8.2-fpm libapache2-mod-fcgid
RUN apt-get install -y php8.2-mysql
RUN apt-get install -y php8.2-curl php8.2-intl php8.2-zip php8.2-imap php8.2-gd
RUN apt-get install -y slapd ldap-utils php-ldap php8.2-ldap php8.2-soap
RUN apt-get install -y php8.2-xdebug
RUN apt install -y php8.2-xml php8.2-mbstring
RUN apt install -y zlib1g-dev libxml2-dev

RUN apt-get update && apt-get install -y \
    gnupg \
    g++ \
    procps \
    openssl \
    git \
    unzip \
    libzip-dev \
    libfreetype6-dev \
    libpng-dev \
    libjpeg-dev \
    libicu-dev  \
    libonig-dev \
    libxslt1-dev \
    acl \
    && echo 'alias sf = "php bin/console"' >> ~/.bashrc


RUN a2enmod rewrite
RUN a2enconf php8.2-fpm


RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y nodejs \
    npm

RUN npm install -g @angular/cli
RUN npm install --global yarn

RUN usermod -u ${USER_ID} www-data

COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer


CMD ["apachectl", "-D", "FOREGROUND"]

EXPOSE 80
EXPOSE 9000

Мой docker-compose.yml

services:
  suitecrm:
    container_name: suitecrm-mca
    build: .
    networks:
      - suitecrm_net
    volumes:
      #SuiteCRM Application Folder
      - ./www:/var/www/html:delegated
      #PHP config
      - ./docker/config/php/php.ini:/etc/php/8.2/apache2/php.ini
      - ./docker/config/php/php.ini:/etc/php/8.2/cli/php.ini
      #APACHE config
      - ./docker/config/apache/sites.conf:/etc/apache2/sites-enabled/sites.conf
      #APACHE Log Folder
      - ./logs/apache:/var/log/apache2/
      #PHP Log Folder
      - ./logs/php:/var/log/php/
      #PHP Log Folder
      - ./logs/xdebug:/tmp/
      #XDebug settings
    extra_hosts:
      - "host.docker.internal:host-gateway"
    env_file:
      - .env
    ports:
      - "80:80"

  mysql:
    container_name: mysql-mca
    image: mysql:8.0
    ports:
      - "3306:3306"
    env_file: .env
    environment:
      - MYSQL_ROOT_PASSWORD=suitecrm
      - MYSQL_USER=suitecrm
      - MYSQL_PASSWORD=suitecrm
      - MYSQL_DATABASE=suitecrm
    volumes:
      - ./docker/data/mysql:/var/lib/mysql:delegated
    networks:
      - suitecrm_net
networks:
    suitecrm_net:
        driver: bridge

Если вы считаете, что это связано с докером, вам следует включить некоторые детали настройки докера. Ваше привязное монтирование доступно только для чтения? docs.docker.com/storage/bind-mounts Каковы разрешения в исходном каталоге? Сопоставляются ли uids с одним и тем же значением? Если вы сделаете тест chmod 777, он сработает?

rand'Chris 02.06.2024 23:23

Привет @rand'Chris, спасибо за вопросы. Да, я думаю, это связано с Docker, потому что образ битнами с нуля работает отлично, и проблемы начинаются только тогда, когда я использую монтирование привязки. Мое монтирование привязки является двунаправленным, и я уже пробовал с помощью RUN usermod -u ${USER_ID} www-data (когда USER_ID также пытался с идентификаторами 1000, 33 и 501), но безуспешно. Chmod 777 не помог. Я редактирую вопрос, добавляя дополнительную информацию, которую вы задали.

Luca Pisoni 03.06.2024 01:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение состоит в том, чтобы «исключить» папку /cache из монтирования привязки docker-compose.yml, как показано ниже:

services:
  suitecrm:
    container_name: suitecrm
    build: .
    volumes:
      #SuiteCRM Application Folder
      - ./www:/var/www/html:delegated
      - /var/www/html/cache/   #Anonymous volume inside the existing one

Таким образом, подпапка кэша может заново создавать прокси-классы при перестроении и восстановлении.

Спасибо.

Другие вопросы по теме