我是Ubuntu的新手,但我有一份工作要用码头安装Wiki.JS。它可以工作,服务器正在运行,但由于某种原因,它无法到达GraphQL API。
我遇到了以下问题:
服务器:
2020-06-14T11:43:53.980Z主错误:从图形端点获取最新更新:失败
2020-06-14T11:43:53.980Z主错误:请求https://graph.requarks.io失败,原因:连接ETIMEDOUT 104.26.14.122:443
2020-06-14T11:43:56.028Z主错误:将地区与图形端点同步:失败
2020-06-14T11:43:56.028Z主错误:请求https://graph.requarks.io失败,原因:连接ETIMEDOUT 104.26.15.122:443
客户端:
错误: GraphQL错误:无效的区域设置或命名空间
堆栈跟踪:
n@http://server.mydomain.test/_assets/js/app.js?1591384357:2:125092
["./node_modules/apollo-client/bundle.umd.js"]/i/k</e.prototype.queryListenerForObserver/<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:146832
["./node_modules/apollo-client/bundle.umd.js"]/i/k</e.prototype.broadcastQueries/</<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:153007
["./node_modules/apollo-client/bundle.umd.js"]/i/k</e.prototype.broadcastQueries/<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:152971
["./node_modules/apollo-client/bundle.umd.js"]/i/k</e.prototype.broadcastQueries@http://server.mydomain.test/_assets/js/app.js?1591384357:2:152920
["./node_modules/apollo-client/bundle.umd.js"]/i/k</e.prototype.fetchRequest/</b<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:154884
["./node_modules/zen-observable/lib/Observable.js"]/j</<.value/</<.next@http://server.mydomain.test/_assets/js/app.js?1591384357:333:17099
b@http://server.mydomain.test/_assets/js/app.js?1591384357:333:14921
y@http://server.mydomain.test/_assets/js/app.js?1591384357:333:15429
["./node_modules/zen-observable/lib/Observable.js"]/w</<.value@http://server.mydomain.test/_assets/js/app.js?1591384357:333:15982
w/</n<.next/<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:140468
w/</n<.next@http://server.mydomain.test/_assets/js/app.js?1591384357:2:140430
b@http://server.mydomain.test/_assets/js/app.js?1591384357:333:14921
y@http://server.mydomain.test/_assets/js/app.js?1591384357:333:15429
["./node_modules/zen-observable/lib/Observable.js"]/w</<.value@http://server.mydomain.test/_assets/js/app.js?1591384357:333:15982
o/</</r<.next@http://server.mydomain.test/_assets/js/app.js?1591384357:2:169810
b@http://server.mydomain.test/_assets/js/app.js?1591384357:333:14921
y@http://server.mydomain.test/_assets/js/app.js?1591384357:333:15429
["./node_modules/zen-observable/lib/Observable.js"]/w</<.value@http://server.mydomain.test/_assets/js/app.js?1591384357:333:15982
["./node_modules/apollo-link-batch/lib/batching.js"]/o</e.prototype.consumeQueue/<.next/</<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:168733
["./node_modules/apollo-link-batch/lib/batching.js"]/o</e.prototype.consumeQueue/<.next/<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:168700
["./node_modules/apollo-link-batch/lib/batching.js"]/o</e.prototype.consumeQueue/<.next@http://server.mydomain.test/_assets/js/app.js?1591384357:2:168669
b@http://server.mydomain.test/_assets/js/app.js?1591384357:333:14921
y@http://server.mydomain.test/_assets/js/app.js?1591384357:333:15429
["./node_modules/zen-observable/lib/Observable.js"]/w</<.value@http://server.mydomain.test/_assets/js/app.js?1591384357:333:15982
t/n.batcher<.batchHandler/</<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:165472
["./node_modules/core-js/modules/es.promise.js"]/J/<@http://server.mydomain.test/_assets/js/app.js?1591384357:2:450433
["./node_modules/core-js/internals/microtask.js"]/i@http://server.mydomain.test/_assets/js/app.js?1591384357:2:412213请记住,我以前曾在Windows和Linux上测试过它。只要虚拟机没有代理,两者都能工作。我试图为机器设置代理并设置环境变量,但它似乎仍然不起作用。
我怎么才能解决这个问题?
发布于 2020-09-08 08:21:58
您无法让Wiki.JS在公司防火墙后面工作的原因是该功能没有实现。
基于这个GitHub问题,您可以投票支持此特性这里。
问题(1.)中提到了一个解决办法,但是您也可以副业丢失的文件(2.)。
我想出了一个解决办法:将https://github.com/rofl0r/proxychains-ng与LD_PRELOAD结合使用。在我的例子中,我使用的是码头写作。
你必须:
下面是一个示例:
Dockerfile
FROM requarks/wiki:2
USER root
ADD ./libproxychains4.so /lib/
RUN echo -e 'localnet 192.168.0.0/255.255.0.0\n\
[ProxyList]\n\
http <YOUR PROXY> <PROXY PORT>\n'\
> /etc/proxychains.conf
USER nodedocker-compose.yaml
version: "3"
services:
db:
image: postgres:11-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: wikijsrocks
POSTGRES_USER: wikijs
restart: unless-stopped
volumes:
- /data/wikijs/postgresql/data:/var/lib/postgresql/data
wiki:
image: wikijs-proxychains:1
depends_on:
- db
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: wikijsrocks
DB_NAME: wiki
LD_PRELOAD: /lib/libproxychains4.so
restart: unless-stopped
ports:
- "80:3000"如果您的wiki安装在一个与互联网隔离的环境中,您可以将通常从互联网下载的数据旁置一边。
这是通过手动下载一组文件并将它们放在wiki安装中的特定目录中实现的。这些文件将在初始化期间导入。
开始在您的Wiki.js安装文件夹内的path数据/副业中创建一个新文件夹。例如,如果您的wiki安装在path /home/wiki上,则需要在path /home/wiki/data/sideload创建一个文件夹。
为了安装地区包,您需要主区域设置文件+至少一个locale包文件。
这些文件可以从https://github.com/Requarks/wiki-localization下载。这些文件每晚都是最新的。
1 -主文件
主文件locales.json包含关于所有可用语言的信息,并且需要安装任何区域设置。
将此文件放置在先前创建的边框文件夹中。
2 -地区包
locale包文件xx.json或xx-zz.json包含您选择的语言的所有翻译。您可以在同一时间对任意数量的地区进行旁听。
英语包en.json是必需的,因为这是安装过程中的默认语言。之后你可以改变语言。
将该文件放置在前面创建的旁文件夹中,与主文件并排。您现在应该在文件夹中有locales.json、en.json和任何其他语言。
3 - Sideload
运行Wiki.js (如果进程已经在运行,则重新启动进程),以自动对数据/旁目录中的文件进行旁置处理。
由于2.5之前版本中存在错误,因此加载区域设置文件的顺序不正确,导致客户端无法获取翻译。
作为解决办法,一旦Wiki.js完全启动,再次重新启动服务器。区域设置数据(现在在数据库中)将正确加载。我也遇到了同样的问题,只要这个特性还没有实现,我就会使用BlueSpice MediaWiki,因为Wiki.JS的路线图上有“从MediaWiki导入”。
发布于 2020-11-07 14:15:16
要用@GanjalfTheGreen,提供的Docker解释副业解决方案,您首先需要克隆Wiki.js本地化存储库 (或从该存储库下载选定的本地化;只需确保您的locales.json和en.json与所选项一起)。然后,需要将包含本地化文件的文件夹绑定到容器内的/wiki/data/sideload目录。
此外,您还需要在offline文件中设置config.yml参数,以便让wiki.js知道它应该使用旁置的本地化文件。为此,您需要在主机中创建一个config.yml文件,并将其绑定到容器配置文件。
下面是一个示例:
docker-compose.json
version: "3"
services:
db:
image: postgres:11-alpine
environment:
POSTGRES_DB: wiki
POSTGRES_PASSWORD: wikijsrocks
POSTGRES_USER: wikijs
logging:
driver: "none"
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql/data
wiki:
image: requarks/wiki:2
depends_on:
- db
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: wikijsrocks
DB_NAME: wiki
OFFLINE_ACTIVE: 1
restart: unless-stopped
ports:
- "80:3000"
volumes:
- ./sideload:/wiki/data/sideload
- ./config.yml:/wiki/config.yml
volumes:
db-data:config.yml
port: 3000
bindIP: 0.0.0.0
db:
type: $(DB_TYPE)
host: '$(DB_HOST)'
port: $(DB_PORT)
user: '$(DB_USER)'
pass: '$(DB_PASS)'
db: $(DB_NAME)
storage: $(DB_FILEPATH)
ssl: $(DB_SSL)
ssl:
enabled: $(SSL_ACTIVE)
port: 3443
provider: letsencrypt
domain: $(LETSENCRYPT_DOMAIN)
subscriberEmail: $(LETSENCRYPT_EMAIL)
logLevel: info
ha: $(HA_ACTIVE)
offline: $(OFFLINE_ACTIVE)https://stackoverflow.com/questions/62383153
复制相似问题