本文章首發於:http://www.xtstarry.top/index.php/2018/07/24/在服務器-github上搭建hexo博客/
前言
Hexo 是一個快速、簡潔且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在幾秒內,即可利用靚麗的主題生成靜態網頁,更多介紹請訪問 Hexo官方網站。
本篇文章的目的是幫助新手快速建立自己的博客,併發布到github.io或自己的服務器上。
配置本地服務器
讓我們一步一步來。
配置本地環境
安裝node.js
鑑於絕大多數人本地環境使用的都是Windows,本文章所有本地環境安裝方式均爲Windows下的。
訪問node.js官方網站,下載推薦版以後安裝即可。
安裝git
訪問git官方網站,下載適合自己Windows的版本,安裝即可。當然如果你覺得官網下載速度過慢的話,也可以訪問這裏,這裏收錄了git國內下載的源。
安裝Hexo
git的終端(開始菜單中打開git/git bash),鍵入以下命令,等待片刻即可安裝完成。
$ npm install -g hexo-cli
若命令無法執行,則按照指示安裝需要的程序即可。
建立本地站點
建立本地文件夾
建立一個本地文件夾用於存放博客,我使用的是F:\blog
初始化本地文件夾
由於默認NPM鏡像速度太慢,我們可以先切換到淘寶的源:
npm config set registry "https://registry.npm.taobao.org"
切換是暫時的,下次如果還要安裝npm鏡像時,仍需執行這條命令。
接下來在終端內切換到你所指定的文件夾,輸入以下命令,完成初始化。
hexo init
npm install
完成後文件夾目錄如下:
.
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes
瀏覽本地博客
依次鍵入以下命令,我們就可以在http://localhost:4000/ 上查看我們博客的樣式。
hexo clean
hexo generate
hexo server
修改網站配置
參數設置
可以在 _config.yml
中修改大部份的配置。
參數 | 描述 |
---|---|
title |
網站標題 |
subtitle |
網站副標題 |
description |
網站描述 |
author |
您的名字 |
language |
網站使用的語言 |
更多詳細設置可以訪問 配置,Hexo有中文文檔,可以非常方便的閱讀。
注意:修改參數時所有的冒號都必須有空格!
更換主題
訪問https://hexo.io/themes/挑選一個你喜歡的主題。點擊圖片預覽,點擊主題名稱一般能跳轉到主題的github界面。
拿我現在使用的主題舉例,鏈接是https://github.com/EYHN/hexo-theme-one,一般主題頁面都會提供文檔,按照文檔克隆主題到對應目錄即可。
git clone https://github.com/作者/主題名稱 themes/存放主題的文件夾
注意:不少博客都需要安裝額外的插件,記得詳細閱讀文檔防止漏裝插件。
主題的設置在/themes/你下載的主題/_config.yml。不同的主題有着不同的配置文件。
部署博客到Github
得益於良心的 Github Pages,我們能夠使用Github Pages免費獲得一個自己的站點。當然如果你想要擁有自己的域名的話需要自己購買。
如果你沒有Github賬號的話,首先你需要一個Github賬號。註冊完成賬號後,我們按照官方文檔 Setting up Git ,添加一個名爲your_name.github.io 的Repository,注意名字必須是這個。
設置本地Git用戶名和郵箱
首先我們要設置自己的全局用戶名和郵箱。在Git終端中輸入下列命令,記得將用戶名和郵箱改成自己的。
git config --global user.name "YOUR NAME"
git config --global user.email "YOUR EMAIL ADDRESS"
注意這個用戶名和郵箱並不是只在博客使用。想了解更多,可以查看Git教程 - 廖雪峯的官方網站,Git非常有用,希望大家都能學習一個。
配置SSH密鑰
生成SSH密鑰
如果你使用過Git,已經有了密鑰,那我們可以直接使用。沒有的話我們需要生成一個新的。
在Git終端輸入以下命令,生成祕鑰。
ssh-keygen -t rsa -b 4096 -C "[email protected]"
祕鑰的設置我們默認就行,一路Enter直到完成。
添加SSH密鑰到ssh-agent
輸入以下命令,開啓ssh-agent並添加我們剛剛生成的密鑰。
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
添加SSH密鑰到GitHub
這裏可以參考GitHub的官方文檔Adding a new SSH key to your GitHub account 。
可以使用以下命令快捷複製RSA公鑰到剪貼板:
clip < ~/.ssh/id_rsa.pub
測試SSH連接
在正式操作之前,我們可以先測試下本機與GitHub之間的連接。輸入以下命令:
ssh -T [email protected]
若配置成功,則顯示
Hi username!You've successfully authenticated,but Gitub does not provide shell access
途中可能會受到密鑰指紋認證,同意就行。
部署Hexo博客
本地設置
配置完SSH密鑰,我們就可以將博客部署到 GitHub 上了。
在終端中運行如下命令,安裝 hexo-deployer-git 插件:
npm install hexo-deployer-git --save
修改_config.yml 中的deploy參數,一般都在文件的最後:
deploy:
type: git
repo: https://github.com/your_name/your_name.github.io.git
branch: master
將your_name換成自己GitHub的用戶名即可。
部署
在終端輸入以下命令:
hexo deploy
我們的博客就被部署到GitHub上了。
第一次部署還會要求你輸入GitHub的密碼,輸入即可。
上傳速度因爲地區不同網速可能也不同,有時候可能需要花費數分鐘才能傳完。
接着訪問https://github.com/your_name/your_name.github.io ,如果推送成功那麼我們在這個頁面就能看到文件目錄。
點擊標題下方菜單欄右側的Settings進入設置界面,向下拉到GitHub Pages,在Launch automatic page generator 點擊Continue to layouts ,再點擊Publish page 即可。
訪問your_name.github.io,就可以看到你的博客內容了。
博客剛被創建好,可能需要等一會才能訪問。當然時間不會太長,要是過了一個小時還是無法訪問,可能就是哪裏出問題了。
將博客部署到服務器
部署到服務器比GitHub要稍複雜些,但GitHub Pages因爲服務器在國外,無論是更新博客還是其他人訪問速度都有些差強人意,這時候一個國內的、高速穩定的服務器就成了一個不錯的選擇。但是需要注意的是,使用國內的服務器建博客也是要備案的。
服務器的選購
國內的服務器供應商有許多都是有學生特惠的,完成學生認證後可以買到10塊一個月、甚至更便宜的特價服務器。大家可以按照自己的需求選購。
服務器配置
購買好服務器後,我們就可以開始配置了。
安裝nginx
nginx是是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器,我們搭建博客,需要拿它做Web服務器。
如果之前沒有安裝過nginx,推薦使用LNMP一鍵安裝包,大家照着文檔安裝即可。
安裝node.js
這裏的安裝針對的是Ubuntu,如果大家服務器安裝的是CentOS或者其他系統,可以使用對應的命令。
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
apt-get install -y nodejs
如果出現安裝不上、找不到包等問題,可以升級下apt-get和curl。
sudo apt-get update
sudo apt install curl
創建Git賬戶
sudo adduser git
爲了安全起見,服務器上的Git操作我們一般都使用Git賬戶進行。
添加證書登錄
和GitHub一樣,我們需要向服務器添加RSA公鑰用於認證登錄。只不過這邊沒有圖形界面,需要我們手動添加。
將之前的公鑰保存在/home/git/.ssh/authorized_keys 文件中 ,沒有這個文件的話我們可以在那裏新建一個,輸入保存即可。
初始化Git庫
我們需要初始化一個Git庫用於在服務器保存我們的博客。新建一個.git文件夾,然後用命令初始化它,我使用的是/var/repo/blog,git
sudo mkdir /var/repo
cd /var/repo
sudo git init --bare blog.git
配置 Git Hooks
Git Hooks是配置在Git中的腳本,能被特定事件調用。
在 blog.git/hooks 目錄下新建一個 post-receive 文件
cd /var/repo/blog.git/hooks
在 post-receive 文件中寫入如下內容 ,文件不存在的話可以新建一個。
#!/bin/sh
git --work-tree=/home/www/hexo --git-dir=/var/repo/blog.git checkout -f
注意,/home/www/hexo是博客靜態頁面存放的地方。這個腳本的作用就是生成能夠被nginx使用的靜態頁面。當然你也能將靜態頁面放在其他地方,修改路徑就行。
設置post-receive文件的可執行權限:
chmod +x post-receive
返回到blog.git的上級目錄,將blog.git的擁有用戶改爲git
sudo chown -R git:git blog.git
禁用 git 用戶的 shell 登錄權限
出於安全考慮,我們要讓 git 用戶不能通過 shell 登錄。可以編輯 /etc/passwd 來實現 ,將passwd文件中的
git:x:1001:1001:,,,:/home/git:/bin/bash
改爲
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
,就是把bash改爲git-shell。
爲nginx設置網頁目錄
我們需要將之前Git Hooks生成的目錄設置給nginx。默認配置文件在/etc/nginx/sites-enabled下。
我們打開該目錄下的default文件,在server{}中添加
server {
listen 80 default_server;
listen [::]:80 default_server;
root /home/www/hexo;
server_name www.xxx.com;
}
注意,server位置填你的個人域名。要是還沒申請域名或者不打算申請域名,可以以後再填或者不填。
開啓服務器80端口
有一些服務器供應商是默認不開啓80端口的,需要我們手動開啓。
不同供應商的設置方法不同, 這裏以阿里雲舉例,進入控制檯,選擇雲服務器ECS,進入自己服務器的頁面,點擊 本實例安全組,選擇 安全組列表,點擊加入安全組,加入80端口即可。詳細設定可以訪問阿里雲官方幫助論壇 配置公網IP和外部出口
部署博客
配置本地_config.yml
和GitHub一樣,我們也需要配置deploy。
deploy:
type: git
repo: git@your_IP:/var/repo/blog.git
branch: master
your_IP替換成你服務器的地址就行。
將本地部署到服務器
-
清除緩存
hexo clean
-
生成靜態頁面:
hexo generate
-
將本地靜態頁面目錄部署到雲服務器
hexo deploy
至此,我們要做的工作已經全部做完,可以訪問自己的博客了。