有时候我们访问 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/ 。