前言

作为一名合格的程序员,搭建个人博客对于程序员来讲必不可少。为什么?一是因为互联网的知识需要我们不断学习,如果我们我们经常能够进行总结记录,时不时回头复习一下,效果会好很多;

二是因为作为程序员经常会遇到各种各样的 bug,如果我们将犯的错误记录下来,下次再次遇到同样的问题时,就不用再反复再网上寻找答案了,能为我们节省出很多时间。

因此,搭建个人博客有以下几点好处:

  • 提升知识掌握的深度,印象深刻;
  • 锻炼自己能够把问题“讲清楚”的能力;
  • 培养开源意识,与他人分享知识。

这里呢,Hexo怎么搭建,我就不说了,相信大家都有搭建hexo的能力。

服务端准备工作

域名注册

登陆 https://wanwang.aliyun.com/ 挑选一个自己喜欢的域名,具体操作如下:

1、进入网站主页后,点击“域名注册”:

2、然后在万网进行域名搜索和购买。

3、初始化自己的服务器

4、备案,在阿里云的控制台界面,具体备案步骤呢,也就不多说了,往后有机会出一篇备案的攻略。

5、阿里云的服务器默认不开放端口号,这样使得我们在网站部署完成之后仍然无法访问。因此我们需要新建安全组并添加 80 端口,再将安全组添加到 ECS 实例中。具体操作如下。在控制台的 ECS 实例中点击安全组,然后新建安全组。

在访问规则为 入方向 的标签下添加 80 端口。

最后回到 ECS 服务器实例,将刚刚配置的安全组加入到实例中。

安装 nginx

我们使用 nginx 作为 web 服务器,这里可以将 nginx 理解为安装在服务器上的一个软件。

还有可以直接使用yum等来安装,不是非得必要用我这个办法。

安装 nginx 依赖环境,安装期间有提示一律选 yes。推荐直接复制每行命令,避免出错。

yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

下载 nginx 安装包。

wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

将安装包解压到 /usr/local 目录下。

tar -xvf nginx-1.10.1.tar.gz -C /usr/local

进入 /usr/local 目录,确认 nginx 解压到该目录下。

cd /usr/local

进入 nginx-1.10.1 目录,会发现该目录下有一个 configure 文件,执行该配置文件。

cd nginx-1.10.1/
ls
./configure

编译并安装 nginx

make
make install

查找nginx安装目录

whereis nginx

进入安装目录

cd /usr/local/nginx
ls

由于 nginx 默认通过 80 端口访问,而 Linux 默认情况下不会开发该端口号,因此需要开放 linux 的 80 端口供外部访问。

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

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

cd sbin
./nginx

没有任何消息,代表启动成功。此时输入公网 IP 即可进入 nginx 的欢迎页面了。

进入 /usr/local/nginx/conf 目录,并对 nginx.conf 配置文件进行相关配置。

cd /usr/local/nginx/conf
ls
vim nginx.conf

打开后按 i 键由命令模式切换到编辑模式,修改三处地方:

首先将最顶端的用户改为 root;

其次将 server_name 改为自己的域名,如果没有备案,可以先填写自己的公网 IP(在控制台 ECS 实例中查看),访问时暂时用公网 IP 进行访问。最后将 root 项中的值改为你自己博客的根目录

修改结束之后,先按 Esc 由编辑模式切换到命令模式,再输入 :wq 命令保存并退出编辑器。

配置git

为 hexo 创建一个部署目录 /home/hexo

mkdir -p /home/hexo

进入 /usr/local/nginx/conf 目录,并对 nginx.conf 配置文件进行相关配置。

cd /usr/local/nginx/conf
ls
vim nginx.conf

打开后按 i 键由命令模式切换到编辑模式,修改三处地方:

首先将最顶端的用户改为 root;

其次将 server_name 改为自己的域名,如果没有备案,可以先填写自己的公网 IP(在控制台 ECS 实例中查看),访问时暂时用公网 IP 进行访问。

最后将 root 项中的值改为 /home/hexo;,如果 server 中的端口号不是 80,则改为 80

修改结束之后,先按 Esc 由编辑模式切换到命令模式,再输入 :wq 命令保存并退出编辑器。

安装 node.js

返回用户根目录,进行安装 node.js。

cd ~
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs

通过查看版本号验证是否安装成功。

node -v
npm -v

创建 Git 用户

为了使我们能够在本地向服务器实现自动部署,需要在服务器端另外新建一个 Git 用户,然后使用公钥连接成功之后,就可以方便地随时进行自动部署了。

复制粘贴以下命令安装 Git,有提示选择 yes 即可。

yum install git

安装结束之后,查看版本号判断是否安装成功。

git --version

创建 Git 用户

adduser git

修改 Git 用户权限为 740

chmod 740 /etc/sudoers

在配置文件中增加 Git 用户。首先打开文件:

vim /etc/sudoers

找到root ALL=(ALL) ALL,在他下面,添加上git ALL=(ALL) ALL

将 Git 用户的权限改回去。

chmod 400 /etc/sudoers

设置 Git 用户密码

sudo passwd git

以上我们就完成了 Git 用户的创建,接下来我们向 Git 用户添加公钥,就像配置 Github 那样。

向 Git 用户配置 ssh 公钥

在服务器端 切换到 git 用户,在根目录下创建 .ssh文件夹。

su git
cd ~
mkdir .ssh

这时,命令行信息中的 # 变成了 $,且 root 变成了 git,表示我们切换成功。

注意哦,然后在本地计算机桌面右键打开 GitBash Here,在本地生成公钥/私钥对。

cd ~
cd .ssh
ssh-keygen

如果有询问直接回车即可。结束之后,会在 C:\Users\你的本地用户名\.ssh 里生成两个文件:id_rsaid_rsa.pub.ssh 为隐藏文件夹,你可能需要显示隐藏文件夹之后才可以看到。

本地 终端输入以下命令,为私钥设置权限。
PS:终端用不了的话,用git bash

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

将这两个文件,复制进服务器里,然后将id_rsa.pub复制一份到/home/git/.ssh

cp id_rsa.pub authorized_keys

修改文件权限
PS:应该git用户无法修改,输入su返回超级用户

chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

确保设置了正确的SELinux上下文。

restorecon -Rv ~/.ssh

现在我们来测试一下是否设置成功。在本地任意位置右键打开 GitBash Here,输入公网 IP:

ssh -v git@xxx.xxx.xxx.xxx(你的公网 IP)

如果最后提示Welcome to Alibaba Cloud Elastic Compute Service !,我们就是成功了

在服务端配置 Git 仓库

cd ~
git init --bare hexo.git
vi ~/hexo.git/hooks/post-receive

进入后按 i 键由命令模式切换到编辑模式。输入以下命令后保存:

git --work-tree=/home/hexo --git-dir=/home/git/hexo.git checkout -f

授予钩子文件可执行权限。

chmod +x ~/hexo.git/hooks/post-receive
cd ~
sudo chmod -R 777 /home/hexo

重启 ECS 实例。reboot

至此,我们就完成了服务端的配置

本地Hexo配置

安装两个插件

修改 _config.yml 文件

deploy 参数改成如下方式,注意填写自己的公网 IP 哦。

除此之外,URL 项改为自己的域名,没有备案的化可以先填写公网 IP。

然后我们就可以进行发布啦

hexo clean
hexo generate
hexo deploy
或
hexo cl
hexo g
hexo d
或
hexo cl && hexo g && hexo d

发布三件套命令,哪个都行

这时,在浏览器中输入自己的公网 IP,你就可以看到自己的博客了。

还有一件事,就是域名是需要解析的,具体步骤请参考这篇攻略

参考文章