程序员日常学习和工作中有很多经验和心得需要记录下来,这里推荐使用GitBook,既可以巩固记忆也可以加深理解,还能对社区做贡献。磨刀不误砍柴工,这里先介绍一整套GitBook的安装、使用、部署还有自动化方法。

GitBook其实就是把Markdown简单优雅的组织成html形式,方便查看或者部署到博客。查看成品例子

安装方法

macOS安装命令

brew cask install gitbook

安装遇到问题:TypeError: cb.apply is not a function.

原因: node版本不对,本地是14.0.0需要使用12.16.3版本.

解决方法:安装nvm管理本地的多node版本

使用方法

新建一个目录,然后在目录中运行初始化方法就可以了,然后就可以在里面用markdown任意组织笔记或文章。

gitbook init

在当前目录用下面命令跑起来,可以预览,而且修改md文件后预览会实时变化。

gitbook serve

编译生成一个_book文件夹。

gitbook build

部署到xxx.github.io

如果没有自己的服务器,可以完全免费部署到GitHub。 首先在你的GitHub建立一个Publicxxx.github.io仓库(这个域名的xxx你自己记得修改,一般都是你的GitHub名字,后面的格式固定),这个名字就是你网页的域名。 把这个仓库clone到本地。

git clone https://github.com/xxx/xxx.github.io.git

然后把上面使用方法生成的_book文件夹下面的所有文件拷贝到本地的xxx.github.io目录下,然后push到云端。

git add .
git commit -m "xxx"
git push

完成后就可以打开xxx.github.io了。

使用GitHub Actions自动部署

然而每次写文章提交后还要手动部署很麻烦,所以想办法自动化这一过程。 这里你写的文章在book仓库(可以是私有仓库),网页在xxx.github.io仓库。 教程里面的方法或者Marketplace里面的Publish Gitbook都是部署到当前仓库的gh-pages分支,无法部署到另外的仓库。

要部署到另外的仓库需要forkPublish Gitbook修改entrypoint.sh文件,修改后的文件可以参考这里。 然后在book仓库使用这个脚本,修改工作流文件 book/.github/workflows/main.yml

name: Deploy to github.io
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@master

      - name: Publish Gitbook
        uses: saucym/publish-gitbook@master
        with:
          github_token: ${{ secrets.ACCESS_TOKEN }}

这里面的secrets.ACCESS_TOKEN配置方法可以参考这里

这样你写好文章提交到book仓库后就会自动运行这个工作流,自动把build好的网页文件部署到xxx.github.io

这个工作流其实还可以做到很多事情,可以自信探索。

基于GitHub IssuesGitBook评论插件gitalk

其他简单插件可以参考推荐12个实用的gitbook插件这篇文章。 这里重点介绍一下评论插件gitalk。还有一个评论插件叫disqus不过不推荐使用。

gitalk的使用不用去网上搜,网上教程说的每个文件都要加代码的问题官方已经支持了,按官方介绍用就可以了。

介绍中的参数clientIDclientSecret可以通过点击在线申请GitHub申请一个授权应用得到。

部署到自己的云服务器

下面的远程服务器都是指腾讯云Debian系统,当然其他云服务器也是大同小异的。

安装docker,然后部署nginx

远程服务器上先随便启动一个容器,主要是用来生成默认的配置文件。

docker run -d -p 80:80  --name mynginx nginx

然后创建一个本地文件夹把默认配置copy一份,然后关闭这个容器并删除。

mkdir /web
cd /web
docker cp mynginx:/etc/nginx/conf.d .
docker stop mynginx
docker rm mynginx

可以使用vim编辑这个配置文件(这一步可以不做)。

vim conf.d/default.conf

可以看到有一个/usr/share/nginx/html,表示资源地址,不过这个资源地址是容器的修改了也没用,我们启动的时候把本地目录映射到这个地址就可以了,所以这里不需要修改,如果深入研究这个配置文件,可以做到很多事。

然后本地电脑把要部署的资源上传到远程服务器

scp -r _book root@ip:/web/book

最后在远程服务器上启动容器并加上映射。这个80:80前面这个80是服务器的端口,后面这个80是容器的端口。映射-v可以加很多个,一般把conf里面需要用到的加上就可以了,我们这里把配置文件和资源路径映射一下就好了。

docker run -d -p 80:80 --name web -v /web/book:/usr/share/nginx/html -v /web/conf.d:/etc/nginx/conf.d nginx

这个时候你就可以直接在浏览器输入你的ip地址浏览这个网页了。

scp提示权限被拒绝的解决办法

Linux的远程传输文件scp出现Permission denied (publickey).lost connection问题解决方法。

首先去本地电脑 ~/.ssh目录下看是否已经有密匙。如果没有可以通过下面命令生成一份。.pub结尾的是公匙。

cd ~/.ssh
ssh-keygen -t rsa

将本地主机上的id_rsa.pub文件拷贝到远程Linux主机的root用户目录下的.ssh目录下,并且改名为authorized_keys 。若已经有该文件可以把内容追加在后面,要配对多个机器就在后面追加就行了。

这样本地密匙跟远程主机密匙就能对上了,后续scp命令就不需要带鉴权信息了。

问题?

  1. 把多个web服务部署到同一个机器上,使用不同的路径访问。 目前尝试了编辑配置文件conf.d/default.conf,但貌似没效果,后续再深入研究一下。目前暂时启动了两个docker指定不同端口来解决这个问题,不过这样就只能这样访问ip:81,不优雅。
  2. 如何把多个web服务部署到同一个服务器并使用不同的子域名访问。

参考文章

Copyright © 413132340@qq.com 2020 all right reserved,powered by Gitbook该文章修订时间: 2020-11-30 07:49:29

results matching ""

    No results matching ""