Mendix:在 docker 容器中启用调试器
Mendix: enabling debugger in docker container
我们将 Mendix 用于我们的一些自定义应用程序;我们正准备将本地系统的部署从 m2ee-tools
迁移到 docker。这是因为 Mendix 从 Centos/RHEL 8 开始停止对 m2ee-tools
的支持,而最新支持的 Centos/RHEL 7 生命周期结束时间约为 2 年(2024 年 6 月)。
我们在概念验证场景中遇到了一个关键点,需要帮助:
如何在 运行 容器中 运行 的 Mendix 应用程序中 enable/disable 调试器?
我们已经发现:
- -e DEBUGGER_PASSWORD=”stringData”
我们知道通过向容器提供变量 DEBUGGER_PASSWORD="stringData" 来在容器启动时触发调试器,但是随后调试器在容器实例的整个生命周期内都处于启用状态,这是不希望的。
- 部分知识:POST请求用于与调试器通信
从一些深入的 analysys 中,我们还发现调试器通常通过对 运行 应用程序的 POST 请求在 运行 Mendix 应用程序上启用。但是,我们目前不知道邮件正文是什么。
我们已经确定了答案。由于找到答案并非易事,原来的问题已经有 3 周没有得到解答,并且收到了赞成票,因此我将把答案添加到这个主题中,以便其他 Mendix 开发人员搜索“docker " + "调试器"。
bash
中交付的解决方案
容器参数化并使用以下命令启动:
docker run -it -p 8088:8080 \
-e ADMIN_PASSWORD='ApplicationAdminPassword1' \
-e DATABASE_ENDPOINT='postgres://pgPassword:pgUser@192.168.0.1:5432/pgDbName' \
-e M2EE_PASSWORD='PasswordForAdministrativeTasks1' \
mendix/mendix-buildpack:v1.2
可以像这样启用调试器:
curl -X POST -u 'MxAdmin:PasswordForAdministrativeTasks1' \
-H "Content-Type: application/json" \
-H "X-M2EE-Authentication: `echo -n 'PasswordForAdministrativeTasks1' | base64`" \
-H "Connection: close" \
-d '{"action": "enable_debugger", "params": {"password": "aRandomPassForDebugger1"}}' \
localhost:8088/_mxadmin/; echo
并且调试器可以正常使用,通过地址 http://applicationHostIP:8088/debugger/ 使用您声明的密码“aRandomPassForDebugger1”。 M2ee-tools 似乎只使用字母数字字符(可能是为了避免在某些上下文或情况下出现特殊字符的问题)——在这种情况下,必须通过延长密码强度来获得密码强度。 M2ee-tools 使用了超过 20 个字符。
第二个动作实际上可以使用多种工具来执行,而不仅仅是使用 curl。
对解决方案的评论
两本手册很有帮助,但需要付出一些努力才能“消化”并转化为启用调试器的方法。可以在 docs.mendix.com and at github.com/mendix.
找到这些手册
如您所见,为了与运行时进行通信,您需要发送带有简单身份验证和附加 header 的 POST 消息。 Mendix 团队已决定从 m2ee-tools 使用的 admin-port 迁移到 docker 容器中可用的服务,该容器位于 application-provisioning web-end 的“_mxadmin”目录中。
注意这部分:
-H "X-M2EE-Authentication: `echo -n 'PasswordForAdministrativeTasks1' | base64`"
这是一个带有 base64 编码密码的 header(是的,在同一 POST 消息中再次提供了相同的密码,只是以不同的形式提供)。您可以将内联(计算 base64)替换为 off-line-made 字符串,在本例中为 UGFzc3dvcmRGb3JBZG1pbmlzdHJhdGl2ZVRhc2tzMQ==
.
请注意,消息的有效负载是一个 json 数据结构。许多 payload-actions 只需要“action”子句,但其他一些额外需要参数(如 enable_debugger)。
与主题相关的操作
- enable_debugger
'{"action": "enable_debugger", "params": {"password": "aStrongPass"}}'
- get_debugger_status
'{"action": "get_debugger_status"}'
- disable_debugger
'{"action": "disable_debugger"}'
- get_admin_action_info
'{"action": "get_admin_action_info"}'
最后列出的操作 (get_admin_action_info) 有可能特别有助于找出许多其他与 runtime-messaging 通信的操作(它 returns 可用操作列表), 所以你自己试试吧。
我们将 Mendix 用于我们的一些自定义应用程序;我们正准备将本地系统的部署从 m2ee-tools
迁移到 docker。这是因为 Mendix 从 Centos/RHEL 8 开始停止对 m2ee-tools
的支持,而最新支持的 Centos/RHEL 7 生命周期结束时间约为 2 年(2024 年 6 月)。
我们在概念验证场景中遇到了一个关键点,需要帮助:
如何在 运行 容器中 运行 的 Mendix 应用程序中 enable/disable 调试器?
我们已经发现:
- -e DEBUGGER_PASSWORD=”stringData”
我们知道通过向容器提供变量 DEBUGGER_PASSWORD="stringData" 来在容器启动时触发调试器,但是随后调试器在容器实例的整个生命周期内都处于启用状态,这是不希望的。
- 部分知识:POST请求用于与调试器通信
从一些深入的 analysys 中,我们还发现调试器通常通过对 运行 应用程序的 POST 请求在 运行 Mendix 应用程序上启用。但是,我们目前不知道邮件正文是什么。
我们已经确定了答案。由于找到答案并非易事,原来的问题已经有 3 周没有得到解答,并且收到了赞成票,因此我将把答案添加到这个主题中,以便其他 Mendix 开发人员搜索“docker " + "调试器"。
bash
中交付的解决方案容器参数化并使用以下命令启动:
docker run -it -p 8088:8080 \
-e ADMIN_PASSWORD='ApplicationAdminPassword1' \
-e DATABASE_ENDPOINT='postgres://pgPassword:pgUser@192.168.0.1:5432/pgDbName' \
-e M2EE_PASSWORD='PasswordForAdministrativeTasks1' \
mendix/mendix-buildpack:v1.2
可以像这样启用调试器:
curl -X POST -u 'MxAdmin:PasswordForAdministrativeTasks1' \
-H "Content-Type: application/json" \
-H "X-M2EE-Authentication: `echo -n 'PasswordForAdministrativeTasks1' | base64`" \
-H "Connection: close" \
-d '{"action": "enable_debugger", "params": {"password": "aRandomPassForDebugger1"}}' \
localhost:8088/_mxadmin/; echo
并且调试器可以正常使用,通过地址 http://applicationHostIP:8088/debugger/ 使用您声明的密码“aRandomPassForDebugger1”。 M2ee-tools 似乎只使用字母数字字符(可能是为了避免在某些上下文或情况下出现特殊字符的问题)——在这种情况下,必须通过延长密码强度来获得密码强度。 M2ee-tools 使用了超过 20 个字符。
第二个动作实际上可以使用多种工具来执行,而不仅仅是使用 curl。
对解决方案的评论
两本手册很有帮助,但需要付出一些努力才能“消化”并转化为启用调试器的方法。可以在 docs.mendix.com and at github.com/mendix.
找到这些手册如您所见,为了与运行时进行通信,您需要发送带有简单身份验证和附加 header 的 POST 消息。 Mendix 团队已决定从 m2ee-tools 使用的 admin-port 迁移到 docker 容器中可用的服务,该容器位于 application-provisioning web-end 的“_mxadmin”目录中。
注意这部分:
-H "X-M2EE-Authentication: `echo -n 'PasswordForAdministrativeTasks1' | base64`"
这是一个带有 base64 编码密码的 header(是的,在同一 POST 消息中再次提供了相同的密码,只是以不同的形式提供)。您可以将内联(计算 base64)替换为 off-line-made 字符串,在本例中为 UGFzc3dvcmRGb3JBZG1pbmlzdHJhdGl2ZVRhc2tzMQ==
.
请注意,消息的有效负载是一个 json 数据结构。许多 payload-actions 只需要“action”子句,但其他一些额外需要参数(如 enable_debugger)。
与主题相关的操作
- enable_debugger
'{"action": "enable_debugger", "params": {"password": "aStrongPass"}}'
- get_debugger_status
'{"action": "get_debugger_status"}'
- disable_debugger
'{"action": "disable_debugger"}'
- get_admin_action_info
'{"action": "get_admin_action_info"}'
最后列出的操作 (get_admin_action_info) 有可能特别有助于找出许多其他与 runtime-messaging 通信的操作(它 returns 可用操作列表), 所以你自己试试吧。