背景

最近在学习python,想搭建属于自己的Blog,但学习历程确实太长,期间偶遇hexo,其基于静态网页网页实现,且使用markdown编辑,支持git远程同步,主题很多且搭建的网站确实很优美,所以对其搭建方式做了尝试。

搭建方式参考于:https://mrxiuxing.com/posts/d3b909a4.html,由衷的感谢博主的细心记录,收益良多。

搭建方式

安装环境预览

  • 本地环境(用于生成本地静态网站)

    系统版本:windows 10 (这个其实不影响)

    安装环境:git、nodejs、hexo

  • 服务器环境(用于服务端git自动化部署)

    系统版本:ubuntu 20.04

    安装环境:git、nginx

服务器端配置

  1. 安装git

    1
    sudo apt install git -y
  2. 创建git用户,以及修改sudoers文件信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 创建该用户主要是为了服务器安全着想,一路enter即可,如遇到让输入密码时请输入密码即可
    sudo adduser git
    sudo passwd git

    # 该文件是只读文件,需要编辑时,需要修改其全新啊
    sudo chmod 740 /etc/sudoers
    # 编辑之前学会备份很重要,防止异常操作
    sudo cp /etc/sudoers /etc/sudoers.bak
    sudo vim /etc/sudoers

    # 打开sudoers在单独的一行添加如下内容(文末添加都可以)
    git ALL=(ALL:ALL) ALL

    # 修改完上述内容后,将sudoers文件权限修改回去
    sudo chmod 400 /etc/sudoers
  3. 创建网站根目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 切换到用户git,修改完毕后,切换回管理员即可
    su - git

    # 创建文件夹.ssh,便于后面客户端配置免密钥
    mkdir .ssh

    # 创建网站所使用的目录
    mkdir /home/git/hexo

    # 修改该文件夹所属的组和用户(如果不是用git用户创建的就需要执行这步)
    chown git:git -R /home/git/hexo
  4. 安装和启动nginx

    1
    2
    3
    4
    sudo apt install nginx -y  # 安装
    sudo systemctl restart nginx.service # 启动服务

    # 安装成功后,访问服务器对应的IP看是否能够正常的打开nginx的欢迎页面
  5. 配置nginx

    1
    2
    3
    4
    5
    # 备份源文件
    sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

    # 配置nginx,然后将配置文件的内容进行修改
    sudo vim /etc/nginx/sites-available/default
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    # nginx配置文件:default的内容
    # default文件知识nginx的默认配置文件,另外一个配置文件是nginx.conf(此处不用修改),看自己需要进行修改
    server {
    # 此处是服务端绑定的端口,可自行设定,只是设定后可能需要手动将端口开放,否则无法访问
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name www.52zhaoyue.com; # 修改为自己的域名,没有的话就直接配置服务器端的IP
    root /home/git/hexo; # 修改为网站的根目录
    index index.html index.php index.htm;
    #Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
    location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }
    }
    1
    2
    3
    4
    5
    # 配置完成后使用nginx -t检查配置文件格式是否有误
    nginx -t

    # 重启nginx服务
    sudo systemctl restart nginx.service
  6. 建立git仓库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 理解就是在服务器端建立的一个代码储存仓库,每次提交变更时存放文件
    # 切换到git用户
    su - git

    # 建立仓库
    sudo git init --bare blog.git # 一定要加上bare

    # 将创建的仓库文件夹的用户组和用户修改为git
    sudo chown git:git -R blog.git

    # 创建一个git的钩子,当我们每次提交变更以后,服务器回自动调用这个钩子将仓库中的代码复制到我们网站所在的根目录下
    sudo vim /home/git/blog.git/hooks/post-receive
    # 在文件post-receive中添加如下内容:
    # --work-tree是网站根目录的路径,--git-dir是git仓库的路径
    #!/bin/sh
    git --work-tree=/home/git/blog --git-dir=/home/git/blog.git checkout -f

    # 给刚刚的文件添加可执行权限
    sudo chmod +x /home/git/blog.init/hooks/post-receive

本地电脑配置

  1. 安装git软件:

    下载地址:https://npm.taobao.org/mirrors/git-for-windows/

    安装步骤:除了选择安装路径外,其它都可以默认,一直next直到结束

    1
    2
    3
    4
    # 安装完成后需要设置一下邮箱和用户信息,不然执行hexo d时会报错,配置了就不会报错
    # 在任意桌面,右键选择git bash
    git config --global user.name "shuai qi"
    git config --global user.email "shuaiqi@126.com"
  2. 配置git远程免密钥

    1
    2
    3
    4
    5
    6
    # 在windows的cmd命令行中执行
    ssh-keygen -t rsa

    # 然后进入用户个人目录下的.ssh中,将id_rsa.pub文件(公钥)上传到服务器下,并更名为:authorized_keys
    cd .ssh
    scp -P 223 id_rsa.pub git@192.168.0.101:.ssh/authorized_keys
  3. 进服务器修改文件的权限信息

    1
    2
    3
    4
    ssh -p 223 git@192.168.0.101

    sudo chmod 600 .ssh/authorized_keys
    sudo chmod 700 .ssh
  4. 回到本地,调试是否可以免密登录

    1
    2
    # 在任意桌面,右键鼠标选择git bash即可调出git的命令窗口
    ssh -v git@192.168.0.101 # 正常登录了就表示没问题
  5. 安装nodejs

    1
    2
    3
    4
    # NodeJS安装方式详见gitbook中的描述,此处仅描述安装hexo及其组件
    # 切换nodejs的安装目录下
    cd NodeJS
    npm install -g hexo
  6. 在本地创建一个网站的目录,专门用于修改文件内容

    1
    2
    3
    4
    5
    # hexo init:命令用于初始化本地文件夹为网站的根目录,简写为hexo i
    # folder:可选参数,用以指定初始化目录的路径,若无指定则默认为当前目录
    hexo init [folder]

    # 初始化完毕后,还需要安装hexo的一些依赖

    其它相关命令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # hexo new:命令用于新建文章,一般可以简写为hexo n
    # layout:可选参数,用以指定文章类型,若无指定则默认由配置文件中的 default_layout 选项决定
    # title:必填参数,用以指定文章标题,如果参数值中含有空格,则需要使用双引号包围
    hexo new [layout] <title>

    # hexo generate:命令用于生成静态文件,一般可以简写为hexo g
    # -d:选项,指定生成后部署,与 hexo d -g 等价
    hexo generate

    # hexo server:命令用于启动本地服务器,一般可以简写为hexo s
    # -p 选项,指定服务器端口,默认为4000
    # -i 选项,指定服务器 IP 地址,默认为0.0.0.0
    # -s 选项,静态模式 ,仅提供 public 文件夹中的文件并禁用文件监视
    hexo server

    # hexo deploy:命令用于部署网站,一般可以简写为hexo d
    # -g选项:指定生成后部署,与 hexo g -d 等价
    hexo deploy

    # hexo clean:命令用于清理缓存文件,是一个比较常用的命令
    hexo clean
  7. 进入刚刚创建的网站目录下安装模块

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 安装hexo-deployer-git,安装后就可以正常的提交网站的文件到git仓库了
    cd folder

    # 这个安装的不是全局的,如果新建一个网站,最后依旧需要安装该模块
    npm install hexo-deployer-git --save

    # 为网站提供搜索功能
    npm install hexo-generator-searchdb --save
    # 修改butterfly文件中的local_search为true
    local_search:
    enable: true

    # 如果需要添加网站字数的统计功能,则需要安装hexo-wordcount
    npm install hexo-wordcount --save
  8. 进入网站根目录,修改_config.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 修改主题,只需将theme后的内容修改为对应的主题名称即可
    theme: landscape

    # 修改deploy部分内容(在文末),其中没有的部分需要手动添加,其它的内容参看官方说明
    deploy:
    type: git
    repo: git@192.168.0.101:/home/git/blog.git # repository url
    branch: master

    官方配置说明:https://hexo.io/zh-cn/docs/configuration.html
  9. 尝试提交内容

    1
    2
    3
    4
    5
    hexo clean
    hexo g
    hexo d

    # 如果没有问题,应该是会提交成功的
  10. 如果各种提交均正常以后,还需要进入服务器端,将git用户的shell登录权限给禁用掉

    1
    2
    # 配置完以后git用户可以通过ssh正常使用git,但是无法登录shell
    sudo usermod -s /usr/bin/git-shell git

其它