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

我遇到了以下问题:

服务器:

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

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

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

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

最佳答案

您无法让 Wiki.JS 在公司防火墙后面工作的原因是该功能没有实现。
基于 this GitHub issue 您可以为此功能 here 投票。
问题 (1.) 中提到了一种解决方法,但您也可以 sideload 丢失的文件 (2.)。
1. Workaround
我想出了一个解决方法:
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
    
    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 安装在与 Internet 隔离的环境中,您可以旁加载通常从 Internet 下载的数据。
    这是通过手动下载一组文件并将它们放置在您的 wiki 安装中的特定目录中来实现的。这些文件将在初始化期间导入。
    入门 在 Wiki.js 安装文件夹内的路径 data/sideload 处创建一个新文件夹。例如,如果您的 wiki 安装在路径/home/wiki,则您需要在路径/home/wiki/data/sideload 处创建一个文件夹
    语言环境 为了安装语言环境包,您需要主语言环境文件 + 至少一个语言环境包文件。
    这些文件可以从 https://github.com/Requarks/wiki-localization 下载。这些文件每晚都会更新。
    1 - 主文件
    主文件 locales.json 包含有关所有可用语言的信息,并且需要安装任何语言环境。
    将此文件放在之前创建的 sideload 文件夹中。
    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 导入”。

    关于linux - Wiki.js 无法通过企业代理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62383153/

    10-16 22:38