reach-digital / docker-devbox
Reach Digital Docker+本地混合开发环境。
Requires
- dev-master
- v4.2.0
- v4.1.1
- v4.1.0
- v4.0.0
- v3.17.1
- v3.17.0
- v3.16.0
- v3.15.0
- v3.14.0
- v3.13.0
- v3.12.0
- v3.11.0
- v3.10.0
- v3.9.0
- v3.8.0
- v3.7.1
- v3.7.0
- v3.6.0
- v3.5.0
- v3.4.1
- v3.4.0
- v3.3.0
- v3.2.0
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.2
- v3.0.1
- v3.0.0
- v2.1.0
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.1.1
- v1.1.0
- v1.0.0
- dev-dependabot/npm_and_yarn/micromatch-4.0.8
- dev-hnsr-update-install-instructions
This package is auto-updated.
Last update: 2024-08-30 04:34:53 UTC
README
Docker用于服务,PHP本地运行。无需同步,无心理负担,无性能损失。 php
、nginx
、https
、http/2
、varnish
、mysql
、elasticsearch
、rabbitmq
、mailhog
理由
Docker易于使用,Docker可扩展,我们热爱Docker,但Docker的卷挂载速度较慢,我们不能忍受缓慢。
所有Docker开发箱的问题在于它们需要在VM内部运行PHP。VM中的PHP的问题是文件需要在VM中可用,但它还需要在VM外部有文件,因为像PHPStorm这样的程序不接受网络驱动器。
同步比不同步慢。 docker-sync、unison、mutagen 提供了良好的同步解决方案,但总是比不同步慢。
然而,同步需要额外的硬盘空间和额外的心理负担:我的文件是否已同步?我的同步是否损坏?是否有同步冲突?为什么那个文件会出现在这里?我应该在哪里执行我的PHP CLI脚本?我应该在哪里运行node CLI?为什么我的系统这么慢?同步很糟糕。
目标
- 对于没有任何后端技能的前端开发者来说,应该能够轻松地设置开发环境。
- 后端开发者应该能够添加或升级服务。
- 后端开发者应该能够通过版本控制将更改传播到团队的其他成员。
原则
- 无魔法:尽可能少的CLI工具将自动“修复”事情。不要使用现有工具的包装器:docker等。例外:PHP本地运行,需要设置。
- 声明式:开发者应该定义最终状态,而不是运行升级脚本(因此,使用docker)。
- 最小化:尽可能少地使用CPU周期和内存。
要求
- 最近的OSX
全局安装(仅一次)
清理您的系统
由于我们在本地运行一些事情,现在可能是清理一些东西的好时机。
- 运行
brew doctor
并确保您没有错误。 - 运行
brew update
以更新到最新版本。
您不应该有任何服务正在运行,例如。
php
:使用brew list | grep php
找到它们,使用brew uninstall —f <packages>
卸载它们。使用强制标志,您将删除所有已安装的公式版本。httpd
: 禁用Apache,它是OSX本地自带的。 https:/// 不应返回任何内容。mysql
:卸载或禁用mysql,或者至少确保它不在默认的MySQL端口上运行。nginx
:卸载
查看 ~/.bash_profile
或 ~/.zshrc
并确保它不包含对 $BREW_PREFIX/Cellar/php*
的任何引用。
安装PHP和php-fpm服务
由于我们正在运行混合docker+本地系统,我们需要设置PHP以本地运行。为此提供了一个install.sh
脚本,您可以在克隆此存储库后在本地上运行它。
您也可以直接从GitHub运行它(这存在一些安全风险)
# Cleans existing brew php (will not remove Valet stuff) + installs php on macOS /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ho-nl/docker-development-box/master/install.sh)"
将安装多个php-fpm服务,每个版本一个(端口:9072、9073、9074等),以及每个版本带有xdebug的服务(端口:9172、9173、9174等)。
切换PHP版本
您可以使用brew link
来切换CLI PHP版本。例如,切换到8.2:
brew unlink php@8.2 && brew link --force --overwrite php@8.2
现在应该显示正确的版本(使用php -v
检查)。如果不行,可能仍然有版本已链接,或者您的~/.bash_profile需要清理,或者您需要重新打开CLI。
为了方便地在版本之间切换,您可以设置别名,如下所示:
alias link-php74='brew unlink php@7.4 && brew link --force --overwrite php@7.4' alias link-php81='brew unlink php@8.1 && brew link --force --overwrite php@8.1' alias link-php82='brew unlink php@8.2 && brew link --force --overwrite php@8.2'
安装Docker
- 安装Docker for Mac的最新版本。
- 启动Docker
- 从备份中排除
~/Library/Containers
brew install ctop
:可以用来显示容器指标。- 打开Docker -> 预设
- 将内存设置为6-8 GB
安装nfs
下面-mapall=501:20
部分指的是您的用户ID(501
)和组ID(staff
20
)。如果您的用户ID不是501
,您可能需要调整您的用户ID。您可以通过运行id
来检查。
sudo nano /etc/exports
添加:/System/Volumes/Data -alldirs -mapall=501:20 localhost
sudo nano /etc/nfs.conf
添加:nfs.server.mount.require_resv_port = 0
sudo nfsd restart
安装本地证书
- 下载原始.pem文件(打开原始,然后按CMD + S)
- ./hitch/*.localhost.reachdigital.io.pem
- 打开keychain.app,添加此文件(您可以将此文件拖放到keychain app的
登录
选项卡下)。 - 打开证书并信任证书(通过右键单击条目,选择“获取信息”,然后在“信任”部分选择“始终信任”)
您现在已经完成了全局安装 🎉
项目安装
这涵盖了最初将docker-devbox支持添加到Magento项目的操作;如果您的项目已经添加了docker-devbox支持,请参阅项目的README。
- 在项目中安装(并提交)此包:
composer require reach-digital/docker-devbox ^4.0.0
- 安装
static-content-deploy
补丁并删除现有的静态链接内容:rm -rf pub/static/*/*
。 - 将提供的
docker-compose.example.yml
文件复制到docker-compose.yml
- 将来更新docker-devbox包时,您可能需要检查示例文件中的更改,并将其包含在您项目的副本中。
- 根据您的项目需求更改
docker-composer.yml
,并将此文件作为项目的一部分提交- 更改
FPM_PORT
和FPM_XDEBUG
变量以适应nginx
服务的正确PHP版本
- 更改
- 您可以使用env.php作为您本地env.php的基础,它与所有docker服务兼容
- 更改
crypt.key
值(从现有的生产环境或从最初生成的env.php
中获取,如果这是一个全新的项目) - 更改基本URL(
system.default.web.*.base_url
)
- 更改
使用方法
- 启动:
docker-compose up -d
- 日志:
ctop
- 停止:
docker-compose down
您现在已设置所有服务 🎉。请参阅以下各个服务以设置URL、缓存等。
删除数据(mysql/elasticsearch)
docker-compose down
rm -rf var/.esdata/*
rm -rf var/.mysqldata/*
docker-compose up -d
请确保MySQL初始化数据目录大约需要一分钟或两分钟时间 - 在这段时间内,它将不接受连接。
mysql、elasticsearch、rabbitmq、mailhog等的设置
如何使用Xdebug?
- Web: 当您安装了Xdebug助手并且PHPStorm正在监听连接时,Xdebug默认应该可以正常工作。
- 命令行:您可以在
~/.bash_profile
或~/.zshrc
中添加以下别名,这将自动检测您的活动PHP版本,并允许您使用类似phpd bin/magento ...
的方式调试。alias phpd="XDEBUG_SESSION=1 php -c \$(brew --prefix)/etc/php/\$(php -v | head -n1 | cut -c 5-7)/php-xdebug.ini"
- 测试:在PhpStorm中创建一个本地解释器,您正在寻找的PHP版本应该会被建议。配置
🐞 Xdebug路径:
以启用xdebug(从安装脚本的输出中)。路径可能是类似/usr/local/Cellar/php/7.4.3/pecl/20190902/xdebug.so
的路径。您可以在您的php-xdebug.ini
中查找确切的路径。
如何设置我的cron?
日志在哪里可以找到?
- 对于所有其他服务,启动
ctop
并在键盘上按<-
。 - phplogs:
tail -f `brew --prefix`/var/log/php*
(可能为空,因为它只会输出真正的错误)
如何设置URL/https?
仅通过hitch使用https。Docker容器不支持http,只支持https。
bin/magento config:set --lock-env web/unsecure/base_url https://blabla.localhost.reachdigital.io/
bin/magento config:set --lock-env web/secure/base_url https://blabla.localhost.reachdigital.io/
# You can use any domain that points to 127.0.0.1, you can't use https:// because Magento can't handle that.
# *.localhost.reachdigital.io always resolves to 127.0.0.1
如何设置多个网站?
为了使我们的nginx设置能够与多个网站一起工作,我们需要将nginx环境参数MAGE_RUN_TYPE
从store
更改为website
。
为了定义我们的网站或商店视图代码,我们必须添加一个新的配置文件,例如nginx-map.conf
,$MAGE_RUN_CODE
是相关的website_code
或storeview_code
。
map $http_host $MAGE_RUN_CODE {
default '';
example-dutch.localhost.reachdigital.io 'example_dutch';
example-german.localhost.reachdigital.io 'example_german';
}
将文件路径添加到nginx卷中,例如
volumes: - ./nginx-map.conf:/etc/nginx/conf.d/map.conf:ro
现在您的网站或商店视图应该可用。
有关更多信息,请参阅magento文档:https://experienceleague.adobe.com/docs/commerce-operations/configuration-guide/multi-sites/ms-nginx.html
如何使用和设置Varnish?
默认使用https://www.varnish-software.com/缓存。
bin/magento setup:config:set --http-cache-hosts=127.0.0.1:6081
bin/magento config:set --lock-config system/full_page_cache/caching_application 2
- 您可以使用
bin/magento cache:clean
或cache:flush
来刷新Varnish。 - 您可以使用
CMD+SHIFT+R
绕过Varnish的任何页面。 - 您可以使用端口6082和
docker-devbox-varnish-secret
作为共享密钥来连接到Varnish管理界面。
如何设置Redis?
php bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-db=0 --cache-backend-redis-port=6379
php bin/magento setup:config:set --session-save=redis --session-save-redis-db=2 --session-save-redis-port=6379
当bin/magento
损坏时,如何直接刷新Redis?docker-compose exec redis redis-cli flushall
如何设置ElasticSearch?
bin/magento config:set --lock-config catalog/search/enable_eav_indexer 0
bin/magento config:set --lock-config catalog/search/engine [elasticsearch7 OR elasticsuite]
bin/magento config:set --lock-env catalog/search/elasticsearch6_server_port 9200
bin/magento config:set --lock-env catalog/search/elasticsearch6_server_hostname localhost
如何设置MailHog?
截至Magento 2.4.6,不再需要第三方SMTP发送模块。以下配置更改将确保邮件被发送到Mailhog
bin/magento config:set --lock-env system/smtp/disable 0
bin/magento config:set --lock-env system/smtp/transport smtp
bin/magento config:set --lock-env system/smtp/host localhost
bin/magento config:set --lock-env system/smtp/port 1025
对于2.4.6之前的magento版本,请参阅https://github.com/ho-nl/docker-development-box/tree/741d193a68200c976cd13987a986d7063a984b1d?tab=readme-ov-file#how-do-i-set-up-mailhog
Mailhog网络界面在https://:8025/。
如何设置RabbitMQ?
bin/magento setup:config:set --amqp-host=localhost --amqp-port=5672 --amqp-user=guest --amqp-password=guest
https://:15672
如何设置Ngrok?
Ngrok通过安全隧道将本地服务器暴露给公网。
https://:4551
Update base urls with tunnel url shown on webpage.
默认情况下,启动了一个未注册的会话,这将限制每分钟的连接数。使用环境参数添加您的authtoken将为您提供更多功能和更长的会话时间。
- PARAMS=http -region=eu --authtoken=<token> nginx:80
如何设置Sphinx?
暂无支持。
如何直接通过SSH连接到我的容器?
- 打开
ctop
- ⮐ 在您的服务上
执行shell
请注意,容器尽可能精简,因此并非所有常见工具都可用,但您应该能够应对。
我想为服务创建一个自定义配置。
所有设置都是通过docker-compose.yml文件进行的。您在那里可以看到配置文件的路径。
- 更改到您的自定义配置文件路径。
- 运行
docker-compose down && docker-compose up -d
- 更改应该已应用,检查
ctop
以确认您的容器是否能够启动。
如何重启php-fpm?
pkill php-fpm
提交
提交通过https://github.com/conventional-changelog/commitlint进行验证
Gittower:Gittower无法正确读取您的PATH变量,因此提交验证不工作。使用gittower .
来打开此仓库。
故障排除
Compose文件'./docker-compose.yml'无效
错误:Compose文件'./docker-compose.yml'无效,因为:对于services.mailhog不支持配置选项'platform'
请更新Docker以修复此错误。此错误发生是因为您的Docker版本过低,不支持platform
选项。此选项用于docker-development-devbox的较新版本,以启用对Intel和Apple Silicon MacBook的支持。
docker-composer和/或ctop无法连接到Docker守护进程
错误:无法连接到Docker守护进程。您可能需要启动Docker for Mac。
这可能发生在您从旧版本的Docker升级后。在较新版本的Docker中,可以通过连接到守护进程的套接字文件已移动到~/.docker/run/docker.sock
。像ctop
和docker-composer
这样的程序使用/var/run/docker.sock
的符号链接,它可能仍然指向旧路径。
要更正此问题,请运行以下命令
sudo ln -sf ~/.docker/run/docker.sock /var/run/docker.sock