dominicwatts / docker-magento2
🐳 包含所有必需的 Magento 2 依赖项的 Docker 容器,通过 Nginx 和 CLI 提供,包括 New Relic 和 Blackfire
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
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
中定义:developer
、production
、default
。MAGENTO_ROOT
- Magento 应该安装到的目录(默认为/var/www/magento
)COMPOSER_GITHUB_TOKEN
- 如果需要,您的 GitHub OAuth tokenCOMPOSER_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'