使用hexo并部署到aws上
看csdn上的一些大牛都在写自己的博客,自己也想试试,在同事的推荐下使用了 一开始使用了Hexo,把github作为自己的静态博客的存放地址,然后和同事一起申请了域名,购买了aws的云服务,从那以后就使用了一段时间的WordPress。但是讲道理,WordPress对MarkDown的支持是在是太烂了,这个周末两个,重新使用Hexo,并使用git进行静态文件的提交。实现自动化的web更新。
写作环境
我使用Hexo的环境是windows,mac的操作也差不多。在完成自己的目标之前也google了一些其他人的blog(在相应的操作前面,我会把参考的blog贴出来)。在这里我不得不吐槽一下google和baidu的差别了。讲道理,要查一些资料还是用google的好。
首先是获取Hexo 官方文档 ,通过官方文档上的说明进行前期工作,从nodejs官网下nodejs,nodejs官网 。我的git是通过安装visual studio 2015时,让vs的安装器帮我安装的。因此也为后面的创建自己的公私钥时,造成了一定的麻烦。因此还是从git官网直接下载和安装git官网。当这些前期环境准备好之后。在cmd控制台中通过
npm install -g hexo-cli
进行Hexo的安装。等待Hexo客户端的安装完成。完成之后,我的博客内容是放在D盘下的 ,通过cmd控制台切换到d盘,然后依次输入如下命令:
hexo init blog
cd blog
npm install
通过这些命令之后,进入blog目录可以看到如下文件:
在该文件路径下使用cmd控制台输入hexo server
,然后打开浏览器输入http://localhost:4000。可以看到如下界面:
这个界面是使用默认的landscape主题,接下来的时间是选择一款自己喜欢的主题,我选择的是Next主题。主题官网 .我选择这个主题的原因是这个主题比较简洁。
通过官方文档的说明进行一步一步进行操作。就能很快搭建成我这样子的blog界面了。
在配置中的坑
一些坑
- 点击分类页显示/Get/categories问题
- 点击标签页显示/Get/tags问题
- 点击关于页显示/Get/about 问题
这三个的结局办法都是类似的,在cmd控制台中使用hexo new page xxx
其中xxx分别为categories、tags、about。在source文件下会出现如下的文件夹:
在这三个文件夹中分别有一个index.md文件,把分别进行如下设置:
tags:
title: about
date: 2016-09-04 01:24:56
type: "about"
comments: false
categories:
title: categories
date: 2016-09-04 01:17:32
type: "categories"
comments: false
about:
title: about
date: 2016-09-04 01:24:56
type: "about"
comments: false
使用comments:false
的原因是我使用了多说评论,在这些页面中不需要使用多说评论
上云
在网上搜Hexo的教程都是使用github作为静态页面的展示平台,但我们为了追(zhuang)求(bi),准备使用云主机作为自己的展示平台。
购买域名
提供域名购买的服务器商非常多,
有很多提供类似的域名购买服务的提供商,随便选择一家进行购买就行了。
云选择
国内有很多的云服务提供商,BAT一个都不会错过。但我不得不说的是阿里云的云主机实在是太贵了。我选择的是亚马逊的云主机,现在AWS的云主机可以免费使用一年。但申请AWS的云主机需要信用卡验证。没有信用卡的朋友可以去某宝上搜AWS基本就能看见aws认证卡之类的东西,8块钱就能享用一年的云服务。在整个过程中比较麻烦的是输入验证码阶段。不知,是为什么提供手机号,第一次验证都无法通过,第二次要看脸了,如果可以的话还是提供座机号码进行电话验证。
一切就绪后就可以登录aws云主机了。AWS默认使用私钥的登录模式。通过命令ssh -i xxx ec2-user@xxx
第一个xxx是使用AWS给的私钥文件,第二个xxx为AWS为你分配的公网IP。在linux和mac上需要使用chmod 600 xxx
进行修改权限。
搭建服务器环境
在云上使用Hexo有两种方式。第一种是使用hexo server ,然后用nginx进行反向代理4000端口,还一种是使用 git上传在本地生成的静态文件。在这里我是使用第二种方式。
在登上AWS的虚拟机之后 ,首先要做的是更新软件环境sudo yum upgrade
,当一切更新完成后,使用sudo yum install nginx
下载并安装nginx。为了追求更好的展(zhuang)现(bi),我打算让自己的网站使用https,我的证书是通过亚数信息的mpki系统申请的TrustAsia证书,这个证书可以免费使用一年。等待证书发下来后。把证书上传到自己的云主机上。在nginx的conf.d文件夹下新建一个nginx的配置文件。用于配置自己的hexo静态页面访问服务。
在使用nginx服务之前我们要先把自己的Hexo生成的静态文件上传到云上。在这里我是参考ZhangFinder’s Blog进行配置的。
本地生成SSH密钥
看c盘用户文档下是否有.ssh文件夹。如果没有则需要使用cmd控制台到用户目录下使用
mkdir .ssh
进行创建。在.ssh 文件上右击,选择Git Bash here 打开bash终端。
输入
ssh-keygen -t rsa -C "xxx"
,xxx自己命名,然后一路回车就把公钥和私钥创建完成了。配置git(依旧在刚才的git bash中):
git config --global user.email "email@examole.com" git config --global user.name "username"
配置hexo的 deploy
在自己的hexo中重新配置一下:
deploy: type: git meaage: update repo: git@www.hsulei.com:/home/git/blog.git branch: master
服务器配置
使用
sudo adduser git
进行用户添加。切换到git账户下,并进行一些git用户操作。
cd ~ mkdir .ssh && cd .ssh touch authorized_keys vi authorized_keys
创建authortized_keys文件的目的是存放刚才生成的公钥。
把刚才生成的公钥文件中的内容复制到authorized_keys文件中(公钥文件是以.pub为结尾的文件)。当这步完成后,我们可以在自己的客户端进行
ssh git@www.hsulei.com
进行链接测试,能链接上去就没有问题。不能链接的话。重新仔细操作一遍。接下来创建直接的静态文件存放位置。
cd /var/www sudo mkdir hexo
创建git仓库。
cd ~ mkdir blog.git && cd blog.git git init --bare
创建git hooks。
cd ~/blog.git/hooks touch post-receive vi post-receive
配置脚本。
#!/bin/bash -l GIT_REPO=/home/git/blog.git TMP_GIT_CLONE=/tmp/blog PUBLIC_WWW=/var/www/hexo rm -rf ${TMP_GIT_CLONE} git clone $GIT_REPO $TMP_GIT_CLONE rm -rf ${PUBLIC_WWW}/* cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
修改权限。
chmod +x post-receive sudo chmod 775 -R /var/www/hexo
进行nginx的配置。
cd /etc/nginx/conf.d sudo vi hsulei.com.conf
编辑hsulei.com.conf。
server {
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 60m;
ssl_session_tickets on;
ssl_stapling on;
ssl_stapling_verify on;
server_tokens off;
proxy_hide_header X-Powered_By;
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
add_header Strict-Transport-Security "max-age=31536000";
add_header X-Frame-Options deny;
add_header X-Content-Type-Options nosniff;
listen 443 ;
server_name www.hsulei.com hsulei.com;
root /var/www/hexo;
access_log /var/log/nginx/blog_access.log;
error_log /var/log/nginx/blog_error.log;
ssl on;
ssl_certificate /etc/nginx/_.hsulei.com/_.hsulei.com.pem;
ssl_certificate_key /etc/nginx/_.hsulei.com/_.hsulei.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:DES-CBC3-SHA;
ssl_prefer_server_ciphers on;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /var/www/hexo;
access_log off;
expires 1d;
}
location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
root /var/www/hexo;
access_log off;
expires 10m;
}
location / {
root /var/www/hexo;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}
}
server {
listen 80;
server_name www.hsulei.com hsulei.com;
location / {
rewrite ^(.*) https://$host$1 permanent;
}
很多的ssh配置我是按照jerryqu的 博客进行配置的。jerryqu的博客
启动nginx。
sudo service nignx start
剩下的事情就是在本地使用
hexo g
和hexo d
进行发布了。