hexo博客系统搭建(本地,github,阿里云)

前言

	之前在git上搭建过一套hexo博客系统,但是时间过了两年发现不会玩耍了。
	所以准备再复习一下,顺带记录一下。

准备工作

1.安装node.js

以Windows环境安装node.js为例,首先登录node.js官网,选择适合自己的版本进行下载,然后进行安装。windows下载msi文件直接可以安装。
在这里插入图片描述

2.安装git客户端

登录git官网选择版本进行下载,基本一路next下去即可轻松完成安装。
介于官网太慢可以用传送门下载,选择你想要的版本,它里面是降序排序。
在这里插入图片描述注意

安装过程中,注意勾选在右键菜单建立git bash快捷方式一项,因为之后的各种操作都需要在git bash中用命令行进行操作,方便随时随地打开命令窗口。默认选中的,直接下一步就好。

1.安装及初始化Hexo

终于到了我们的重头戏Hexo,整个博客都是基于Hexo来生成的。Hexo的安装需要通过npm命令来进行,安装完node.js之后就默认安装了npm包管理工具,而npm的官方仓库位于境外,由于众所周知的原因,我们大陆用户基本是访问不了官方源了,所以推荐大家使用淘宝镜像进行替换。

安装Hexo
在电脑任意空白处点击右键,选择Git Bash Here打开命令行
首先查看npm 是否安装
在这里插入图片描述
如果没安装执行,否则跳过下面这一步。
npm install -g cnpm –registry=https://registry.npm.taobao.org

1.1因为网络问题需要设置代理

npm config set proxy null
npm config set https-proxy null

也可以先通过以下代码查看代理设置,如果返回null那就不需要清理。

npm config get proxy
npm config get https-proxy

重新设置

npm config set registry http://registry.cnpmjs.org/

然后就可以使用下面的命令从npm安装Hexo:

npm install hexo-cli -g
在这里插入图片描述
初始化Hexo
安装完成之后,就可以选择一个自己的文件夹作为博客的根目录( 例如 C:\blog ),然后在该目录下打开命令行

hexo init
在这里插入图片描述
初始化博客空间,生成博客运作所需要的文件,接下来安装依赖包

npm install

可以参考https://www.jianshu.com/p/9464174f2dc1
最后一步你npm install不可少,它主要功能是用于安装package.json中的依赖,当有改动package.json 中的依赖时都要运行一次
到此hexo安装就算完成了,然后在命令行运行

此时,你的文件夹下的目录结构应该是这样:

在这里插入图片描述
本地运行
接下来自然是要亲眼领略一下博客的真容了。

分别在Git Bash中执行

hexo g
在这里插入图片描述
hexo s

会看到这样的提示

在这里插入图片描述

在浏览器地址栏输入http://localhost:4000/,按下回车键,准备好迎接美丽的新领域吧。
在这里插入图片描述

Attention:不用试图Ctrl+C从命令行复制地址,相信我,你会很郁闷

Hexo的一些基本命令

	hexo g #完整命令为hexo generate,用于生成静态文件
	
	hexo s #完整命令为hexo server,用于启动服务器,主要用来本地预览
	
	hexo d #完整命令为hexo deploy,用于将本地文件发布到github等git仓库上
	
	hexo n “my article” #完整命令为hexo new,用于新建一篇名为“my article”的文章
	
	hexo init [folder] 新建一个网站
	hexo new [layout] <title> 创建一篇新文章
	hexo sever或hexo s 启动服务器
	hexo clean 清除缓存文件 (db.json) 和已生成的静态文件 (public)
	hexo generate或hexo g 生成静态文件
	hexo deploy或hexo d 部署网站
	hexo migrate <type> 从其他博客系统迁移内容

发布一篇文章
首先Ctrl+C停止当前的本地服务,然后

hexo n “我的第一篇文章”

这样就会在博客目录下source_posts中生成相应的 我的第一篇文章.md文件( 例如 C:\blog\source_posts\我的第一篇文章.md )

文章需要使用Markdown语法进行编写

可以使用Notepad++等文本编辑软件进行编辑,还是推荐使用专业的支持Markdown语法的编辑器进行打开,例如Windows平台的MarkdownPad可以支持文章的实时预览,效果出众。

编辑完成后就可以进行本地预览

hexo g

hexo s

总结
到目前为止利用Hexo搭建本地环境已经完成,下面我们要把博客发布到github上。创建git仓库我就略过了。

发布到github上

首先打开_config.yml 配置文件
在这里插入图片描述
修改repository为你git的仓库地址
例如

  deploy:
  type: git
  repository: https://github.com/ooooooobh/ooooooobh.github.io.git 
  branch: master

在blog文件夹目录下执行生成静态页面命令:

$ hexo generate 或者:hexo g
此时若出现如下报错:

ERROR Local hexo not found in ~/blog
ERROR Try runing: ‘npm install hexo --save’
则执行命令:npm install hexo --save
若无报错,自行忽略此步骤。
再执行配置命令:

$ hexo deploy 或者:hexo d
注意坑三:若执行命令hexo deploy
仍然报错:无法连接git或找不到git,则执行如下命令来安装hexo-deployer-git:
在这里插入图片描述

$ npm install hexo-deployer-git --save
或者
$ npm install --save hexo-deployer-git
在这里插入图片描述
再次执行hexo generate和hexo deploy命令。
若你未关联Github,则执行hexo deploy
命令时终端会提示你输入Github的用户名和密码,即

Username for ‘https://github.com’:
Password for ‘https://github.com’:
在这里插入图片描述
输入git邮箱用户

git config --global user.email "你的邮箱"
git config --global user.name "你的名字"

在这里插入图片描述
在页面按照提示输入用户密码后还会出现个提示框输入用户密码,输入完成后deploy 成功
在这里插入图片描述
大功告成
在这里插入图片描述

个人服务器部署hexo

 个人用的是tomcat容器,
    需要先配置server.xml  <Context path="" debug="0" docBase="/root/hexo/public" reloadable="true" />
然后在webapps下面把hexo的public文件夹放进去就可以通过你的tomcat的服务端口+/public来访问了

在这里插入图片描述

服务器部署还可以参考
https://www.cnblogs.com/cnbai/p/12827866.html

https://www.jianshu.com/p/e1ccd49b4e5d
这个
https://www.jianshu.com/p/29216da82247

https://blog.csdn.net/wx_15323880413/article/details/104576799

2. Hexo博客的阿里云部署

2.1 安装nginx#

使用root用户远程登录阿里云服务器,使用yum命令进行安装。
我的是ubuntu机器没有yum所以用apt进行安装。

	系统:unbutun 16
	命令:apt-get install nginx
	检查:
	nginx -v
	nginx version: nginx/1.10.3 (Ubuntu)

whereis nginx
h.进入安装目录,nginx默认通过80端口访问,开放linux的80端口供外部访问

2.2 安装git

	apt  install git

2.3 建立Git仓库

Hexo可以使用Git来部署,这样每次写完之后就都可以使用git来一键部署了,比较方便。

注意:如果本地没有配置ssh,先配一个ssh。这里因为我已经有了,就不再配置了。

开始前先切到root用户,然后执行:

 	useradd git # 添加一个新用户
	passwd git # 设置git用户密码
	su git # 切换用户进行后续操作
	如果没有生成git目录可以cd到home下自己创建一个
	cd /home/git/
	mkdir -p projects/blog # 把项目目录建立起来
	mkdir repos && cd repos
	git init --bare blog.git # 创建仓库
	cd blog.git/hooks
	vim post-receive # 创建一个钩子

post-receive文件的内容如下:

	#!/bin/sh
	git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f

之后退出vim,继续进行用户相关的操作:

chmod +x post-receive # 添加可执行权限
exit # 返回到root用户
chown -R git:git /home/git/repos/blog.git # 给git用户添加权限

这样Git仓库就配好了。在本地试一下能不能把空仓库拉下来:

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

如果能拉下来,就说明配置成功了。
在这里插入图片描述

问题

 这里报错了是缺少key,无法建立连接

解决方案

首先,将本地生成的 id_rsa以及id_rsa.pub这两个文件删除掉
目录:本地C:\Users\你的用户名.ssh

然后,使用命令 ssh-keygen -t rsa -C "邮箱地址"重新生成密钥 连敲两次回车键
例如:ssh-keygen -t rsa -C bianhao07@outlook.com
在这里插入图片描述
会在本地C:\Users\你的用户名.ssh生成文件夹,里面有id_rsa和id_rsa.pub两个文件
在这里插入图片描述
然后复制id_rsa.pub文件里面的内容,到https://github.com/settings/keys新建一个,

在这里插入图片描述

最后,将id_rsa.pub文件里的内容复制到 git 的SSH key保存目录下即可。
git clone git@47.93.239.9:/home/git/repos/blog.git

在这里插入图片描述

2.4 防火墙部分(如果不涉及可以忽略)

先查看防火墙是否开启的状态,没有开启就开启防火墙

firewall-cmd --state
关闭与开启防火墙

1 systemctl stop firewalld.service
2 systemctl start firewalld.service
查看开放端口的情况

sudo firewall-cmd --list-all
services: dhcpv6-client ssh 表示 ssh 服务是放行的,而 ports: 为空,表示无端口号放行

复制代码
1 [root@bai ~]# sudo firewall-cmd --list-all
2 public
3 target: default
4 icmp-block-inversion: no
5 interfaces:
6 sources:
7 services: dhcpv6-client ssh
8 ports:
9 protocols:
10 masquerade: no
11 forward-ports:
12 source-ports:
13 icmp-blocks:
14 rich rules:
复制代码
接下来通过以下命令开放http 80 端口

1 sudo firewall-cmd --add-service=http --permanent
2 sudo firewall-cmd --add-port=80/tcp --permanent
命令末尾的–permanent表示永久有效,不加这句的话重启后刚才开放的端口就又失效了

然后重启防火墙

sudo firewall-cmd --reload
就会发现 services: 里出现了 http 服务,ports:里也出现了 80 端口

复制代码
1 [root@bai ~]# sudo firewall-cmd --list-all
2 public
3 target: default
4 icmp-block-inversion: no
5 interfaces:
6 sources:
7 services: ssh dhcpv6-client http
8 ports: 80/tcp
9 protocols:
10 masquerade: no
11 forward-ports:
12 source-ports:
13 icmp-blocks:
14 rich rules:
复制代码
i. 在阿里云开放80端口

由于我们要通过80端口访问nginx服务,而阿里云默认是禁止80端口访问权限的,所以我们要手动添加安全组,让阿里云给相应的端口放行。若不手动配置,我们将无法通过“公网IP+端口”的方式访问服务器。

2.5 启动nginx

可以通过whereis nginx来查看nginx的部署目录

whereis nginx
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx

进入/usr/sbin/ 目录,启动nginx

1 cd /usr/sbin/
2 ./nginx
启动过程可能报错
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
说明80端口已经被其他服务占用。将占用80端口的服务暂时关闭。
在这里插入图片描述
然后启动
没有任何消息,代表启动成功。
如下
在这里插入图片描述
此时,便可以通过“公网IP+端口”的方式访问 http://xx.xx.xxx.xxx:80/ 进入nginx欢迎页面了。
注:可以使用./nginx -s stop命令停止服务,也可以直接ps出来nginx进程直接杀死。

在这里插入图片描述

2.6 本地建立SSH信任关系(暂时可忽略,因为需要ssh)

目前每次对git仓库进行操作都需要输入密码,不太方便。但是我们已经配置了SSH,就可以通过建立SSH信任关系来免去输入密码的步骤:

ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip # 建立信任关系
ssh git@server_ip # 试一下能不能登录
如果不能登录或者还是要输入密码,就说明前面的操作有误,再检查一下吧。
首先参考https://www.cnblogs.com/cnbai/p/12827866.html

2.6.1 给git用户配置ssh免密公钥登录#

使用git用户免密公钥登录阿里云服务器的原理是:在本地计算机生成一个公钥文件和一个秘钥文件(类似于一个钥匙配一把锁),然后使用FTP工具将公钥文件上传到阿里云服务器,并公钥安装到authorized_keys列表中去(即:将公钥文件的内容拷贝到authorized_keys文件中去)。这样本地计算机便可以通过ssh方式免密连接我们的阿里云服务器了。

具体操作步骤如下:
a. 在服务器端将登陆用户切换到git用户,然后在~目录(根目录)下创建.ssh文件夹,用来存放公钥

1 su git
2 cd ~
3 mkdir .ssh
b. 在本地计算机桌面右键打开GitBash,在本地生成公钥/私钥对

1 cd ~
2 cd .ssh
3 ssh-keygen
接下来,碰见系统询问就直接按回车键。此时便会在本地计算机的用户根目录(C:\Users\用户名)下自动生成.ssh(隐藏)文件夹,并在其中创建两个文件,分别为:id_rsa(私钥)和id_rsa.pub(公钥)。

c. 在本地计算机上给私钥设置权限

1 chmod 700 ~/.ssh
2 chmod 600 ~/.ssh/id_rsa
d. 将本地计算机生成的公钥上传到服务器的~/.ssh目录下

e. 上传完成后切回服务器端,继续以git用户的身份进入服务器~/.ssh目录,新建一个authorized_keys文件,并将id_rsa.pub文件中公钥的内容拷贝到该文件中。(注:该步骤既可以用命令行操作,也可使用xftp工具复制)

1 cd ~/.ssh
2 cp id_rsa.pub authorized_keys
3 cat id_ras.pub >> ~/.ssh/authorized_keys
f. 在服务器上设置文件权限

1 chmod 600 ~/.ssh/authorized_keys
2 chmod 700 ~/.ssh
g. 确保设置了正确的SELinux上下文

restorecon -Rv ~/.ssh
h. 在本地计算机上使用ssh方式连接我们的云服务器

ssh git@xxx.xxx.xxx.xxx(阿里云公网IP)
有可能让输入密码,自定义密码回车(记住密码)

2.7 更改git用户默认的shell(暂时可忽略,因为需要ssh)

为了安全起见,这个部署用的git用户最好只能用git clone等操作,所以需要更改它默认的shell:

cat /etc/shells # 查看 git-shell 是否在登录方式里面
which git-shell # 找到git-shell的路径,记下来
vim /etc/shells
然后把刚才记下来的路径添加进去,保存,然后vim /etc/passwd,把git❌1000:1000::/home/git:/bin/bash修改为git❌1000:1000:,:/home/git:/usr/bin/git-shell。

这样本地再用ssh应该就没法登录了,只能进行git操作。

2.8 部署上线,这里改的是本地电脑上的配置

有了git仓库,就可以部署hexo文件上去了。

首先改一下_config.yml:

deploy:
  type: git
  repo: git@your_ip:/home/git/repos/blog.git
  branch: master

然后安装hexo-deployer-git,否则没法使用git部署:
前面git部署中已经讲述过怎样安装hexo-deployer-git 可以参考

npm install --save hexo-deployer-git

编辑hexo中的package.json文件,添加部署脚本:

"scripts": {
    "build": "hexo generate",
    "clean": "hexo clean",
    "deploy": "hexo clean && hexo g -d",
    "server": "hexo server"
  },

然后执行npm run deploy就可以把文件部署上去了,出现类似于下面的提示,就说明部署成功。

执行
hexo clean
hexo deploy -g
下面报错可以忽略只要保证文件上传到服务器主机即可
在这里插入图片描述
上传后的文件,最后就是配置nginx反向代理,也可以直接修改nginx指向,如果你只有一个服务的话。
在这里插入图片描述

可以参考https://www.jianshu.com/p/e03e363713f9

报错

does not appear to be a git repository
解决:https://www.jianshu.com/p/41b9d05687f4
在这里插入图片描述

git config --list
可以查看邮箱

解决方案

fatal: ‘git@47.93.239.9/home/git/repos/blog.git’ does not appear to be a git repository
fatal: Could not read from remote repository.

1 发现是本地hexo文件中_config.yml文件配置的地址写的时候少了冒号

要注意这里
在这里插入图片描述
在这里插入图片描述

问题
remote: fatal: cannot create directory at ‘2020’: Permission denied
To 47.93.239.9:/home/git/repos/blog.git
5f15944…a866bea HEAD -> master
git用户没有权限赋予权限将git文件夹转移到git用户,之前是root用户

drwxr-xr-x 5 git git 4096 May 28 14:24 git

2.9 配置Nginx反向代理

首先需要配置一下域名解析记录,把tutorial.wendev.site也绑定到现在的ip上,以便进行下一步操作。

前面配置完仓库,也把文件部署上去了,我们把Nginx反向代理也来配置一下。

cd /etc/nginx
cp nginx.conf nginx_backup.conf # 备份配置文件
vim nginx.conf
在http节点里面增加server部分

和服务器部分的

        listen       80;
        server_name  www.wendev.site;
 
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
 
        location / {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:10000;
        }
    }
 
    server {
    listen      80;
    server_name wendev.site;
 
    # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
 
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:10000;
        }
    }
 
    server {
    listen 80;
    server_name tutorial.wendev.site;
 
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
 
        location / {
            root /home/git/projects/blog;
        index index.html index.htm;
        }
 
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root html;
    }
    }

这样就可以把两个不同的域名 www.wendev.site和tutorial.wendev.site 分别绑定到10000端口(已有的个人网站)和新的hexo网站了。

然后重新加载一下配置:

nginx -s reload
访问tutorial.wendev.site、wendev.site和www.wendev.site,发现三个网站都正常,大功告成!

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云浩舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值