linux Wiki.js无法通过企业代理

hmmo2u0o  于 2023-04-11  发布在  Linux
关注(0)|答案(3)|浏览(104)

我是Ubuntu的新手,但我有一份工作要用docker安装Wiki.JS。它工作正常,服务器正在运行,但由于某种原因,它无法访问GraphQL API。
我遇到了以下问题:

服务器:

2020-06- 14 T11:43:53.980Z [MASTER]错误:从Graph端点获取最新更新:[失败]
2020-06- 14 T11:43:53.980Z [MASTER]错误:请求https://graph.requarks.io失败,原因:连接ETIMEDOUT104.26.14.122:443
2020-06- 14 T11:43:56.028Z [MASTER]错误:正在将区域设置与Graph端点同步:[失败]
2020-06- 14 T11:43:56.028Z [MASTER]错误:请求https://graph.requarks.io失败,原因:连接ETIMEDOUT104.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上测试过它。只要虚拟机没有代理,两者都可以工作..我试图为机器设置代理并设置环境变量,但它似乎仍然不起作用。
我该怎么解决这个问题?

neskvpey

neskvpey1#

要解释**@GanjalfTheGreen**提供的 Docker 的sideloaing解决方案,首先需要克隆Wiki.js localization repository(或从该存储库下载选定的本地化;只需确保您在所选项目旁边有locales.jsonen.json)。然后您需要将包含本地化文件的文件夹绑定到容器内的/wiki/data/sideload目录。
你还需要在config.yml文件中设置offline参数,让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)
h43kikqp

h43kikqp2#

您无法让Wiki.JS在企业防火墙后工作的原因是此功能未实现。
基于this GitHub issue,您可以投票支持此功能here
问题中提到了一个解决方法(1.),但您也可以sideload丢失的文件(2.)。

1. Workaround

我想出了一个解决办法:使用https://github.com/rofl0r/proxychains-ng和LD_PRELOAD。在我的例子中,我使用docker-compose。
您必须:

  • 将编译后的www.example.com合并proxychains4.so到/lib/中,并设置环境变量
  • 创建你自己的proxychains.conf

下面是一个例子:

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 node

docker-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"

2. Sideload

如果您的wiki安装在与互联网隔离的环境中,您可以从互联网上下载通常会下载的数据。
这是通过手动下载一组文件并将其放置在wiki安装中的特定目录中来实现的。这些文件将在初始化期间导入。
在Wiki.js安装文件夹中的路径data/sideload创建一个新文件夹。例如,如果您的wiki安装在路径/home/wiki,则需要在路径/home/wiki/data/sideload创建一个文件夹
区域设置为了安装区域设置包,您需要主区域设置文件+至少一个区域设置包文件。

主文件locales.json包含有关所有可用语言的信息,并且是安装任何语言环境所必需的。
将此文件放入先前创建的sideload文件夹中。

2 -区域设置包

locale包文件xx.json或xx-zz.json包含您选择的语言的所有翻译。您可以同时侧载任何数量的locale。

  • 安装时默认语言为en.json,需要英语包。安装后可以更改语言。*

将文件放在之前创建的sideload文件夹中,与主文件放在一起。现在,您的文件夹中应该有locales.json,en.json和任何其他语言。

3 -侧载

运行Wiki.js(如果已经运行,则重新启动该进程)以自动侧载data/sideload文件夹中的文件。

  • 由于2.5之前版本中的一个错误,区域设置文件以不正确的顺序加载,导致客户端无法获取翻译。*

作为一种解决方法,一旦Wiki.js完全启动,重新启动服务器。语言环境数据(现在在数据库中)将被正确加载。我遇到了同样的问题,只要这个功能还没有实现,我将使用BlueSpice MediaWiki,因为Wiki.JS在其路线图上有“从MediaWiki导入”。

kninwzqo

kninwzqo3#

我如何解决这个问题

我在离线环境中侧载数据时也遇到了同样的问题。为了解决这个问题,我不得不从https://github.com/Requarks/wiki-localization下载(通过zip)所有的locale,而不仅仅是en.json和locale.json文件。然后将其带到我的离线服务器,并将其添加到我的sideload-data文件夹中,我的docker-compose就在那里。此外,我还必须将config.yml参数设置为离线:真的。

Docker compose

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:
      - wiki-data:/var/lib/postgresql/data
    networks:
      - wiki-net
  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
    restart: unless-stopped
    volumes:
      - ./config.yml:/wiki/config.yml
      - ./sideload-data/:/wiki/data/sideload/
    ports:
      - "3000:3000"
    networks:
      - wiki-net
networks:
  wiki-net:
volumes:
  wiki-data:

故障提示:

  • 运行docker compose up,看看是否有EACCESS错误说数据无法加载,这可能表明您需要提升容器中文件夹的权限-如果在docker exec时没有显示,请创建一个新容器

相关问题