有时候我们访问 Nodejs API 博客的时候会比较慢,如果把 Node.js 的文档放到自己国内的服务器,将会大大提高访问速度。本文就是文档的搭建教程。

注意:

  • 以下代码都是在服务器端运行,服务器用的是 Centos 7,双核,4G 内存
  • 写这篇文章时使用 nodejs.org 仓库的最新版本号是:711e391c90269c20087b1c89d1de065053e0da43
  • node 仓库的最新版本号是:35bfe0e414f4d4b79ca0820c3b0dd41e61d893be
  • 正常情况这个过程大概需要 30 分钟左右,在构建的时候,取决于服务器的性能

首先获取 Node.js 博客的仓库并构建:

1
2
3
4
$ git clone https://github.com/nodejs/nodejs.org.git
$ cd nodejs.org
$ npm i
$ npm run build

构建好之后,会看到仓库里面多了个 build 目录,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ tree -L 1 build
build
├── ar
├── ca
├── de
├── en
├── es
├── fa
├── fr
├── gl
├── it
├── ja
├── ko
├── layouts
├── pt-br
├── ru
├── static
├── uk
├── zh-cn
└── zh-tw

build 目录下的就是 Node.js 博客的页面,接下来配置 Nginx:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80;
server_name ${your_domain_name};

location / {
root ${path_to_nodejs.org_repo}/build/;
# 这一句是用于重定向首页的配置
# ^\/$ 表示匹配到首页之后,重定向到 /en/
# 对应上面的 build 目录下的 en 目录
# 当然也可以重定向到 /zh-cn/
# redirect 这个 flag 表示使用的是 302 跳转
rewrite ^\/$ /en/ redirect;
index index.html;
}

## 网站的 favicon.ico
location ~ ^/favicon\.ico$ {
root ${path_to_nodejs.org_repo}/build/static/images/favicons/;
}
}

除了 Nginx 配置,还需要你配置 DNS 解析,这里我就不写怎么配置 DNS 解析了。

配置好 Nginx 以及 DNS 解析之后,如果没有意外,应该可以通过域名访问到博客页面。

除此之外还需要增加以下的路径:

  • /dist/latest-v10.x/docs/api/ - LTS 版本的文档
  • /dist/latest-v12.x/docs/api/ - 最新的不稳定版本的文档
  • /api/ - 开发中的版本的文档

如果仓库更新了,路径中的版本号可能会不一样,但是配置的方法是一样的。

修改英文版的配置文件:

1
2
// path_to_nodejs.org_repo
$ vim locale/en/site.json

找到以下代码:

1
2
3
4
5
6
7
8
9
10
11
...
"api-lts": {
"link": "https://nodejs.org/dist/latest-%ver-major%/docs/api/",
"subtext": "LTS",
"text": "%ver% API"
},
"api-current": {
"link": "https://nodejs.org/dist/latest-%ver-major%/docs/api/",
"text": "%ver% API"
},
...

修改成以下的形式:

1
2
3
4
5
6
7
8
9
10
11
···
"api-lts": {
"link": "/dist/latest-%ver-major%/docs/api/",
"subtext": "LTS",
"text": "%ver% API"
},
"api-current": {
"link": "/dist/latest-%ver-major%/docs/api/",
"text": "%ver% API"
},
···

这里只修改了英语版本中的链接,其他语言的版本的修改方式也是一样,比如简体中文版修改的文件就是 locale/zh-cn/site.json

修改这里的链接是因为博客中会有按钮跳转到这些链接中,现在需要把文件部署在我们自己的域名下,所以修改这些链接,不要跳转到 nodejs.org 域名中。

由于 /dist/latest-v10.x/docs/api//dist/latest-v12.x/docs/api//api/ 这三个路径读取的是 node 项目中的文件,所以我们需要 clone node 项目去构建文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ git clone https://github.com/nodejs/node.git

// 复制两份出来并重命名目录名
$ cp -r node node-10.x-docs
$ cp -r node node-12.x-docs

// 切换到相应的版本
$ cd node-10.x-docs && git checkout v10.16.3 && \
cd ../node-12.x-docs && git checkout v12.11.0 && \
cd ..

// 三个仓库都需要构建,使用的是 make 命令
$ cd node && make doc-only &&\
cd ../node-10.x-docs && make doc-only &&\
cd ../node-12.x-docs && make doc-only

如无意外,构建完成后这三个目录中都会多了一个 out 目录。

增加 Nginx 的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
server {
listen 80;
server_name ${your_domain_name};

location / {
root ${path_to_nodejs.org_repo}/build/;
# 这一句是用于重定向首页的配置
# ^\/$ 表示匹配到首页之后,重定向到 /en/
# 对应上面的 build 目录下的 en 目录
# 当然也可以重定向到 /zh-cn/
# redirect 这个 flag 表示使用的是 302 跳转
rewrite ^\/$ /en/ redirect;
index index.html;
}

## 网站的 favicon.ico
location ~ ^/favicon\.ico$ {
root ${path_to_nodejs.org_repo}/build/static/images/favicons/;
}

location /api {
alias ${path_to_node_repo}/out/doc/api/;
index index.html;
}

location /dist/latest-v10.x/docs/api {
alias ${path_to_node-10.x-docs_repo}/out/doc/api/;
index index.html;
}

location /dist/latest-v12.x/docs/api {
alias ${path_to_node-12.x-docs_repo}/out/doc/api/;
index index.html;
}
}

重启 Nginx,如果没什么意外,就能够访问这三个新增的路径了。

这些配置只是主要修改了与 API 有关的文档,有些链接仍然还是会跳转回官方的网站的,比如官方的 release schedule,对于我个人而言,这些页面访问次数不多,我就不修改了。

可以在我的网站中体验:http://nodejs.xmodules.xyz/