前言
之前在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,发现三个网站都正常,大功告成!