服务器搭建Hexo博客
Yrh 苦逼后端

因为最近拿服务器搞了hexo,索性写个教程吧,hexo可以搞在GitHubPages或者Heroku啥的,但是毕竟访问速度慢嘛。

我服务器是腾讯云轻量hk,搭建之后访问速度还是很快的。比上cdnTypecho 快多了
image


一、在本地Windows上搭建Hexo

1.1 配置本地node环境

  • node下载 官网下载,可以的话推荐使用 nvm 安装

  • 打开cmd查看node安装情况

    1
    2
    node -v
    npm -v
  • 配置全局环境

    • 进入安装目录,创建文件夹node_globalnode_cache 并执行

      1
      2
      npm config set prefix "D:\programming\nodejs\node_global"
      npm config set cache "D:\programming\nodejs\node_cache"
    • 环境配置:新增环境变量NODE_PATH和添加Path,两个值都为 \node_global的目录位置

  • 安装hexo-cli

    1
    2
    npm i hexo-cli -g
    hexo

    image

  • 随便找个地方初始化文件,执行如下命令:

    1
    2
    mkdir hexo-blog
    cd hexo-blog && npm init -y

1.2初始化hexo项目

  • 在 中的hexo-blog文件下初始化

    1
    2
    hexo init myblog && cd myblog
    npm i
  • 下载主题

    • 这里我用的是next主题,其他同理
    1
    git clone https://github.com/iissnan/hexo-theme-next themes/next
  • 本地配置文件_confing.yml中设置theme属性

    image

  • 本地执行hexo项目,添加start脚本

    1
    "start" : "hexo clean && hexo g && hexo s"

    image

    然后执行命令

    1
    npm run start

    打开 http://localhost:4000 验证效果吧

1.3git环境搭建

  • git安装:官网下载

  • 生成ssh认证,执行如下命令

    1
    2
    3
    4
    git config --global user.name "yourname"
    git config --global user.email youremail@example.com
    ssh-keygen -t rsa -C "youremail@example.com"
    git config --global core.autocrlf false // 禁用自动转换,
  • 最后获取到的ssh认证在C:\Users\yourname\.ssh

二、服务器配置

这个之前写过来着

教程是Centos服务器,Ubuntu Debian 命令自行更换即可。

1.1 搭建远程Git私库

  • 在服务器安装 git

    1
    2
    3
    git --version // 如无,则安装
    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
    yum install -y git
  • 创建用户并配置其仓库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    useradd git
    passwd git // 设置密码
    su git // 这步很重要,不切换用户后面会很麻烦
    cd /home/git/
    mkdir -p projects/blog // 项目存在的真实目录
    mkdir repos && cd repos
    git init --bare blog.git // 创建一个裸露的仓库
    cd blog.git/hooks
    vi post-receive // 创建 hook 钩子函数,输入了内容如下
    1
    2
    #!/bin/sh
    git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f
  • 添加完毕后修改权限

    1
    2
    3
    chmod +x post-receive
    exit // 退出到 root 登录
    chown -R git:git /home/git/repos/blog.git // 添加权限
  • 测试git仓库是否可用,另找空白文件夹

    1
    git clone git@server_ip:/home/git/repos/blog.git

    如果能把空仓库拉下来,就说明 git 仓库搭建成功了

    image

  • 建立ssh信任关系,在本地电脑

    1
    2
    ssh-copy-id -i C:/Users/yourname/.ssh/id_rsa.pub git@server_ip
    ssh git@server_ip // 测试能否登录

    :此时的 ssh 登录 git 用户不需要密码!否则就有错,请仔细重复步骤 3-5

  • 为了安全起见禁用 git 用户的 shell 登录权限,从而只能用 git clone,git push 等登录

    1
    2
    3
    4
    cat /etc/shells // 查看 git-shell 是否在登录方式里面
    which git-shell // 查看是否安装
    vi /etc/shells
    添加上2步显示出来的路劲,通常在 /usr/bin/git-shell

    修改/etc/passwd中的权限

    1
    2
    3
    4
    5
    // 将原来的
    git:x:1000:1000::/home/git:/bin/bash

    // 修改为
    git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell

1.2搭建nginx服务器

  • 下载并安装nginx

    1
    2
    3
    4
    5
    6
    7
    8
    cd /usr/local/src
    wget http://nginx.org/download/nginx-1.15.2.tar.gz
    tar xzvf nginx-1.15.2.tar.gz
    cd nginx-1.15.2
    ./configure // 如果后面还想要配置 SSL 协议,就执行后面一句!
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
    make && make install
    alias nginx='/usr/local/nginx/sbin/nginx' // 为 nginx 取别名,后面可直接用
  • 配置nginx文件

    • 先启动是否安装成功

      1
      nginx // 直接来!浏览器查看 server_ip,默认是 80 端口
    • 修改配置文件

      1
      2
      3
      nginx -s stop // 先停止nginx
      cd /usr/local/nginx/conf
      vi nginx.conf

      修改root解析路径,如下图

      image

      同时将 user 改为root如下图,不然nginx无法访问 /home/git/projects/blog

      image

      1
      nginx -s reload

三、发布

至此我们就把本地和服务器的环境全部搭建完成,现在利用 hexo 配置文件进行链接

配置_config.yml文件

  • 编辑_config.ymldeploy 属性

    1
    2
    3
    4
    deploy:
    type: git
    repo: git@ip:/home/git/repos/blog.git
    branch: master
  • package.json 中添加npm脚本

    1
    "dd": "hexo clean && hexo g -d"

    image

  • 若在本地调试则使用

    1
    hexo clean && hexo g && hexos

    或者要是跟我一样配置了scripts

    1
    npm run start
  • 若发布

    1
    hexo clean && hexo g -d

    或者要是跟我一样配置了scripts

    1
    npm run dd
 Comments