
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
使用https://expressjs.com/在JavaScript中编写mu.semte.ch服务的模板。
创建一个新文件夹。添加以下Dockerfile:
dockerFROM docker.xuanyuan.run/semtech/mu-javascript-template LABEL maintainer="madnificent@gmail.com"
在app.js中创建您的微服务:
jsimport { app, query, errorHandler } from 'mu'; app.get('/', function( req, res ) { res.send('Hello mu-javascript-template'); } ); app.get('/query', function( req, res ) { var myQuery = ` SELECT * WHERE { GRAPH <http://mu.semte.ch/application> { ?s ?p ?o. } }`; query( myQuery ) .then( function(response) { res.send( JSON.stringify( response ) ); }) .catch( function(err) { res.send( "Oops something went wrong: " + JSON.stringify( err ) ); }); } ); app.use(errorHandler);
查看https://expressjs.com/en/starter/basic-routing.html以了解如何在Express中构建REST API。
database,该数据库在http://database:8890/sparql上暴露SPARQL端点,与其他微服务一致。以下可导入变量可用:
app:可添加路由的https://expressjs.com/en/guide/routing.htmlquery(query) => Promise:向三元组存储发送查询的函数update(query) => Promise:向三元组存储发送更新的函数uuid() => string:生成随机UUID的函数errorHandler(err, req, res, next):https://expressjs.com/en/guide/error-handling.html,需在最后加载sparql:用于创建带插值的查询的https://www.npmjs.com/package/sparql-client-2#using-the-sparql-template-tagsparqlEscapeString(value) => string:在SPARQL中转义字符串的函数sparqlEscapeUri(value) => string:在SPARQL中转义URI的函数sparqlEscapeInt(value) => string:在SPARQL中转义整数的函数sparqlEscapeFloat(value) => string:在SPARQL中转义浮点数的函数sparqlEscapeDate(value) => string:在SPARQL中转义日期的函数,给定值将传递给Date构造函数sparqlEscapeDateTime(value) => string:在SPARQL中转义日期时间的函数sparqlEscapeBool(value) => string:在SPARQL中转义布尔值的函数,给定值将在JavaScript中计算为布尔值(例如,字符串值'0'在JavaScript中计算为false)sparqlEscape(value, type) => string:根据给定类型在SPARQL中转义值的函数,类型必须是'string'、'uri'、'int'、'float'、'date'、'dateTime'、'bool'之一您可以从mu库导入特定属性,或导入整个mu对象。
导入特定变量的示例:
jsimport { app, query } from 'mu'; app.get('/', function( req, res ) { res.send('Hello mu-javascript-template'); } );
导入整个库的示例:
jsimport mu from 'mu'; mu.app.get('/', function( req, res ) { res.send('Hello using full import'); } );
您可以通过在app.js旁包含package.json文件来安装额外依赖。其工作方式与预期一致:只需在package.json的dependencies部分定义包,它们将在构建时自动安装。
可配置以下环境变量:
NODE_ENV(默认:production):取值为"development"或"production",应用启动的环境。在"development"模式下,应用会在更改时热重载。MAX_BODY_SIZE(默认:100kb):请求体的最大大小。参见https://expressjs.com/en/resources/middleware/body-parser.html#limit。日志的详细程度可通过以下环境变量配置:
LOG_SPARQL_ALL:记录所有执行的SPARQL查询(读取和更新)(默认true)LOG_SPARQL_QUERIES:记录执行的SPARQL读取查询(默认:undefined),覆盖LOG_SPARQL_ALLLOG_SPARQL_UPDATES:记录执行的SPARQL更新查询(默认undefined),覆盖LOG_SPARQL_ALLDEBUG_AUTH_HEADERS:调试https://github.com/mu-semtech/mu-authorization访问控制相关头(默认`true`)以下值被视为true:["true", "TRUE", "1"]。
在开发模式下运行时,热重载会自动启用。您可以通过在docker-compose.yml中使用正确的链接启动模板,轻松将其嵌入运行中的mu.semte.ch栈。如有需要,开发期间可附加Chrome检查器,提供高级JavaScript调试功能。
开发时,您可以使用模板镜像,将源代码卷挂载到/app并添加到数据库的链接。设置NODE_ENV环境变量为development。服务将在更改时热重载。当在package.json中定义额外依赖时,需要重启容器。
bashdocker run --link virtuoso:database \ -v `pwd`:/app \ -p 8888:80 \ -e NODE_ENV=development \ --name my-js-test \ docker.xuanyuan.run/semtech/mu-javascript-template
在现有mu.semte.ch栈中开发时,最简单的方式是设置开发模式并直接挂载源代码。这便于设置到数据库和调度器的链接。
如有需要,您可以在不同端口上发布微服务,以便无需通过调度器直接访问。在下面的示例中,使用端口8888直接访问服务。我们直接设置源代码路径,确保可以在原始位置开发微服务。
yamlyourMicroserviceName: image: docker.xuanyuan.run/semtech/mu-javascript-template ports: - 8888:80 environment: NODE_ENV: "development" links: - db:database volumes: - /absolute/path/to/your/sources/:/app/
在开发模式下运行时,您可以将Chrome调试器附加到微服务,并像往常一样添加断点。Chrome调试器需要转发端口9229,且服务需运行在开发模式。启动服务后,打开Google Chrome或Chromium,访问chrome://inspect/。
通过docker run运行时,您可以按如下方式访问服务:
bashdocker run --link virtuoso:database \ -v `pwd`:/app \ -p 8888:80 \ -p 9229:9229 \ -e NODE_ENV=development \ --name my-js-test \ docker.xuanyuan.run/semtech/mu-javascript-template
现在打开Chromium,访问chrome://inspect/。服务启动后,本地主机上会出现一个远程目标。
在mu.semte.ch栈中运行时,您可以挂载源代码并连接到已知微服务,如下所示:
yamlyourMicroserviceName: image: docker.xuanyuan.run/semtech/mu-javascript-template ports: - 8888:80 - 9229:9229 environment: NODE_ENV: "development" links: - db:database volumes: - /absolute/path/to/your/sources/:/app/
现在打开Chromium,访问chrome://inspect/。服务启动后,本地主机上会出现一个远程目标。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务