
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本仓库帮助您部署基于Docker的Sugar开发全栈,满足不同平台组合的所有平台要求。
有几个可用的栈,每个栈本身包含多种平台组合。您可以通过以下链接了解特定栈的更多信息:
您可以在项目的stack目录中找到其他栈。
主要有两种类型的栈:
有多个作为Docker容器的栈组件,执行不同的任务。并非所有栈组件都可能在特定的栈设置中使用。
cron.php,并且自上次运行以来将尝试每60秒运行一次。此容器用于开发期间所需的任何其他CLI执行/etc/hosts中添加条目"docker.local",指向您机器的IP(如果在本地或运行Docker的VM中运行栈,可能是127.0.0.1)git clone https://github.com/esimonetti/SugarDockerized.git sugardocker克隆仓库,并使用cd sugardocker进入sugardocker目录./utilities/setownership.sh以设置数据目录的正确所有权<stack yml filename>运行docker-compose -f <stack yml filename> up -d。例如,如果我们选择stacks/sugar8/php71.yml,您将运行docker-compose -f stacks/sugar8/php71.yml up -d主要栈适用于Sugar 9.0版本及其所有平台要求。其他栈与版本8.0、7.9以及仅Sugar Cloud版本(7.10/7.11、8.1、8.2和8.3)的平台要求保持一致。
docker-compose -f <stack yml filename> up -d运行栈docker-compose -f <stack yml filename> down停止栈为了方便启动和停止栈以及在它们之间切换,提供了https://github.com/esimonetti/SugarDockerized#stacksh。
要验证所有组件主机名,只需在栈运行时运行docker ps。
请注意,在此设置中,只有Web服务器或负载均衡器(如果在单Web服务器或集群栈中)和数据库可以从外部访问。其他所有组件仅允许在栈组件内部访问。
Apache Web服务器已启用:
Apache Web服务器的PHP已启用:
如果您使用PHPStorm等IDE,可以在菜单Preference -> Language & Framework -> PHP -> Debug -> DBGp Proxy下设置DBGp代理。示例设置可在下面的截图中找到:
使用Xdebug Helper调试
如果您使用Chrome浏览器,可以安装扩展https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc。准备调试时,点击Xdebug helper上的调试按钮,然后在PHPStorm中点击"Start listening for PHP Debug Connections"
使用Postman调试
可以通过类似的方法通过Postman调试特定的API端点。 在此示例中,我们将调试登录身份验证API端点rest/v11_1/oauth2/token。第一步是在Postman中添加cookie "XDEBUG_SESSION"。该cookie通过Xdebug helper设置,并且该关键字在PHPstorm设置和Xdebug PHP服务器端设置中也被引用。 请参见下面的截图:
会话存储通过Redis容器完成。
如果您注意到Elasticsearch容器未运行(使用docker ps检查),可能需要调整Linux主机设置。
要能够运行Elasticsearch 5及更高版本,需要https://www.elastic.co/guide/en/elasticsearch/reference/5.6/vm-max-map-count.html。要永久完成此更改,请运行:
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
或者可以运行时增加限制:
sudo sysctl -w vm.max_map_count=262144
images/php/XY/apache/ - 带有PHP X.X版本的Apache镜像images/php/XY/cron/ - PHP X.Y版本的镜像,用于后台作业和任何CLI需求images/mysql/XY/ - MySQL X.Y版本的镜像images/elasticsearch/XY/ - Elasticsearch X.Y的镜像images/permissions/ - 权限修复容器的镜像images/loadbalancer/ - Apache负载均衡器的镜像images/jmeter/ - Jmeter的镜像images/sidecar-build/ - 用于构建Sidecar的javascript的镜像images/traefik/ - Traefik镜像,当使用VM时在本地网络中公开Sugarimages/ldap/ - OpenLDAP镜像大多数镜像目前使用Debian Linux。
所有持久存储位于此git仓库的本地检出中的./data目录树内。
./data/app/sugar/中。在Web服务器和cronjob服务器中,位置是/var/www/html/sugar/。./data/app/中的所有内容都可以通过浏览器访问,但Sugar实例文件必须位于./data/app/sugar/中./data/mysql/XY/./data/elasticsearch/XY/./data/redis/./data/ldap/不要更改各种数据子目录的权限,因为这可能导致系统无法正常工作。
Sugar单实例应用程序文件 - 重要说明
此设置旨在仅运行单个Sugar实例。它还要求应用程序文件恰好位于正确的位置,原因如下三个:
由于上述原因,单实例Sugar的文件必须位于./data/app/sugar/(无子目录)中,以便栈设置按预期工作。
如果您确实需要多个实例,只要它们不同时运行,您可以利用提供的工具来复制和交换数据目录。
为了帮助开发,在本仓库的utilities 目录中提供了一组工具。下面提到了一些脚本。
setownership.sh
./utilities/setownership.sh
All directories and files within "data" are now owned by uid:gid 1000:1000
它设置数据目录的正确所有权
stack.sh
./utilities/stack.sh 80 down
./utilities/stack.sh 80 down stacks/sugar8/php71.yml down Stopping sugar-cron ... done Stopping sugar-web1 ... done Stopping sugar-redis ... done Stopping sugar-mysql ... done Stopping sugar-elasticsearch ... done Removing sugar-cron ... done Removing sugar-web1 ... done Removing sugar-redis ... done Removing sugar-mysql ... done Removing sugar-permissions ... done Removing sugar-elasticsearch ... done Removing network sugar8_default No stopped containers
它有助于将作为参数传递的sugar版本的默认栈启动或停止。它需要两个参数:版本号(例如:80、90等)和up/down。
查看配置文件./utilities/stacks.conf,了解脚本的所有可用栈组合。对于一些主要栈,提供了"local"版本的栈,允许本地修改设置和本地docker镜像构建。
runcli.sh
./utilities/runcli.sh "php ./bin/sugarcrm password:weak"
它有助于在CLI容器中执行命令。它要求栈正在运行
backup.sh
./utilities/backup.sh 802_2018_11_21
Backing up sugar to "backups/backup_802_2018_11_21" [sudo] password for docker: Application files backed up on backups/backup_802_2018_11_21/sugar Database backed up on backups/backup_802_2018_11_21/sugar.sql
它将sugar文件的快照保存在backups/backup_802_2018_11_21/sugar上,并将MySQL数据库转储保存在backups/backup_802_2018_11_21/sugar.sql上。
该脚本假设数据库名称是sugar,Web目录也是sugar。该脚本不备份Elasticsearch和/或Redis。
restore.sh
./utilities/restore.sh 802_2018_11_21
Restoring sugar from "backups/backup_802_2018_11_21" sugar-permissions Application files restored Database "sugar" dropped Database restored Debug: Entering directory . Repairing... Repair completed in 9 seconds. System repaired
它从backups/backup_802_2018_11_21/sugar恢复之前的sugar文件快照,并从backups/backup_802_2018_11_21/sugar.sql恢复MySQL。
该脚本假设数据库名称是sugar,Web目录也是sugar。该脚本不恢复Elasticsearch和/或Redis。
copysystem.sh
./utilities/copysystem.sh data_80_clean data_80_clean_copy
Copying "data_80_clean" to "data_80_clean_copy" Copying data_80_clean to data_80_clean_copy Copy completed, you can now swap or start the system
它有助于将完整的data_80_clean内容复制到选择的另一个备份目录(data_80_clean_copy)。它要求栈处于关闭状态(并且它将检查这一点)。当需要同时复制Elasticsearch、Redis等内容时,这非常有用。
swapsystems.sh
./utilities/swapsystems.sh backup_2018_06_28 data_80_clean
Moving "data" to "backup_2018_06_28" and "data_80_clean" to "data" Moving data to backup_2018_06_28 Moving data_80_clean to data You can now start the system with the content of data_80_clean
它有助于将当前的data目录移动到backup_2018_06_28,然后将data_80_clean移动到data,有效地交换当前正在使用的数据。它要求栈处于关闭状态(并且它将检查这一点)
为了始终如一地实现这一点,建议使用单Web服务器栈。
通过运行命令docker logs -f sugar-web1,可以跟踪Apache和/或PHP的访问和错误日志输出
您只需要使用docker start sugar-permissions再次运行权限docker容器。该容器将为您修复文件的权限和所有权,然后终止其执行。
Apache和Cron以sugar用户身份运行。在config_override.php上设置以下选项
$sugar_config['default_permissions']['user'] = 'sugar'; $sugar_config['default_permissions']['group'] = 'sugar';
该应用程序包含一些脚本,旨在方便从命令行进行系统修复。这些脚本将清除各种缓存(包括OPcache和Redis,如果使用的话)。它还将尽可能预热应用程序,以改善首次加载时的浏览器体验。运行修复的cron容器也经过优化,以加快修复处理速度。 要从docker主机运行修复,假设仓库已检出到sugardocker,请执行:
cd sugardocker ./repair
在config_override.php中添加以下选项:
$sugar_config['external_cache_disabled'] = false; $sugar_config['external_cache_disabled_redis'] = false; $sugar_config['external_cache']['redis']['host'] = 'sugar-redis';
确保在您的config/config_override.php组合上没有启用其他缓存机制,否则将它们设置为disabled = true。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务