Wiki.js 无法通过公司代理
Wiki.js can't go through corporate proxy
我是 Ubuntu 的新手,但我有一份工作要用 docker 安装 Wiki.JS。它有效,服务器是 运行,但由于某种原因它无法访问 GraphQL API。
我 运行 遇到了以下问题:
服务器:
2020-06-14T11:43:53.980Z [MASTER] 错误:从 Graph 端点获取最新更新:[失败]
2020-06-14T11:43:53.980Z [MASTER] 错误:请求 https://graph.requarks.io 失败,原因:连接 ETIMEDOUT 104.26.14.122:443
2020-06-14T11:43:56.028Z [MASTER] 错误:将区域设置与 Graph 端点同步:[失败]
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 you can vote for this feature 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 是必需的,因为这是安装期间的默认语言。您之后可以更改语言。
将文件放入先前与主文件一起创建的 sideload 文件夹中。您的文件夹中现在应该有 locales.json、en.json 和任何其他语言。
3 - 侧载
运行 Wiki.js(如果已经 运行 则重新启动进程)以自动旁加载位于 data/sideload 文件夹中的文件。
由于 2.5 之前的版本存在错误,区域设置文件加载顺序不正确,导致客户端无法获取翻译。
作为解决方法,一旦 Wiki.js 完全启动,再次重新启动服务器。语言环境数据(现在在数据库中)将被正确加载。我遇到了同样的问题,只要此功能尚未实现,我就会使用 BlueSpice MediaWiki,因为 Wiki.JS 在其路线图上有“从 MediaWiki 导入”。
为了解释 Docker 提供的旁路解决方案 @GanjalfTheGreen,首先你需要克隆 Wiki.js localization repository(或从该存储库下载选定的本地化版本;只需确保您在选定的项目旁边有 locales.json
和 en.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)
我是 Ubuntu 的新手,但我有一份工作要用 docker 安装 Wiki.JS。它有效,服务器是 运行,但由于某种原因它无法访问 GraphQL API。
我 运行 遇到了以下问题:
服务器:
2020-06-14T11:43:53.980Z [MASTER] 错误:从 Graph 端点获取最新更新:[失败]
2020-06-14T11:43:53.980Z [MASTER] 错误:请求 https://graph.requarks.io 失败,原因:连接 ETIMEDOUT 104.26.14.122:443
2020-06-14T11:43:56.028Z [MASTER] 错误:将区域设置与 Graph 端点同步:[失败]
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 you can vote for this feature 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 是必需的,因为这是安装期间的默认语言。您之后可以更改语言。
将文件放入先前与主文件一起创建的 sideload 文件夹中。您的文件夹中现在应该有 locales.json、en.json 和任何其他语言。
3 - 侧载
运行 Wiki.js(如果已经 运行 则重新启动进程)以自动旁加载位于 data/sideload 文件夹中的文件。
由于 2.5 之前的版本存在错误,区域设置文件加载顺序不正确,导致客户端无法获取翻译。
作为解决方法,一旦 Wiki.js 完全启动,再次重新启动服务器。语言环境数据(现在在数据库中)将被正确加载。我遇到了同样的问题,只要此功能尚未实现,我就会使用 BlueSpice MediaWiki,因为 Wiki.JS 在其路线图上有“从 MediaWiki 导入”。
为了解释 Docker 提供的旁路解决方案 @GanjalfTheGreen,首先你需要克隆 Wiki.js localization repository(或从该存储库下载选定的本地化版本;只需确保您在选定的项目旁边有 locales.json
和 en.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)