我目前正在做一个包含PostgreSQL、Redis、Medusa和Solr实现的项目。
我希望以容器化方式运行所有应用程序,以便可以轻松地将其部署到Linux服务器。
我的问题是,当我尝试从我的docker-compose.yml
运行容器化的Solr示例时,它最终无法找到我创建的Request Handlers
。
当我访问运行在localhost:8983上的管理GUI时,我可以看到我的核心并运行/select
请求处理程序。在GUI中,当我打开文件下的核心(称为product_core)时,我看到一个完全不同的目录。
看起来我无法让我的Solr示例找到我自己的solrconfig.xml文件,即使它们被复制到映像中。
当我将docker exec -it solr /bin/bash
导入Solr示例时可以看到。
在Solr示例内部的目录中:/var/solr/data/product_core
我可以看到GUI显示的文件,但我似乎无法让它工作来复制文件。
下面是我的docker-compose.yml文件:
version: "3.8"
services:
backend:
build:
context: ./medusa_backend
dockerfile: Dockerfile
image: dahlfrederik/medusa_backend
container_name: medusa_backend
depends_on:
- postgres
- redis
environment:
DATABASE_URL: postgresql://postgres:alpha123@postgres:5432/postgres
REDIS_URL: redis://redis:6379/
NODE_ENV: development
JWT_SECRET: some_jwt_secret
COOKIE_SECRET: some_cookie_secret
PORT: 9000
ADMIN_CORS: http://localhost:7000,http://localhost:7001,http://192.168.98.141:7000,http://localhost:7000
STORE_CORS: http://localhost:3000,http://192.168.98.141:8000,http://localhost:8000
MEDUSA_DISABLE_TELEMETRY: "true"
volumes:
- ./medusa_backend/data:/var/lib/postgresql/data
ports:
- "9000:9000"
restart: always
postgres:
image: postgres:10.4
container_name: postgres
ports:
- "5432:5432"
volumes:
- ./postgres/data:/var/lib/postgresql/data
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=alpha123
- POSTGRES_DB=postgres
redis:
image: redis
container_name: redis
expose:
- 6379
restart: always
admin:
build:
context: ./medusa_admin
dockerfile: Dockerfile
image: dahlfrederik/medusa_admin
container_name: medusa_admin
depends_on:
- backend
environment:
HOST: 0.0.0.0
PORT: 7000
ports:
- "7000:7000"
restart: always
storefront:
build:
context: ./nextjs_frontend
dockerfile: Dockerfile
image: dahlfrederik/medusa_storefront
container_name: storefront
depends_on:
- backend
environment:
PORT: 8000
ports:
- "8000:8000"
restart: always
solr:
image: solr
container_name: solr
depends_on:
- postgres
ports:
- "8983:8983"
volumes:
- data:/var/solr
- ./solr:/opt/solr/server/solr/product_core
entrypoint:
- docker-entrypoint.sh
- solr-precreate
- product_core
restart: always
volumes:
data:
我的Solr配置文件位于Solr目录中,该目录位于包含我的docker-compose文件的文件夹中。
我创建了一个managed-schema.xml
,如下所示
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="default-config" version="1.6">
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_general" indexed="true" stored="true" />
<field name="description" type="text_general" indexed="true" stored="true" />
<field name="type" type="string" indexed="true" stored="true" />
<field name="size" type="string" indexed="true" stored="true" />
<field name="price" type="string" indexed="true" stored="true" />
<field name="image" type="string" indexed="false" stored="true" />
<field name="inStock" type="boolean" indexed="false" stored="true" />
<uniqueKey>id</uniqueKey>
<fieldType name="string" class="solr.StrField" />
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="boolean" class="solr.BoolField" />
</schema>
我已经创建了一个solrconfig.xml,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<requestHandler name="/search" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">100</int>
<str name="fl">id,title,description,type,size,price,image,inStock</str>
<str name="facet">true</str>
<str name="facet.mincount">1</str>
<str name="facet.field">size</str>
<str name="facet.field">price</str>
<str name="facet.field">color</str>
</lst>
<lst name="invariants">
<str name="defType">edismax</str>
<str name="qf">title^2 description</str>
</lst>
<arr name="last-components">
<str>facet</str>
</arr>
</requestHandler>
<requestHandler name="/autocomplete_search" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">all</str>
<str name="df">text</str>
<int name="rows">10</int>
<str name="fl">title,image</str>
</lst>
</requestHandler>
<searchComponent name="facet">
<lst name="facet">
<bool name="facet.sort">true</bool>
<lst name="facet.field">
<str name="field">size</str>
<bool name="facet.missing">true</bool>
<bool name="facet.sort">false</bool>
<int name="facet.limit">-1</int>
</lst>
<lst name="facet.range">
<str name="field">price</str>
<int name="mincount">1</int>
<str name="method">dv</str>
</lst>
<lst name="facet.field">
<str name="field">color</str>
</lst>
</lst>
</searchComponent>
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="fl">id,title,description,type,size,price</str>
<str name="facet">true</str>
<str name="facet.mincount">1</str>
<str name="facet.field">size</str>
<str name="facet.field">price</str>
<str name="facet.field">color</str>
</lst>
<arr name="last-components">
<str>facet</str>
</arr>
</requestHandler>
<updateRequestProcessorChain name="uuid">
<processor class="solr.UUIDUpdateProcessorFactory">
<str name="fieldName">id</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>
</config>
所以看起来我不知何故把我的文件复制到了错误的目标--但是当我试图把它复制到我在Solr GUI内部可以看到的目标时,它没有找到我的核心。
提前感谢您的任何建议。
我尝试过更改配置文件的存储目录。我尝试过docker-compose up --build -d。尝试过在docker-compose.yml文件中更改为使用入口点而不是命令
1条答案
按热度按时间h9a6wy2h1#
原来,我的问题是配置文件保存在我的docker示例中的错误位置-我通过添加一个虚拟文本文件
HelloWorld.txt
,然后使用Linux搜索命令查找该文件及其位置来解决这个问题。我通过向Azure构建/部署管道添加一个脚本来解决问题,该脚本将solr-conf文件夹的内容复制到我的docker示例,然后运行reload core命令。
因此,我的解决方案是运行一个执行以下命令的脚本:
然后执行以下post命令。
它可能已经做得更直观,我仍然在考虑直接添加命令到我的
docker-compose.yml
文件。但现在这是一个解决我的问题的方法。