使用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 protected]" 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 [email protected]
進行鏈接測試,能鏈接上去就沒有問題。不能鏈接的話。重新仔細操作一遍。接下來創建直接的靜態文件存放位置。
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
進行發佈了。