Wiki.js 无法通过公司代理

kmp*_*kmp 6 linux proxy http-proxy docker wiki.js

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

我遇到了以下问题:


服务器:

2020-06-14T11:43:53.980Z [MASTER] 错误:从图形端点获取最新更新:[ FAILED ]

2020-06-14T11:43:53.980Z [MASTER] 错误:请求https://graph.requarks.io失败,原因:连接 ETIMEDOUT 104.26.14.122:443

2020-06-14T11:43:56.028Z [MASTER]错误:将区域设置与图形端点同步:[失败]

2020-06-14T11:43:56.028Z [MASTER] 错误:请求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
Run Code Online (Sandbox Code Playgroud)

请记住,我之前已经在 Windows 上测试过它,而我的同事则在 Linux 上测试过它。只要虚拟机没有代理,两者都可以工作。我尝试为机器设置代理并设置环境变量,但它似乎仍然不起作用。

我怎样才能解决这个问题?

S. *_*ini 7

为了解释@GanjalfTheGreen提供的Docker旁加载解决方案,首先您需要克隆Wiki.js 本地化存储库(或从该存储库下载选定的本地化版本;只需确保您在选定的项目旁边有和)。然后,您需要将包含本地化文件的文件夹绑定到容器内的目录。locales.jsonen.json/wiki/data/sideload

此外,您还需要offlineconfig.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:
Run Code Online (Sandbox Code Playgroud)

配置.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)
Run Code Online (Sandbox Code Playgroud)


Gan*_*een 4

您无法让 Wiki.JS 在公司防火墙后面工作的原因是该功能尚未实现。

基于此 GitHub 问题,您可以在此处投票支持此功能。

问题 (1.) 中提到了一种解决方法,但您也可以旁加载丢失的文件 (2.)。

1. 解决方法

我想出了一个解决方法:将https://github.com/rofl0r/proxychains-ng与 LD_PRELOAD 一起使用。就我而言,我正在使用 docker-compose。

你必须:

  • 将编译好的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
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

2. 旁载

如果您的 wiki 安装在与互联网隔离的环境中,您可以旁加载通常从互联网下载的数据。

这是通过手动下载一组文件并将它们放置在 wiki 安装中的特定目录中来实现的。这些文件将在初始化期间导入。

入门 在 Wiki.js 安装文件夹内的路径 data/sideload 处创建一个新文件夹。例如,如果您的 wiki 安装在路径 /home/wiki,则需要在路径 /home/wiki/data/sideload 创建一个文件夹

语言环境 为了安装语言环境包,您需要主语言环境文件 + 至少一个语言环境包文件。

这些文件可以从https://github.com/Requarks/wiki-localization下载。这些文件每晚都会更新。

1 - 主文件

主文件 locales.json 包含有关所有可用语言的信息,并且是安装任何语言环境所必需的。

将此文件放入之前创建的旁加载文件夹中。

2 - 语言环境包

语言环境包文件 xx.json 或 xx-zz.json 包含您选择的语言的所有翻译。您可以同时旁加载任意数量的语言环境。

英语包 en.json 是必需的,因为这是安装过程中的默认语言。之后您可以更改语言。

将文件放入先前与主文件一起创建的旁加载文件夹中。您的文件夹中现在应该有 locales.json、en.json 和任何其他语言。

3 - 旁载

运行 Wiki.js(或者如果已经运行则重新启动该进程)以自动旁加载位于 data/sideload 文件夹中的本地文件。

由于 2.5 之前版本中的错误,语言环境文件加载顺序不正确,导致客户端无法获取翻译。

作为解决方法,一旦 Wiki.js 完全启动,请再次重新启动服务器。区域设置数据(现在位于数据库中)将被正确加载。我也遇到了同样的问题,只要此功能尚未实现,我就会使用 BlueSpice MediaWiki,因为 Wiki.JS 在其路线图上已“从 MediaWiki 导入”。