Hexo搭建个人博客并部署到vps服务器

2,313 阅读4分钟

本文作者: IDEAShin

本文链接: www.ideashin.com/post/6c0c97…

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

前言

​ 看到别人都在写blog,拥有自己的小站,实在羡慕不已。虽然自己也在做笔记,但是总感觉自己偷偷放着不那么舒服,不如放在网上和大家一起交流共勉。因此我决心要有自己的blog。最后终于完成了自己第一个的网站,也是自己第一个blog,也是有了自己的第一个域名ideashin.com。

​ 建站的过程并不怎么顺利,本来Hexo+GitHub是绝配,但是我本身就有一个限制(开小飞机)的vps,一直放着也是浪费,因此决心用vps部署一个Hexo的博客。因为以前并没有接触过,所以查看了很多资料才完成的。以下就是我建站的过程,遇到的问题我都放在最后面了,如果有幸能被看到的话希望能有所帮助。

​ 在此写下第一篇博客,也是自己的一个开端,希望对自己有能所提升。也方便自己以后查阅,也希望能有幸帮到他人。

本地安装

环境配置

安装hexo需要在本机安装Git以及Node.js

Git

  • 从官网下载安装好后git-scm.com/

    • 使用 git -version'可以查看安装的版本
  • 配置用户信息,设置用户名以及邮箱

    $ git config --global user.name "用户名"
    $ git config --global user.email "邮箱地址"
    #查看是否成功
    $ git config --list
    
  • 重要 获取key,后面配置SSH要用到

    在Git Bash中执行

    #创建公钥
    $ ssh-keygen -t rsa -C "邮箱地址"
    #然后获取复制公钥备用
    $ cat ~/.ssh/id_rsa.pub
    

Node.js

  • 官网下载安装nodejs.org

    输入node -version查看安装版本

Hexo配置

具体可以参照官方文档,有中文版就介绍也很详细,这里只简单配置

hexo.io/zh-cn/docs/

安装

参照官方文档,使用下列代码安装

$ npm install -g hexo-cli

建站

在你想存放hexo的地方新建一个文件夹,如Hexo,然后在文件夹内右键启动git的git bash,执行如下代码

$ hexo init
$ npm install

注意: 不要用git init,这样会把整个hexo文件都同步到服务器,应该是hexo init

测试

$ hexo clean && hexo g && hexo server

执行后可以输入网址本地查看http://localhost:4000

Server操作

确保您的系统和apt包

首先,通过运行以下命令确保您的系统和apt包列表完全更新:

$ apt-get update -y
$ apt-get upgrade -y

安装git、sudo、nginx

$ apt install git

#debian默认无sodu
$ apt-get install sudo

$ apt-get install nginx

检查版本确保安装

$ git --version

$ nginx -V

配置nginx

#切换目录
$ cd /etc/nginx/sites-available
#备份默认配置
$ cp default default.bak 
#修改配置
$ vim default                    

#检查是否有错误
$ nginx -t 
#保存退出后,启动
$ nginx:systemctl start nginx
#设置开机自动启动
$ systemctl enable nginx
#查看运行状态
$ systemctl status nginx
#显示running表示成功运行

创建git用户

创建

$ adduser git

赋予sudo权限

$ chmod 740 /etc/sudoers
$ vim /etc/sudoers

然后修改在root下面添加

git ALL=(ALL) ALL

改回权限

$ chmod 400 /etc/sudoers

配置SSH

切换git用户,并到git用户目录

#切换到git用户
$ su git

#转到git用户目录
$ cd /home/git

配置ssh

# 创建.ssh文件夹
$ mkdir ~/.ssh
#输入可查看是否创建
$ ls -a
# 创建authorized_keys文件并编辑
$ vim ~/.ssh/authorized_keys
# 如果你还没有生成公钥,那么首先在本地电脑中执行 cat ~/.ssh/id_rsa.pub | pbcopy生成公钥
# 再将公钥复制粘贴到authorized_keys
# 保存关闭authorized_keys后,修改相应权限
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh
  • 然后输入测试是否可以登录(免密?)

    $ ssh -v git@68.168.141.184
    
    • 默认22端口,不是则需要在后面加上-p 端口号

    • WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!是以前配置过主机,需要进行删除

      $ vi ~/.ssh/known_hosts
      

创建git裸库

  • 创建裸库
# 回到git目录
$ cd /home/git
# 使用git用户创建git裸仓库,以blog.git为例
$ git init --bare blog.git
  • 根据前面配置的nginx中的根目录

#切换目录
$ cd /var/www/   
#创建网站目录,以blog为例
$ mkdir blog            

检查用户权限

检查一下之前的blog.git、.ssh、blog目录的用户组权限是否都为git:git

$ ls -l /var/www/
$ ls -l /homw/git/

如果不是则

$ sudo chown git:git -R /var/www/blog
$ sudo chown git:git -R /home/git/blog.git

使用git-hooks同步网站根目录

使用一个钩子文件:post-receive,每当git仓库接收到内容的时候,就会自动调用这个钩子,把内容同步到网站根目录。

git用户下执行

#切换到hooks目录下
$ cd /home/git/blog.git/hooks
#创建文件
$ vim post-receive          

添加如下

#!/bin/bash
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/home/git/tmp/hexo_tmp	#在这个文件夹下随便创建文件,不然出错
PUBLIC_WWW=/var/www/blog				#在这个文件夹下随便创建文件,不然出错
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

保存后,执行以下赋予权限

$ chmod +x post-receive

关闭git用户的shell权限

#执行
$ vim /etc/paswd

将最后一行

git:x:1000:1000::/home/git:/bin/bash
#改为
git:x:1000:1000::/home/git:/usr/bin/git-shell

本地操作

配置本地Hexo的_config.yml

deploy: 
  type: git
  repo: git@你的服务器IP:/home/git/blog.git
  branch: master

同步到服务器

#清理、生成、部署
$ hexo clean && hexo g && hexo d

到现在已经全部完成了,可以自己进行一些配置进一步完善

问题总结

服务器使用sodu命令时无法使用

  • 原因

    • debian默认sodu
  • 解决

    执行如下

    $ apt-get install sudo
    

systemctl: command not found

  • 原因

    • 系统版本旧就会没有systemctl命令
  • 解决

    使用service命令

    $ sudo service {servicename} {stop|start|restart}
    

fatal: Not a git repository (or any of the parent directories): .git

  • 原因
    • 提示说没有.git这样一个目录
  • 解决
    • git init就好了

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

  • 原因

    • 本机git连接过服务器地址,但是服务器重装了,需要进行删除
  • 解决

    输入以下命令,删除文件中要连接的服务器

    $ vi /Users/wangdong/.ssh/known_hosts
    

repository ‘xxxxxxxxx’does not exist

  • 原因
    • 如果要删除这个目录下的文件,这个目录下必须有文件,不然删除就是无意义的
  • 解决
    • 提前在该目录下新建一些文件

在clone一些git项目的时候,有些可能时间太久远,下载失败

  • 解决

    将git clone http:改为git clone git: