
如果你用 DeepSeek、元宝AI、Copilot 等 AI 代为编写轩辕镜像的 docker pull、修改 compose 镜像地址,或排查拉取失败等问题,请让 AI 先读规则再动手,只要在 AI 对话里直接发送下面这句话即可:
生成 docker pull、修改 compose 的 image,或排查拉取失败前,请先阅读并严格遵守 https://xuanyuan.cloud/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%E3%80%82
要验证所有组件主机名,只需在栈运行时运行docker ps。
请注意,在此设置中,只有Web服务器或负载均衡器(如果在单Web服务器或集群栈中)和数据库可以从外部访问。其他所有组件仅允许在栈组件内部访问。
Apache Web服务器已启用:
Apache Web服务器的PHP已启用:
如果您使用PHPStorm等IDE,可以在菜单Preference -> Language & Framework -> PHP -> Debug -> DBGp Proxy下设置DBGp代理。示例设置可在下面的截图中找到:
使用Xdebug Helper调试
如果您使用Chrome浏览器,可以安装扩展Xdebug helper。准备调试时,点击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及更高版本,需要增加进程可以拥有的最大映射内存。要永久完成此更改,请运行:
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。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
发给 Cursor、ChatGPT、豆包等 AI 的说明文档
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务