php 在Ubuntu 22.04上对接Magento 2.4.3-p2

klh5stk1  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(129)

bounty还有3天到期。回答此问题可获得+100声望奖励。drakpasanger正在寻找一个答案从一个有信誉的来源

我一直在尝试在我的Ubuntu 22.04上Dockerizing Magento 2.4.3-p2。所以这里是我

`docker-compose.yml
version: '3.0'

services:
  nginx:
    build:
      context: .
      dockerfile: docker/nginx/dockerfile
    ports:
      - '8000:80'
    volumes:
      - ./docker/nginx/conf.d:/etc/nginx/conf.d
      - ./src:/var/www/html
    restart: always

  php-fpm:
    build:
      context: .
      dockerfile: docker/php/dockerfile
    volumes:
      - ./src:/var/www/html 
    depends_on:
      - nginx
  
  db:
    image: mariadb:10.4.13
    ports:
     - 3300:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=magento
      - MYSQL_USER=magento
      - MYSQL_PASSWORD=magento
    volumes:
      - dbdata:/var/lib/mysql
    depends_on:
      - nginx
      - php-fpm

  redis:
    image: redis:6.2-alpine
    ports:
      - "6379:6379"
  
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
    ports:
      - "9200:9200"
    environment:
      - discovery.type=single-node

  memcached:
    image: memcached:1.5
    ports:
      - "11211:11211"

  varnish:
    image: varnish:latest
    ports:
      - "8080:80"
    depends_on:
      - nginx

  composer:
    image: composer:2.3
    volumes:
      - ./magento:/var/www/html
    working_dir: /var/www/html


volumes:
  dbdata:`

`nginx dockerfile

FROM nginx:1.18.0-alpine-perl

ARG APP_ID=1000

RUN addgroup -g "$APP_ID" app \
 && adduser -G app -u "$APP_ID" -h /var/www/html -s /bin/bash -S app
RUN touch /var/run/nginx.pid
RUN mkdir /sock

USER app:app

VOLUME /var/www/html

WORKDIR /var/www/html`

`Nginx conf文件

server {
    listen 80;
    server_name loaclhost

    root /var/www/html; # Magento root directory

    index index.php;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass php-fpm:9000; # Connect to PHP-FPM container
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }
}

`` Php dockerfile

FROM php:7.4.0-fpm-buster

ARG APP_ID=1000
RUN groupadd -g "$APP_ID" app \
  && useradd -g "$APP_ID" -u "$APP_ID" -d /var/www/html -s /bin/bash app

RUN apt-get update && apt-get install -y \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    libwebp-dev \
    libxpm-dev \
    libzip-dev \
    libicu-dev \
    libmcrypt-dev \
    libxslt-dev \
    libxslt1-dev \
    libcurl4-openssl-dev \
    libxml2-dev \
    libonig-dev \
    unzip \
    git \
    nano \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-xpm \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-configure intl \
    && docker-php-ext-install -j$(nproc) intl \
    && docker-php-ext-install -j$(nproc) pdo_mysql \
    && docker-php-ext-install -j$(nproc) xsl \
    && docker-php-ext-install -j$(nproc) zip \
    && docker-php-ext-install -j$(nproc) bcmath \
    && docker-php-ext-install -j$(nproc) soap \
    && docker-php-ext-install -j$(nproc) sockets

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

COPY . /var/www/html

EXPOSE 9000

CMD ["php-fpm"]

WORKDIR /var/www/html`

我把每个集装箱都检查了一遍。但是当我运行sudo docker run --rm -it --volume $(pwd)/src:/var/www/html composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.3-p2 . --ignore-platform-req=ext-intl
在本地安装Magento。我得到一个错误。
Problem 1 - Root composer.json requires magento/product-community-edition 2.4.3-p2 -> satisfiable by magento/product-community-edition[2.4.3-p2]. - magento/product-community-edition 2.4.3-p2 requires php ~7.3.0||~7.4.0 -> your php version (8.2.10) does not satisfy that requirement.
虽然我在我的设置中使用了php:7.4.0-fpm-buster。为了避免confit,我也从本地机器上清除了PHP。我应该怎么做才能解决这个问题?

nkcskrwz

nkcskrwz1#

有多种方法可以解决与容器化编写器调用的PHP平台版本不匹配的错误。
在回答您的问题中的初始composer项目配置创建语句时,我能够找到(composer create-project),添加--ignore-platform-reqs命令行参数应该可以防止错误消息。
通常情况下,当您调用composer容器化时,它使用的是容器配置的PHP版本(8.2.10),而不是使用不同的(预期的,更老的7.x PHP版本),该版本可能在不同的容器中,但composer无法检测到,因为Composer已经容器化,并且在这种隔离级别下,composer无法获得任何不同于容器化的PHP版本,并且无法从容器环境中推断**。
然而,有命令行参数/环境参数和composer.json项目(甚至可能是全局)配置设置,可以让你使用命令Composer不依赖于推理,而是坚持你的命令和/或PHP版本和任何其他平台包的配置(也许有点超出你的问题的范围:也包括任何项目包)。
请参阅Composer文档,了解所有composer命令行参数,环境参数(通常称为环境变量),整个composer.json架构以及最后但并非最不重要的所有配置和选项。
您可能还希望遵循构建容器的模式,使用多阶段构建,即使用您的目标PHP的生产版本作为平台版本,将composer.phar(或其等效的可执行文件)复制到容器化构建环境中,在那里创建项目,然后最后将实际结果从该阶段复制到您想要准备挂载的最终映像中。Mind认为您正在匹配您在这里尝试执行的挂载策略,因为根据Mind的类型和挂载顺序,您可能需要应用文件复制操作(例如:在tarball中准备)* 在 * 安装之后。
基于docker-compose.yml的配置应该为您提供所有选项,无论您尝试遵循哪种构建模式,即使您使用的是有点过时的docker版本,只要注意您能够使用docker compose V2。
对于Composer和PHP,请记住容器化,也就是说,docker run将始终位于自己的容器中,并且只能是它提供的映像。

相关问题