概要
要素
实现流程
首先,需要在AWS上申请一台服务器(EC2),在服务器上搭建Git仓库,创建Hook(钩子)并配置将Git仓库里的内容部署到制定路径下。
然后,在服务器上安装**Nginx(HTTP和反向代理服务器),通过配置监听80端口**,将访问路径转发到指定目录下(Hook所部署配置的路径)。
接着,在本地用**node的npm(包管理工具)命令安装Hexo,并配置其发布方式(Git)及发布路径(AWS**)。
最后,在本地完成博客编写,通过hexo deploy命令部署到AWS上。
搭建
服务端
创建连接服务器
如果你是第一次使用AWS服务器,只需注册AWS账号,并绑定支持外币的信用卡,就可以获得最普通的服务器(单核,1G内存,8G容量)一年的免费使用权(AWS会冻结你信用卡里的1美元一个月,之后会自动解除冻结)。(怎么搞的自己像在做广告一样。。。)
我选择的是Ubuntu16.04的EC2,创建了一个Instance,在创建时你将会创建并获得一个**.pem私钥,只需用PuTTY将私钥.pem文件生成为.ppk文件之后,用SSH方式,通过服务器的公网IP(Public IP)和之前生成的.ppk私钥就可以连上自己的服务器了(用户名默认为ubuntu)**。
为了安全起见,你可以使用 sudo adduser 用户名
来创建一个新用户,这样的话,当你赋予此用户某些权限,他将可以用于Git上传部署等,就不需要使用权限更大的ubuntu或者root了。一会儿也会详细再说到。
创建用户
sudo adduser git
这样就会在 /home/
的目录下生成一个以git命名的文件夹。(创建过程中,会让你输入名称密码等,全部直接按回车即可。)
创建Git仓库
首先安装Git:
sudo apt-get update sudo apt-get install git
然后配置Git用户名和账号:
git config --global user.name "yourname" git config --global user.email "youremail"
再更新Git到最新稳定版:
sudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install git
完成之后可以通过 git --version
来查看Git当前安装的版本。
接下来就可以通过 git
命令来创建git仓库和钩子Hook了。
选择服务器的一个路径来作为git仓库Repository,存放通过git上传部署的发布内容,可以根据自己的喜好来建立repo,建完之后修改文件夹的读写权限(775的话,其他的用户是没有写的权限的):
cd /usr/local/ sudo mkdir hexo/repo/ chmod 775 -R /usr/local/hexo/repo/ cd /usr/local/hexo/repo sudo git init --bare blog.git
这样就生成了一个空的仓库,上传的文件就会存放在里面。
现在,我们需要在仓库中配置钩子Hook,其作用就是每一次在仓库接收到文件的时候,就会将文件部署更新到规定的路径下,这样我们就不回去访问或者修改repo中的文件了,而是访问部署的那个路径下的文件内容:
cd /usr/local/hexo/repo/blog.git/hooks vi post-receive
然后在这个文件中输入以下内容:
#!/bin/sh git --work-tree=/usr/local/hexo/bmjline --git-dir=/var/local/hexo/repo/blog.git checkout -f
其中 /usr/local/hexo/bmjline
是部署的路径,也就是正真的外部去访问的路径。
貌似这个路径下还没有建这个文件夹,现在我们就去建一个:
cd /usr/local/hexo/ sudo mkdir bmjline
安装Nginx
sudo apt-get install software-properties-common sudo add-apt-repository ppa:nginx/stable sudo apt-get update sudo apt-get install nginx
按照别人写的方式,这样就能安装最新稳定版的Nginx了。
接下来就是配置nginx的config文件了,在我自己配置的时候发现,Linux下的Nginx目录结构和**.conf**文件内容和Windows上的有些区别。
当我打开 /etc/nginx
目录下的nginx.conf文件时,里面并没有可以配置server的地方,后来研究了一下发现,配置server的地方在 /etc/nginx/sites-enabled
目录下的default文件。
于是我就修改了该文件的一些内容:
vi /etc/nginx/sites-enabled/default
将里面的server部分做如下修改:
server { listen 80 default_server; listen [::]:80 default_server; root /usr/local/hexo/bmjline; index index.html index.htm index.nginx-debian.html; server_name www.bmjline.com; }
解释一下这些内容, listen 80 default_server;
和 listen [::]:80 default_server;
就是让nginx监听服务器的80端口,当外部有请求时,nginx会将root目录,也就是 /usr/local/hexo/bmjline
返回,返回的内容(index)指定的是该目录下的 index.html 或者 index.htm 或者 index.nginx-debian.html 。最后,我的服务器的名称是www.bmjline.com。
修改用户权限
我想只让某个用户有操作blog的权限,这样做感觉会更加安全,那么我们就用到了之前创建好的git用户。
首先将之前为了blog所创建的文件夹和git仓库的拥有者做一下修改(目前因为是用sudo创建的,所以拥有者为root):
cd /usr/local/hexo/repo/ sudo chown -R git:git blog.git cd /usr/local/hexo/ sudo chown -R git:git repo sudo chown -R git:git bmjline cd /usr/local/ sudo chown -R git:git hexo
创建git这个用户的目的在于能够使用它来进行git和部署,但是我们不希望它能够像ubuntu那样通过SSH登录操作。那么我们组要进行以下修改:
vi /etc/passwd
我们找到git用户,一般会在最后一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
将其修改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
生成 & 验证keys
这一步可以放在搭建完本地环境后,发布之前进行操作。
在Windows下用cmd运行:
ssh-keygen
Windows会问你是否使用默认路径,直接回车即可。输入邮箱之后完成。当生成完key之后你可以按照cmd上显示的路径寻找到默认生成路径。一般默认路径为 C:\Users\用户名\.ssh\
打开复制目录下文件 id_rsa.pub
的内容。
来到服务器端:
cd /home/git/ sudo mkdir .ssh/ vi /home/bmj/.ssh/authorized_keys
将刚才复制的公钥黏贴进去。保存退出。
修改一下 .ssh
和 authorized_keys
文件的权限:
cd /home/git/ chmod 700 .ssh chmod 600 .ssh/authorized_keys
在Windows本地环境,打开cmd测试是否可以通过验证:
ssh -T git@www.bmjline.com
当没有报错,并且最后显示closed时,完成!
本地环境
安装Node.js
本地环境我用的操作系统是Windows
安装完成后,可以到安装路径根目录下输入:
node -v
当显示版本号时,说明安装成功,接下来就可以使用 npm
命令来安装其他的内容了。
安装Hexo
首先需要全局安装Hexo,直接cmd运行:
npm install -g hexo-cli
在自己的workspace目录里新建一个文件夹,我们的Hexo框架就安装在这个文件夹里。
来到这个文件夹的根目录下,运行:
hexo init
安装完成之后,还需要在根目录下安装两个插件,分别用来做git部署和起本地服务的:
npm install hexo-deployer-git --save npm install hexo-server --save
创建博客运行本地环境
创建自己的第一篇博客:
hexo new "My First Blog"
当语句执行成功,便会在 source/_post/
路径下生成 My-First-Blog.md
的文件,你可以打开它来编辑你的第一篇博客。
当需要起本地环境时,直接运行以下三条命令,便可以同时达到清缓存,编译,运行三个操作:
hexo clean hexo generator hexo server
打开浏览器访问 http://localhost:4000
Hexo配置
打开blog根目录下的 _config.yml
进行修改添加:
deploy: type: git repo: git@www.bmjline.com:/usr/local/hexo/repo/blog.git branch: master
里面有很多的配置可以根据自己的实际情况进行修改和添加,现在为了发布我们只修改上面这块内容。
应该很清楚能看明白,我们需要通过git将博客push到服务器的git仓库中,用户为git用户。
发布
在这之前别忘了生成公钥并验证哦!
到目前为止,服务端和本地环境都已经搭建完成,可以准备发布了。
本地环境博客根目录打开cmd运行:
hexo deploy
全绿就对了!
现在你可以通过服务器的公网IP地址访问看看,看到你的博客了吗?XD
总结
个人认为,这篇才能算得上是真正意义上的第一篇博客吧!XD
写完了这篇博客,也算是又回顾了一遍自己搭建博客的过程,也对Markdown有了一定的了解。原来写一篇博客会这么累,要这么久。。。XD
这里只是讲到了博客的搭建,还有更多定制化的内容,比如修改主题等。你大可以访问**Hexo的官网进行探索**。
你也可以购买自己的域名,像我这样,并用服务器的公网IP对域名进行解析,你就可以通过域名访问你的博客了!
搭建的过程我也是根据别人的博客一点点摸索才完成的,完成之后才慢慢理解一些工具的用途和意义,这也告诉了我,实践是多么重要,尤其是对于刚工作一年多的我来说,我很高兴自己能够写下第一篇不是很短的博客!
感谢你能够看到有这个网站,有这篇博客。如果发现文中有写的不正确的地方或者难以理解的地方都没关系。多多研究,完成它的方法会有很多!
谢谢你愿意看到最后。