为什么我要搭建自己的个人博客
自己记录自己的学习经历,锻炼语言表述的能力养成总结归纳的学习习惯各种第三方动态博客不能满足我对各种功能的需求作为不断折腾的青年,当然要学习各种技术来折腾为什么选择Hexo+阿里云
市面上有许多可以搭建个人博客的方案,比如:
简书、CSDN、掘金、博客园等第三方动态博客
在这些平台上写博客很方便,但是限制也很多,不能满足自己需求
使用WordPress等动态博客框架+服务器
之前使用过WordPress,但是它需要连接国外服务器,因此在更换主题和设置等方面响应就很慢了,而且主题大多也是偏向商业风格的
静态博客中有Hexo、Hugo、jekyll等多种框架
经过考量,Hexo在国内比较成熟,有众多的开源主题,生态环境比较好,所以选择了Hexo
如果将Hexo部署在github上,访问比较慢,而且部署在git托管平台上没有个性的域名(最重要/dog)
另一个方面是增加自己使用Linux服务器的熟练程度
Let’s do it
一、原理
首先要在本地计算机搭建Hexo环境,使用hexo generate
命令将.md文章渲染成静态的html页面,再使用hexo deploy
命令触发git,通过公钥免密登录服务器,进而将静态页面推送到服务器建立的git仓库。
服务器通过钩子(git hooks)将静态页面拉入到网站的根目录下,实现博客的自动部署
二、本地计算机Hexo安装
安装Git
从官网或国内镜像下载安装软件后一路next即可
安装完后右键菜单如下
安装Node.js
从官网下载安装即可
安装后打开cmd查看版本号验证是否成功
C:\Users\18996>node -vv14.8.0
Node.js中有npm包管理工具,也可以再cmd中查看版本
C:\Users\18996>npm -v6.14.7
安装Hexo
在某个盘新建一个文件夹用来存放博客,这里使用的名称是blog,进入文件夹右键,选择Git Bash Here
,使用如下安命令安装Hexo
npm install -g hexo-cli
Hexo安装完成之后,再在这个文件加下新建一个文件夹,这里使用的名称是myblogs
hexo init myblogscd myblogsnpm install
完成后会在myblogs文件夹下生成项目文件
输入命令hexo server
启动hexo
在浏览器中访问 http://localhost:4000/即可访问hexo博客
三、服务器配置
域名
在阿里云可以注册域名,这里就不过多阐述,可以根据其他文章来学习,步骤很简单
购买域名后需要进行备案,在官网首页右上方选项中就有备案选项,根据提示完成即可,这个过程可能有点长,大概一星期左右
在网站搭建好后一般需要将备案号在网站底部标明
服务器准备
购买最低版本的阿里云ECS就够用了1核2G(预装CentOS即可)+40G高效云盘+1M带宽
注意:学生有优惠,需要先进行学生认证
购买阿里云服务器后要做的事:
重置实例密码。登录阿里云官网后在服务与产品页面找到云服务器ECS
点击实例名称(蓝色的),在基本信息的右边点击“更多”,选择重置实例密码即可,这个实例密码是用来远程连接服务器
远程连接服务器。可以使用阿里云自带的VNC连接,但使用这种方法除了需要实例密码外还需要一个6位数的远程连接密码,具体操作可以自行搜索学习。另一种方式是通过远程连接软件如Xshell,PuTTY等,我选择的是Xshell配置安全组。这一步很重要,在第一步中进入实例详情页面后,左边选项的最后面有个“本实例安全组”,进入后配置规则,开放22、23、80端口,具体的操作可以按照阿里云指导的做
四、Hexo部署到阿里云
服务器上安装nginx
这里使用的是nginx作为Web服务器,因此要先安装nginx服务
先使用Xshell连接到服务器,具体操作是打开Xshell,新建会话(左上角文件——>新建),协议选择SSH,端口选择22,第一次连接会要求输入实例密码,就是之前重置的那个密码,自己的电脑可以选择永久保存,就不用每次都输入密码才能连接了
1.安装nginx以来环境,所有提示均输入yes
#yum install gcc-c++#yum install -y pcre pcre-devel#yum install -y zlib zlib-devel#yum install -y openssl openssl-devel
2.下载nginx安装包
#wget -c /download/nginx-1.19.2.tar.gz
这里可以自行选择版本,推荐使用最新的或最新的前一个版本,版本号就是1.19.2
,自行更换即可
3.将安装包解压到/usr/local
目录下
#tar -xvf nginx-1.19.2.tar.gz -C /usr/local
4.进入/usr/local
目录,确认解压到该目录下
#cd /usr/local#ls -al
会发现有一个nginx名字的文件夹(蓝色字体)
5.进入nginx版本目录,即nginx-1.19.2
#cd /usr/local/nginx/nginx-1.19.2
列出文件会发现有一个configure
配置文件,执行它
#ls -al#./configure
6.编译并安装nginx
#make#make install
7.查找nginx安装目录
whereis nginx
有显示则安装成功
8.进入安装目录
#cd /usr/local/nginx#ls -al
9.nginx默认通过80端口访问,而Linux默认情况下不会开放该端口,因此需要开放Linux的80端口
接着上一步进行操作
#/sbin/iptables -I INPUT -p tcp -dport 80 -j ACCEPT
10.进入/usr/local/nginx/sbin
目录,启动nginx
#cd sbin ------因为第8步还在/usr/local/nginx目录下,该目录下有个sbin目录,第八步使用ls命令后可以看见#./nginx
没有任何消息代表成功,此时可用通过公网IP+端口号(80)的方式访问,会显示nginx欢迎页面
注:可以使用./nginx -s stop
命令停止服务
配置nginx服务器路由
1.为hexo创建一个部署目录/home/www/hexo
#mkdir -p /home/www/hexo
2.进入/usr/local/nginx/conf
目录,打开该文件夹下的nginx.conf配置文件
#cd /usr/local/nginx/conf#ls -al#vim nginx.conf
进入后按 i 键切换到编辑模式,需要进行如下配置(键盘上下移动)
将其中的部署跟目录(root)修改为/home/www/hexo 将域名(server_name)修改为自己的域名,没有就填公网IP 查看监听段都(listen)是否为80(不用修改)
完成后按左上角的Esc退出,输入:wq
后回车保存并退出(注意冒号)
安装node.js
1.退回用户目录,安装node.js
#cd ~#curl -sL /setup_14.x | bash -#yum install -y nodejs
其他版本可以参考此处
网页的这里是CentOS的指导
2.查看安装结果,打印版本号即为安装成功
#node -v#npm -v
安装Git
为了实现博客的自动部署,我们后面要使用公钥免密登录服务器。为了安全起见,最好不要使用root用户免密登录。因此,我们要创建一个新的git用户,用于远程公钥免密登录服务器。
1.创建名为git
的用户
#adduser git
2.修改其权限
#chmod 740 /etc/sudoers
3.打开文件
#vim /etc/sudoers
和之前相同操作,进入编辑模式。找到root ALL=(ALL) ALL
,在其下面添加一行
git ALL=(ALL) ALL
如:
编辑完后退出
4.改回该用户权限
#chmod 400 /etc/sudoers
5.设置git用户的密码
#sudo passwd git
输入命令后直接输入密码,输入完后直接回车(会要求确认密码)
给git用户配置ssh免密公钥登录
1.在服务器端切换到git用户,在其用户目录下创建.ssh
文件用来存放公钥
#su git--------输入后会要求输入密码$cd ~$mkdir .ssh
2.在本地计算机桌面右键打开GitBash,在本地生成公钥/私钥对
$cd ~$cd .ssh$ssh-keygen
记住是在本地计算机,不是服务器
输入上面的命令后,碰见系统询问一律回车。结束后会在本地的用户目录(C:\用户\用户名,这个用户名是自己windows的账户名)下生成.ssh隐藏文件夹(需要在上方查看中勾选隐藏的项目才能看到),其中还有两个文件,分别为:id_rsa(私钥)和id_rsa.pub(公钥)
注:两个密钥的名字不一定是id_rsa,这里用的是一般形式
3.在本地计算机上给私钥设置权限
之前那个gitbash没有关闭,如果关闭了再在桌面打开即可
$chmod 700 ~/.ssh$chmod 600 ~/.ssh/id_rsa
4.下载并安装FTP工具
Xshell有配套的Xftp,可以使用免费版本即可,或者使用阿里云官方提供的FileZilla
如果使用Xshell,则连接后在上方找到Xftp的标志即可连接到服务器的ftp端口
Xftp右边的窗口是服务器的文件。进入/home/git
目录,将本地的.ssh
文件里的公钥上传到服务器的.ssh
文件夹中,没有该文件夹就创建
5.在服务器上进入~/.ssh
目录,新建一个authorized_keys
文件,并将公钥中的内容拷贝到该文件中
可以直接使用FTP工具,在Xftp中直接右键文件,使用文本编辑,在本地计算机上用记事本打开公钥文件直接复制粘贴保存即可
不使用ftp工具而使用命令的话就是(此时仍是git用户)
$cd ~/.ssh$cp id_rsa.pub authorized_keys$cat id_rsa.pub >> ~/.ssh/authorized_keys
6.在服务器上设置文件权限
$chmod 600 ~/.ssh/authorized_keys$chmod 700 ~/.ssh
7.确保设置了正确的SELinux上下文
$restorecon -Rv ~/.ssh
现在使用ssh远程登录服务器的时候则不会提示输入密码(将文章推送到远程仓库的时候,我在创建密钥的时候创建了密码,所以还是需要输入密码)
8.在本地计算机上使用ssh连接到服务器
仍然使用GitBash
$ssh -v git@xxx.xxx.xxx.xxx(阿里云公网IP)
或
$ssh git@xxx.xxx.xxx.xxx(阿里云公网IP)
登录成功会有welcom to Alibaba Cloud Elastic Compute Service!
配置Git仓库
1.在服务器上使用git用户创建一个Git仓库,并且在该仓库中创建一个post-receive
钩子文件
$cd ~$git init --bare hexo.git$vi ~/hexo.git/hooks/post-receive
2.按 i 进入编辑模式后,输入git --work-tree=/home/www/hexo --git-dir=/home/git/hexo.git checkout -f
意为:让钩子文件删除/home/www/hexo目录下原有的文件,然后从blog.git仓库clone新的博客静态文件到/home/www/hexo目录下
按Esc,输入:wq
保存并退出
3.授予钩子文件可执行权限
$chmod +x ~/hexo.git/hooks/post-receive$cd ~$sudo chmod -R 777 /home/www/hexo
4.重启ECS服务器实例
重启过后要重启启动nginx服务器
在服务器上操作,git和root用户都可以
#cd /usr/local/nginx/sbin#./nginx
本地hexo配置
1.进入本地hexo目录,也就是blog\myblogs目录下,打开_config.yml
文件,对deploy
参数进行修改,如图所示
打码部分是你的阿里云公网IP
2.在本地计算机安装hexo-deployer-git
和hexo-server
插件
在myblogs文件夹下(之前先创建的blog,blog中有myblogs)右键启动GitBash,输入命令
$npm install hexo-deployer-git --save$npm install hexo-server
这两个插件的作用分别是Git自动部署和hexo本地简单服务器
3.配置本地git全局变量
$git config --global user.email "xxxxxxxxxx@(你的邮箱地址)"$git config --global user.name "pvulcan(git提交的用户名)"
4.写博客
可以参考hexo文档
$hexo new "新文章标题"——新建一篇文章$hexo generate——生成静态页面(在public文件夹里)$hexo clean——删除public文件夹$hexo deploy——部署
注意这些命令需要在hexo目录下使用才有效(建站的时候建立的blog\myblogs的myblogs目录下),可以通过git bash,也可以通过进入到myblogs后在路径上输如cmd,调用cmd执行命令
在建站的过程中参考了微信公众号:阿汤笔迹,在其文章的基础之上进行了一定的修改