
如果你使用 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://travis-ci.com/Senzing/entity-search-web-app.svg?branch=master](https://travis-ci.com/Senzing/entity-search-web-app) https://img.shields.io/github/license/senzing/entity-search-web-app.svg](https://github.com/Senzing/entity-search-web-app/blob/master/LICENSE)
!截图
这是一个实体搜索应用的实现,它使用Senzing REST API服务器微服务通过Web界面访问Senzing API的功能。
需要安装以下软件:
从https://hub.docker.com/r/senzing/entity-search-web-app%E6%8B%89%E5%8F%96%E6%AD%A4%E5%BA%94%E7%94%A8%E7%9A%84%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%E3%80%82%E7%A4%BA%E4%BE%8B%EF%BC%9A
consolesudo docker pull docker.xuanyuan.run/senzing/entity-search-web-app
从https://hub.docker.com/r/senzing/senzing-api-server%E6%8B%89%E5%8F%96%E6%9C%80%E6%96%B0%E7%9A%84API%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%82%E7%A4%BA%E4%BE%8B%EF%BC%9A
consolesudo docker pull docker.xuanyuan.run/senzing/senzing-api-server
设置这些环境变量值:
consoleexport GIT_ACCOUNT=senzing export GIT_REPOSITORY=entity-search-web-app export GIT_ACCOUNT_DIR=~/${GIT_ACCOUNT}.git export GIT_REPOSITORY_DIR="${GIT_ACCOUNT_DIR}/${GIT_REPOSITORY}"
按照https://github.com/Senzing/knowledge-base/blob/master/HOWTO/clone-repository.md%E4%B8%AD%E7%9A%84%E6%AD%A5%E9%AA%A4%E5%AE%89%E8%A3%85Git%E4%BB%93%E5%BA%93%E3%80%82
通过环境变量或命令行参数指定的配置值:
在docker-compose环境中运行。示例:
consolecd ${GIT_REPOSITORY_DIR} sudo \ docker-compose up senzing-webapp
验证容器是否正在运行且可访问:
在Web浏览器中打开http://localhost:8081%EF%BC%88%E6%88%96%E7%94%A8%E4%B8%BB%E6%9C%BA%E5%90%8D%E6%88%96IP%E6%9B%BF%E6%8D%A2%60localhost%60%EF%BC%89%E3%80%82
或者,使用curl。示例:
consolecurl http://machine-host-name:8081
以下Docker容器通过Docker网络通信。
:thinking: 查找或创建Docker网络。执行以下任一过程。
查找Docker网络。
列出Docker网络。示例:
consolesudo docker network ls
:pencil2: 指定Docker网络。从docker network ls的NAME列中选择值。示例:
consoleexport SENZING_NETWORK=*网络名称*
创建Docker网络。
:pencil2: 指定网络名称。示例:
consoleexport SENZING_NETWORK=sz-api-network
创建Docker网络。示例:
consolesudo docker network create -d bridge ${SENZING_NETWORK}
构造docker run的参数。示例:
consoleexport SENZING_NETWORK_PARAMETER="--net ${SENZING_NETWORK}"
启动senzing-api-server。示例:
consolesudo docker run \ --interactive \ --name=senzing-api-server \ --publish 8080:8080 \ --rm \ --tty \ --volume ${SENZING_DATA_VERSION_DIR}:/opt/senzing/data \ --volume ${SENZING_ETC_DIR}:/etc/opt/senzing \ --volume ${SENZING_G2_DIR}:/opt/senzing/g2 \ --volume ${SENZING_VAR_DIR}:/var/opt/senzing \ ${SENZING_NETWORK_PARAMETER} \ senzing/senzing-api-server \ -concurrency 10 \ -httpPort 8080 \ -bindAddr all \ -iniFile /etc/opt/senzing/G2Module.ini
运行实体搜索Web应用。示例:
consolesudo docker run \ --env SENZING_API_SERVER_URL=http://senzing-api-server:8080 \ --env SENZING_WEB_SERVER_PORT=8081 \ --interactive \ --name=senzing-webapp \ --publish 8081:8081 \ --rm \ --tty \ ${SENZING_NETWORK_PARAMETER} \ senzing/entity-search-web-app
验证容器是否正在运行且可访问:
在Web浏览器中打开http://localhost:8081%EF%BC%88%E6%88%96%E7%94%A8%E4%B8%BB%E6%9C%BA%E5%90%8D%E6%88%96IP%E6%9B%BF%E6%8D%A2%60localhost%60%EF%BC%89%E3%80%82
或者,使用curl。示例:
consolecurl http://machine-host-name:8081
senzing-webapp的主要Docker镜像支持通过HTTPS运行其Web服务器。为了以安全方式部署Web应用,必须在swarm配置中使用该镜像,而不是独立服务。有关swarm以及为什么这是必需的更多信息,请参见https://docs.docker.com/engine/swarm/secrets/
前提条件
docker version检查docker客户端运行的API版本。自签名证书
自签名证书足以建立安全的HTTPS连接,用于开发目的。不应在生产环境中使用,但如果只是想测试加密功能,这是一个可行的短期解决方案。需要在系统上安装OpenSSL来生成这些证书。可以进行https://www.google.com/search?q=using+self+signed+SSL+certificate%E6%88%96%E6%9F%A5%E7%9C%8B%E8%BF%99%E7%AF%87%E6%96%87%E7%AB%A0%EF%BC%8C%E7%94%9F%E6%88%90server.cert%E5%92%8Cserver.key%E6%96%87%E4%BB%B6%E5%90%8E%E5%86%8D%E5%9B%9E%E5%88%B0%E6%9C%AC%E8%8A%82%E3%80%82
使用Docker Stack配置SSL
为方便起见,我们包含了一个专门用于SSL配置的docker compose 文件。如果不熟悉stack的工作方式,建议从此示例开始(出于多种原因,stack部署需要不同的yml文件)。
打开该示例,会在文件底部看到两行:
yamlSZ_WEBAPP_SSL_CERT: file: '../CERTS/server.cert' SZ_WEBAPP_SSL_KEY: file: '../CERTS/server.key'
这些行告诉docker将两个密钥传递给docker compose文件中定义的服务。这两行应指向要使用的server.key和server.cert文件的位置。
senzing-api-server服务的配置可能与你的运行配置不同。应将已正常工作的docker-compose.yml文件中定义的配置选项复制到docker-stack.yml文件中。
senzing-webapp服务定义下的其他重要行是:
yamlsecrets: - source: SZ_WEBAPP_SSL_CERT target: server.cert uid: '1001' gid: '1001' - source: SZ_WEBAPP_SSL_KEY target: server.key uid: '1001' gid: '1001'
它们告诉webapp服务使用文件底部定义的密钥内容。这类似于传入文件,但docker密钥的工作方式比较特殊。
接下来,通过输入sudo SENZING_DATA_VERSION_DIR=${SENZING_DATA_VERSION_DIR} SENZING_ETC_DIR=${SENZING_ETC_DIR} SENZING_G2_DIR=${SENZING_G2_DIR} SENZING_VAR_DIR=${SENZING_VAR_DIR} docker stack deploy -c docker-stack.yml senzing-webapp将yml文件中定义的服务部署到swarm管理器。
通过输入docker stack ps senzing-webapp检查服务是否成功启动。结果应如下所示:
bashID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 7mxc4jru51pl senzing-webapp_senzing-api-server.1 senzing/senzing-api-server:latest americium Running Running about an hour ago rnguy9d2incb senzing-webapp_senzing-webapp.1 senzing/entity-search-web-app:ssl americium Running Running about an hour ago
然后可以使用curl -kvv https://localhost:8081向web服务器发起curl请求。输出应类似于以下内容:
bash* Rebuilt URL to: https://localhost:8081/ * Trying 127.0.0.1... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 8081 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): * TLSv1.3 (IN), TLS handshake, Unknown (8): * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS Unknown, Certificate Status (22): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Client hello (1): * TLSv1.3 (OUT), TLS Unknown, Certificate Status (22): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: C=US; ST=OR; L=SenzingTown; O=Senzing; CN=localhost * start date: Nov 13 00:49:12 2019 GMT * expire date: Nov 12 00:49:12 2020 GMT * issuer: C=US; ST=OR; L=SenzingTown; O=Senzing; CN=localhost * SSL certificate verify result: self signed certificate (18), continuing anyway. * TLSv1.3 (OUT), TLS Unknown, Unknown (23): > GET / HTTP/1.1 > Host: localhost:8081 > User-Agent: curl/7.58.0 > Accept: */*
在此示例中使用的是自签名证书,但重要的是看到TLSvx.x握手和*Server certificate:*响应块。此时,可以在普通浏览器(Chrome、Firefox、Edge等)中打开服务器实例,例如https://localhost:8081%E3%80%82%E5%9C%B0%E5%9D%80%E6%A0%8F%E4%B8%AD%E5%9C%B0%E5%9D%80%E6%97%81%E8%BE%B9%E5%BA%94%E6%98%BE%E7%A4%BA%E8%AF%81%E4%B9%A6%E6%8F%90%E4%BE%9B%E7%9A%84SSL%E4%BF%A1%E6%81%AF%E3%80%82%E5%A6%82%E6%9E%9C%E6%98%AF%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6%EF%BC%8C%E4%BC%9A%E7%9C%8B%E5%88%B0%E8%AD%A6%E5%91%8A%E6%B6%88%E6%81%AF%EF%BC%8C%E8%AF%A2%E9%97%AE%E6%98%AF%E5%90%A6%E7%BB%A7%E7%BB%AD%EF%BC%8C%E8%BF%99%E6%98%AF%E6%AD%A3%E5%B8%B8%E7%9A%84%E3%80%82
可以使用docker stack rm senzing-webapp关闭swarm节点。
有一个管理区域,可用于创建新数据源并将数据导入这些数据源。要访问此功能,API服务器版本必须>=1.7.11,并且必须使用-enableAdmin标志启动,设置为true。
然后可以通过在运行webapp的同一域/主机名上浏览到/admin来访问管理区域。系统会提示输入Api Token,这是用于防止未经授权操作数据的默认安全机制。令牌在服务器启动时随机生成,并输出到启动容器所用的终端的标准输出中。出现提示时,将此令牌复制并粘贴到登录框中。
管理区域配置
支持三种安全模式:
/admin/auth/sso/status发起请求,并检查响应是否为200。如果响应不是200,则用户被重定向到SENZING_WEB_SERVER_ADMIN_AUTH_REDIRECT环境变量值定义的登录页面。SSO/代理应配置为当用户未登录时,对/admin/auth/sso/status的请求返回401/403。变量:
SENZING_WEB_SERVER_ADMIN_AUTH_MODE定义管理区域使用的安全模式。可能的值为SSO、JWT、EXTERNAL、NONE。SENZING_WEB_SERVER_ADMIN_AUTH_REDIRECT定义用户未通过身份验证时重定向的路径。在SSO您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务