疫情在家,突然看到了阿里云推出了大学生在家实践计划(是心动的感觉)。刚好看到别人分享的如何用阿里云建立了个人博客。所以实践了以下,这里做个教程给自己来个不时之需。
整个建立过程涉及到 hexo,nginx,node.js,Linux ,ssh ,git 等操作。下面开始长文警告!!!!
介绍
Hexo
它是 node.js 制作的一个博客工具。它能够完成生成静态页面加上传的功能。点击 hexo 官网,你可以看到更多介绍和信息 。
Hexo 只需要在本地安装即可,不需要在服务器上面安装。我们只需在本地编写 Markdown 文章。通过 hexo 命令即可让 Hexo 会帮我们生成静态的 Html 页面,通过将该 Html 文件上传到我们的服务器,我们就能通过 公网 IP + 端口 访问了。
阿里云服务器
这里为什么使用阿里云服务器呢?因为方便,速度快。我们知道 github 也可以部署,但是 github 毕竟外国的,访问很慢,而且百度不会索引到哪里。
阿里云还提供了公网 ip ,省去了如果你个人搭建服务器要跟运营商沟通。并且设置域名和备案都有快速连接,很方便。
实现原理
首先,在自己电脑安装 Hexo 环境,我们编写 Markdown 文件,放到 Hexo 环境下的 source 文件夹下的 _posts 下,通过 hexo g
命令将 Markdown 文件渲染成静态 Html 文件。而后通过 hexo d
命令将静态页面推送到我们服务器的 git 仓库。
在服务器中,通过钩子(git-hooks)将静态文件 checkout 到网站的根目录下。之后我们只要通过公网 ip 或者 域名访问,经过指定端口到达 nginx 服务,最后显示网页。(这里不用写端口号可以不写,因为 http 默认的端口号为 80)。这样就实现了我们博客搭建了。
我把原理画成一张图,如下:
接下来就是激动人心的安装教程了。
第一步:本地计算机安装 hexo 环境
安装 Node.js
首先,hexo 是 node.js 的一个工具,所以点击 node.js 官网,就可以进行下载,例如:
我的电脑是 windows 10 版本,我们选中 LTS 本版,也就是长期支持版本,然后安装提示逐步安装,安装路径可以根据自己需求更改。然后我们在终端验证是否安装成功。
打开运行( win + R ),输入 cmd,之后在终端输入:
node -v
npm -v
结果如下:(我这里可能下载从前版本和你现在看到的不同)
安装 hexo
接下来我们就可以通过 node.js 来安装 hexo 了。在终端输入下面指令
npm install -g hexo-cli
接下来等待一会,等他安装完成。然后我们在终端输入
hexo -v
就会打印如下结果(可能你现在下的版本不同显示不同,但大同小异就行),那么恭喜 hexo 安装完成了。
安装 git
git 是一个版本控制工具,也是我们用来同步博客的重要工具。如果 国内直接从官网下载比较困难,需要 FQ。这里建议到淘宝 Git for Windows 镜像下载 git 安装包。
下载选择 windows 版本。下载完成点击安装,只要按照提示安装即可。(这里的安装路径可以按需选择)安装成功会在右键快捷菜单显示 Git GUI Here 和 Git Bash Here 两个选项。
生成 hexo 的根文件夹
接下来新建一个用来给 hexo 生成博客的文件夹。
-
建立一个空文件夹,名字任意(我的为 myblog),这里的文件夹随意哈,最好不带中文。
-
在这个文件夹空白处,我们右键,点击 Git Bash Here(表示在这里启动 Git Bash 窗口)。
-
我们初始化这个文件夹的博客,让 hexo 自动生成需要文件。在 Git 终端窗口输入下面指令
-
hexo init npm install
-
-
等待生成完成,我们就可以启动这个博客了,输入下面指令
-
hexo server
-
这里只要按 CTRL + C 就能停止 hexo
-
-
在浏览器我们在地址栏输入 localhost:4000,就可以看到 hexo 为我们生成的初始博客了。
恭喜,到这里我们完成本地 hexo 的安装完成了。接下来我们开始转战服务器端。
这里你打开 myblog/source/_posts/ ,就能看到 helloworld.md ,这个就是 hexo 为我们生成的第一篇博客。
第二步:阿里云服务器的购买和使用
购买
这里我是通过阿里云活动送的。但是为了教程完整,在这里简单的讲一下如何购买
阿里云服务器很多,阿里云主机,ECS 服务器等,我们购买 ECS 服务器就可以。(这里什么是 ECS ,阿里云官方简称弹性计算服务,何为弹性计算服务?可以理解为,在双十一,我们对服务器访问量很大,就需要服务器很多资源,而平时并不需要,这个时候弹性计算可以根据需求来为我们分配资源。)。
点击 阿里云官网 ,我们选择 云服务 ECS 点击就行
进入页面,我们立即购买就行。然后我这里选择的是一键购买,也就建博客,不需要很大,我就选了实例 1 核 1 G ,预装 CentOs 7.3 ,40 G 云盘和 1 M 贷款。感觉入门够了。
其实这里像自己选电脑一样。可以按照自己需求选择响应的配置,等购买完成,我们就拥有一台装了 CentOS 的电脑了,在阿里云上也叫做实例。接下来域名注册和备案的做法,可以选座。
域名注册和备案
购买
我们通常访问网站,都是通过域名访问的。原始的访问方式是通过公网 IP + 端口访问,但是 ip 地址不好记。而域名对于用户比较容易记录,比如百度 www.baidu.com 这个域名就让人一下子联想到百度,所以域名的名字该怎么叫,也是有技术含量和战略眼光的哈。
通常阿里云都是有提供备案通道的,需要的自己去选择就行。为什么备案呢?因为使用中国大陆境内服务器托管你的网站时,你必须对你的网站进行备案申请。当你使用阿里云中国大陆境内节点的服务器时,你可以直接在阿里云备案管理系统中提交 ICP 备案申请。
ICP 备案通过后,工信部会给一个备案号,我们需要在网站底部标明。网站在工信部备案成功后,还需要在网站开通之日起 30 日内登录全国公安机关互联网站安全管理服务平台提交公安联网备案申请。
域名绑定
待 ECS 服务器备案审核通过,我们可以打开阿里云控制台,找到域名,就可以看到我们已经购买的域名列表,然后再操作那一栏我们选择解析。
在阿里云后台对域名解析进行设置,将域名的记录值修改为 ECS 实例的公网 IP。进而完成域名与 ECS 服务器实例的公网 IP 进行绑定。
云服务器的设置
重置实例密码
点击 阿里云官网 ,在网站顶部右侧我们会看到 “控制台选项”,我们点击进入。在下面选项中,我们选择 “阿里云 ECS”
进入后,点击左侧的"实例",就可以看到我们购买的服务器了。
进入后我们可以看到以下页面,首先需要重置密码,新买的 ECS 服务器实例对 root 用户是没有设置初始密码的。ECS 服务器密码需要重置才可以用。
如图标注的 1 ,我们点击即可重置密码,重置后得重启服务器才能生效。
本地连接服务器
我这里没有通过阿里云自带的连接。我使用的是 FinalShell 软件连接,除了能运行 Linux 命令,还能像 windows 文件资源管理器一样管理文件。这里也可以用阿里云的 VNC 连接。在这里介绍的是通过 FinalShell 连接。
整个界面如下图所示,我们点击左上角的文件夹标志,
在如下图中标红的位置,选择 SSH 连接,
输入名称,这里名称可以自定义,主机就是 公网 IP,端口默认,然后下面验证方式是密码,用户是 root,密码也就是刚才你重置的那个密码,连接。成功后,我们就能看到下面的提示。
在连接成功后,我们还看到关于 FinalShell 其他的功能,有类似 Windows 资源管理器的目录,有 CPU,内存,存储的情况,就留给你自己探索了。
后面的操作,我们就是要利用这个 FinalShell 终端在 ECS 上部署网站运行环境了。
配置安全组
因为我们服务器是在阿里买的,阿里云帮我们管理着服务器,如果我们想访问我们服务器呢,访问实例中的程序,就需要通过端口访问。而阿里云默认不会放这些端口。就需要在阿里云的安全组中设置一些规则,在规则中让端口放行。
具体操作有下面几个步骤:
- 打开“阿里云控制台”
- 点击左侧菜单中“网络与安全”中的”安全组“
- 创建一个安全组,这里安全组的名称可以自己定义,然后网络可以选择 vpc-xxx 什么的。
- 在入方向上解除端口和 ip 限制,为新建的安全组,添加安全组规则,手动添加可以如下图:
之后呢,我们要为这个安全组添加一个实例,我们选择如下图的标注的管理实例,选择我们的服务器添加就行。这样配置之后,阿里云就能放行了。
第三步:在阿里云部署博客环境
这个过程,要区分是服务器端还是本地计算机,在服务器上要区分是 root 用户还是 git 用户操作。要是步骤跟错了就混乱了。(下面的所有命令前面第一个字符比如 # 或者 $,代表的是 root 用户还是普通用户,这里不要可爱到直接把 # 或者 $ 字符复制粘贴过去)
安装 nginx
因为我们使用的 nginx 作为 Web 服务器,需要先安装 nginx 服务,具体步骤如下:(注意,我这里是 root 用户)
-
安装 nginx 环境,期间的提示我们选择 yes 或者 y
-
# 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 目录,确认已经解压到该目录下
-
# cd /usr/local # ls
-
-
进入 nginx-1.10.1 目录,会发现下面有一个 configure 文件,执行它
-
# cd nginx-1.10.1/ # ls # ./configure
-
-
然后我们直接就输入命令编译和安装 nginx
-
# make # make install
-
-
进入安装目录
-
# cd /usr/local/nginx
-
-
在默认情况下,Linux 是不会开放 80 端口,而我们 nginx 默认端口为 80。我们可以通过命令开放该端口。
-
# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
-
-
进入 /usr/local/nginx/sbin 目录,启动 nginx
-
# cd sbin # ./nginx
-
至此,我们的 nginx 服务的初步环境搭建完成,启动 nginx 如果没有打印其他消息的话,代表启动成功了。这时,可以通过 “公网 IP + 端口”(http://xx.xx.xx.xx:80) ,这里 80 可以不写,http 协议默认 80 端口,下面就是访问 nginx 的欢迎页面。
这里可以使用 ./nginx -s stop
命令停止服务
配置 nginx 服务器路由
-
为 hexo 建立一个部署目录
-
# mkdir -p /home/www/hexo
-
-
配置 nginx.conf 文件
-
# cd /usr/local/nginx/conf # vim nginx.conf
-
进入后,我们按 i 建即可进入 编辑模式,按 esc 键可以退回到命令模式,在命令模式下,输入
:wq
保存并退出,输入:q
不保存退出。- 我们把 nginx 服务的部署根目录改为 /home/www/hexo
- 将域名 server_name 修改为你买的域名,没有域名就填入自己服务器的公网 ip,后面有了域名可以自行修改。
- 查看端口号 listen 是否为 80 ,不用修改。
- 之后按 esc 键进入命令模式,输入
:wq
保存并退出。结果如下图:
-
安装 node.js
-
返回根目录
-
# cd ~
-
-
安装 node .js
-
# curl -sl https://rpm.nodesource.com/setup_10.x | bash - # yum install -y node.js
-
-
查看安装是否成功
-
# node -v # npm
-
只要能正常打印版本号就成功了
-
安装 Git 和创建 git 用户
-
安装的选择都选 yes 获取 y
-
# yum install git
-
-
查看是否安装成功,打印版本号
-
# git --version
-
只要能正常打印版本号就成功了
-
-
实现自动部署以及我们使用公钥来免密登录服务器。所以这里最好登录用户不要是 root 免密登录。我们要建立一个新用户 “git”。
-
# adduser git
-
-
修改 “git” 用户权限
-
# chmod 740 /etc/sudoers
-
-
打开文件修改
-
# vim /etc/sudoers
-
进入后,我们按 i 建即可进入 编辑模式,按 esc 键可以退回到命令模式,在命令模式下,输入
:wq
保存并退出,输入:q
不保存退出。- 找到 root ALL=(ALL) ALL,在下面添加一行 git ALL=(ALL) ALL。
- 保存退出即可。结果如下图:
-
-
改回权限。
-
# chmod 400 /etc/sudoers
-
-
设置 git 用户的密码
-
# sudo passwd git
-
设置密码时,Linux 是看不见你输入的数字的,不要以为你的键盘坏了,只要按下你要设置的密码,回车即可。后面我们就可以用 “git” 用户远程登录阿里云服务器了。
-
给 git 用户配置免密登录
什么是免密登录?它的原理是,在本地计算机生成一个公钥文件和一个私钥文件,然后通过 FTP 工具把这个公钥文件上传到阿里云服务器,然后把公钥的内容追加到 authorized_keys 文件中。这样本地计算机就可以通过 ssh 方式免密登录我们阿里云服务器了。
步骤如下:
-
在服务器端将切换到 “git” 用户,然后在~目录(当前用户的家目录)下创建 .ssh 文件夹,用来存放公钥
-
# su git $ cd ~ $ mkdir .ssh
-
-
在本地计算机,注意,本地计算机,本地计算机。在桌面右键打开 GitBash ,在本地生成公钥/私钥对。
-
$ ssh-keygen
-
接下来,问就回车。然后它会提示我们,在本地计算机的用户根目录下,C:\Users\15153\ 下生成一个隐藏文件夹 .ssh (这里 15153 是你本地计算机登录的用户名,你和我的会不一样)。并且创建两个文件。一个为私钥(id_rsa),一个为公钥(id_rsa.pub)
-
-
修改本地计算机上私钥的设置权限。
-
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/id_rsa
-
-
使用 FTP 工具 FileZilla,
-
这里需要先下载,百度搜即可。
-
打开 FileZilla,使用 git 用户通过 22 号端口远程连接阿里云服务器,将客户端生成的公钥,对它点击右键就有上传按钮,上传到服务器的 home/git/.ssh 目录下。
-
上传之后,我们回到阿里云服务器的终端,以 git 用户的身份进入 .ssh 目录
-
$ cd ~/.ssh
-
-
新建一个 authorized_keys 文件,并将id_rsa.pub文件中公钥的内容拷贝到该文件中。
-
$ cp id_rsa.pub authorized_keys $ cat id_ras.pub >> ~/.ssh/authorized_keys
-
-
设置文件权限
-
$ chmod 600 ~/.ssh/authorized_keys $ chmod 700 ~/.ssh
-
-
确保设置了正确的 SELinux 上下文
-
$ restorecon -Rv ~/.ssh
-
-
到这里,使用 ssh 远程登录将不会提示你输入密码。接下来我们在本地计算机通过 ssh 方式连接我们云服务器。
在本地计算机的 git bash 中,我们输入 ssh -v git@xxx.xxx.xxx.xxx(公网IP)
或者 ssh git@xxx.xxx.xxx.xxx(公网IP)
就能登录成功。如下图结果:
配置 Git 仓库
-
服务器上使用"git"用户创建一个 Git 仓库,该仓库中新建一个 post-receive 钩子文件。
-
$ cd ~ $ git init --bare hexo.git
-
-
打开文件
-
$ vi ~/hexo.git/hooks/post-receive
-
-
打开文件后按 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
回车,保存即可。
-
-
授予钩子文件可执行权限。
-
$ chmod +x ~/hexo.git/hooks/post-receive $ cd ~ $ sudo chmod -R 777 /home/www/hexo
-
至此。我们完成了服务器的配置了。
第四步:本地计算机 Hexo 配置
hexo 配置
-
在本地计算机 hexo 的工程目录下,找到 _config.yml,对 deploy 参数进行修改,如下图所示。
-
在本地计算机安装插件: hexo-deployer-git 和 hexo-server。在 myblog 文件夹下右键打开 GitBash(这里文件夹是你初始化 hexo 博客目录的文件夹),输入以下命令:
-
$ git config --global user.email "xxxxxxxxxx@qq.com" $ git config --global user.name "15153"
-
-
使用 Hexo 生成、发布个人博客,输入下面三个命令:
-
$ hexo clean $ hexo g $ hexo d
-
此时,便可以通过浏览器访问 http://xxx.xxx.xxx.xxx:80/ 进入 hexo 我的博客主页了。
总结
至此所有步骤做完,撒花,撒火,撒花。剩下的如何让 hexo 美观,可以参考 hexo 官网,官网提供了很多的主题,比如 NexT 等等,留给你自己探索了。
参考文档
阿汤笔记
zzq 的博客