dominicwatts/docker-magento2

🐳 包含所有必需的 Magento 2 依赖项的 Docker 容器,通过 Nginx 和 CLI 提供,包括 New Relic 和 Blackfire

安装: 17

依赖者: 0

建议者: 0

安全: 0

星星: 1

关注者: 1

分支: 245

类型:项目

1.0.3 2020-02-06 23:19 UTC

This package is auto-updated.

Last update: 2024-09-14 07:04:53 UTC


README

通过 nginx 和命令行运行 Magento 2 的 Docker 镜像集合。

快速开始

quickstart.sh 使用默认配置涵盖了步骤 3 到 8

1 安装

composer create-project dominicwatts/docker-magento2 ./

或者

git clone git@github.com:DominicWatts/docker-magento2.git ./

2 将以下条目添加到操作系统主机文件中

127.0.0.1 magento2.docker

3 将正确的令牌放入 composer.env

cp composer.env.sample composer.env

使用正确的环境变量编辑 composer.env

4 将正确的令牌放入 auth.json

cp composer/auth.sample.json composer/auth.json

5 将正确的令牌放入 newrelic.ini

cp newrelic/newrelic.sample.ini newrelic/newrelic.ini

6 创建 magento 文件夹

mkdir magento

7 创建 cron 日志文件

touch magento/var/log/cron.log    

8 构建

docker-compose up -d

或者使用特定的配置,例如

docker-compose -f docker-compose.src.71.yml up -d

docker-compose -f docker-compose.src.72.yml run --rm cli

docker-compose -f docker-compose.src.73.yml run --rm cli magento-command

9 安装

9.1 手动安装

手动
Hypernode
wget -qO- https://magento.mirror.hypernode.com/releases/magento2-latest.tar.gz | tar xfz -

或者

wget -qO- https://magento.mirror.hypernode.com/releases/magento-2.3.4.tar.gz | tar xfz -
下载

https://magento.com/tech-resources/download 下载、解压并安装 magento

Magento 放在 ./magento

然后运行命令行安装或网络安装

CLI
 docker-compose run --rm cli magento-command setup:install --admin-firstname Admin --admin-lastname User --admin-email dominic@xigen.co.uk --admin-user admin --admin-password test123 --base-url http://magento2.docker/ --backend-frontname xpanel --db-host db --db-name magento2 --db-user magento2 --db-password magento2 --language en_GB --currency GBP --timezone UTC --use-rewrites 1 --session-save files
网络
http://magento2.docker/setup/

9.2 通过包装器安装

docker-compose run --rm cli magento-installer

如果 magento 文件夹为空,这将尝试通过 composer 安装(耗时)

有用命令

命令行(退出后删除)

docker-compose run --rm cli

通过包装器运行 Magento 命令

docker-compose run --rm cli magento-command

docker-compose run --rm cli magento-command cache:clean

通过包装器安装扩展

docker-compose run --rm cli magento-extension-installer --package-name=dominicwatts/clearstatic Xigen_ClearStatic

检查实例

docker ps

docker-compose ps

重启实例

docker-compose restart

可选配置 mailhog

http://magento2.docker:8025

composer require mageplaza/module-smtp

商店 > 配置 > Mageplaza > SMTP

  • 主机: mail
  • 端口: 1025
  • 协议: none
  • 身份验证: plain
  • 用户名/密码: [空白]

配置

配置通过环境变量驱动。可以在每个 Dockerfile 和每个 bin/ 目录中的命令中找到使用的环境变量的完整列表。

  • PHP_MEMORY_LIMIT - 在 php.ini 中设置的内存限制
  • UPLOAD_MAX_FILESIZE - PHP 和 Nginx 的上传文件大小限制
  • MAGENTO_RUN_MODE - 有效值,如 Magento\Framework\App\State 中定义: developerproductiondefault
  • MAGENTO_ROOT - Magento 应该安装到的目录(默认为 /var/www/magento
  • COMPOSER_GITHUB_TOKEN - 如果需要,您的 GitHub OAuth token
  • COMPOSER_MAGENTO_USERNAME - 您的 Magento Connect 公共身份验证密钥(如何获取
  • COMPOSER_MAGENTO_PASSWORD - 您的 Magento Connect 私有身份验证密钥
  • COMPOSER_BITBUCKET_KEY - 可选 - 您的 Bitbucket OAuth 密钥(如何获取
  • COMPOSER_BITBUCKET_SECRET - 可选 - 您的 Bitbucket OAuth 密钥
  • DEBUG - 在执行时切换 bash 命令中的跟踪;与 Magento 无关
  • PHP_ENABLE_XDEBUG - 当设置为 true 时,它将包含 Xdebug ini 文件作为 PHP 配置的一部分,将其打开。建议仅在需要时切换此选项,因为它会减慢应用程序的速度。
  • UPDATE_UID_GID - 如果设置为 "true",则容器中将修改 www-data 的 uid 和 gid,使其与挂载文件夹中的值匹配。这似乎是解决 OS X 上 virtualbox 问题的必要步骤。

在仓库中有一系列的 docker-compose.yml 示例文件。

CLI 使用方法

一些命令被集成到镜像中,并在 $PATH 中可用。这些是

  • magento-command - 提供了对 bin/magento 命令的安全包装。
  • magento-installer - 在 $MAGENTO_ROOT 环境变量定义的目录中安装和配置 Magento。
  • magento-extension-installer - 使用符号链接从 /extensions/<name> 目录安装 Magento 2 扩展。
  • magerun2 - 对 n98-magerun2.phar 的安全包装,提供了更多有用的命令。更多信息请见此处

建议您将外部文件夹挂载到 /root/.composer/cache,否则每次容器启动时,您都需要等待很长时间才能下载 Magento。

可以通过运行以下命令来触发 CLI 命令

docker-compose run cli magento-installer

可以通过运行以下命令来触发 CLI 容器的 Shell 访问

docker-compose run cli bash

Sendmail

所有镜像都已安装 sendmail,但默认情况下并未启用。要启用 sendmail,请使用以下环境变量

ENABLE_SENDMAIL=true

注意:如果已启用 sendmail,请确保容器使用 docker-compose.yml 中的 hostname 字段或 docker run--hostname 参数分配了主机名。如果容器没有设置主机名,sendmail 将在启动时尝试发现主机名,这将导致长时间阻塞。

实现说明

  • 为了实现一个合理的命令执行环境,容器中包含了一个 docker-environment 脚本,作为 ENTRYPOINT

xdebug 使用

要启用 xdebug,您需要将 PHP_ENABLE_XDEBUG 环境变量切换到 true。然后在使用 docker-compose 时,需要重新启动 fpm 容器,使用 docker-compose up -d 或停止并重新启动容器。

创建 docker 镜像

New Relic 镜像

假设您的 docker hub 仓库是 domw/magento2-php-newrelic

cd php/newrelic/7.1-fpm

docker login

docker build -t domw/magento2-php-newrelic:7.1-fpm ./

docker push domw/magento2-php-newrelic:7.1-fpm

Vanilla 镜像

假设您的 docker hub 仓库是 domw/magento2-php

cd php/src/7.2-fpm

docker login

docker build -t domw/magento2-php:7.2-fpm ./

docker push domw/magento2-php:7.2-fpm

docker-compose

然后编辑 docker-compose.yml 以加载新镜像

fpm:
    hostname: magento2.docker
    image: domw/magento2-php:7.1-fpm
    restart: 'always'
    ports:
      - 9000
    links:
      - db
    volumes_from:
      - appdata
    env_file:
      - ./global.env

Elastic Search

ES 服务

  search:
    image: elasticsearch:6.8.6
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
    volumes:
      - ./elasticsearchdata:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300

ES 监控(Kibana)

  kibana:
    image: elastic/kibana:6.8.6
    links:
      - search
    environment:
      - SERVER_NAME=search:9200
      - ELASTICSEARCH_HOSTS=http://search:9200    
    ports:
      - 5601:5601

注意:kibana:6.x 与 6.x ES 兼容

ES 与 Magento

要配置 Magento 使用 Elasticsearch

Log in to the Magento Admin

Stores > Settings > Configuration > Catalog > Catalog > Catalog Search.

From the Search Engine list, select the correct Elasticsearch version 6. 

Elasticsearch Server Hostname: search

Elasticsearch Server Port: 9200

ES 调试

http://magento2.docker:9200/

http://magento2.docker:9200/_cluster/health

http://magento2.docker:9200/_cat/nodes?v&pretty

http://magento2.docker:9200/_cat/indices?v&pretty

注意:搜索重建索引创建 magento2_product_1_vx 索引

- magento2_product_1_v1
- magento2_product_1_v2

etc

New Relic

验证守护进程

ps -ef | grep newrelic-daemon

状态

/etc/init.d/newrelic-daemon status

启动/停止/重启

/etc/init.d/newrelic-daemon start

/etc/init.d/newrelic-daemon stop

/etc/init.d/newrelic-daemon restart

配置文件

/newrelic/newrelic.ini => /usr/local/etc/php/conf.d/newrelic.ini

运行安装

newrelic-install install

在 Magento 中配置

商店 > 配置 > 一般 > New Relic 监控

部署

这是一个实验性的方法,用于将 docker web 根目录更新到与 git remote 保持一致

cd git

git init --bare

配置远程

ssh://user@127.0.0.1:22/path/to/remote/git

将分支推送到远程

确认 post-receive 钩子详情

/git/hooks/post-receive

测试钩子

sudo chmod 777 ./magento -R

Wide open for local development only

sh git/hooks/post-receive

这触发了 deploy_magento.sh 并设置了钩子中的变量

如果进程卡住

rm deploy.lock

堆栈问题

在安装 Magento 之前,MySQL 无法连接错误

docker-compose down -v

rm mysql/data -R 

docker-compose up -d

等待几分钟,直到数据库初始化完成

有用的别名

alias cli='docker-compose run --rm cli'
alias magento-command='docker-compose run --rm cli magento-command'
alias dcud='docker-compose up -d'
alias dcdv='docker-compose down -v'
alias dreload='docker-compose down -v; docker-compose pull; docker-compose up -d'
alias installer='docker-compose run --rm cli magento-extension-installer'