Hexo建站使用Git部署到VPS
在去年,心血來潮去買了個阿里雲的伺服器,幾番折騰下,用WordPress第一次搭建了自己的博客網站,然後過了幾天因為網站備案的問題太麻煩懶得弄,加上用國外的伺服器還可以用來上上油管、谷歌什麼的,就買了個搬瓦工的VPS,把自己的博客重新在搬瓦工上面建立起來,然後博客就處於荒廢狀態至今。 今日又有了寫博客記錄的念頭,就開始寫了起來,但是WordPress上用MarkDown十分不方便,找了很多插件,想了很多辦法也沒能完美解決寫作和發布的問題,再加上資料庫老是出錯...乾脆就用Hexo了,反正個人網站又小,也沒什麼人看。然後就開始谷歌搜索用Hexo建博客,搜出來的大多數都是Hexo+Github Pages,跟著教程和Hexo文檔一步一步沒花多少時間就弄好了,直接用MarkDown寫,幾個命令就能部署完畢,可以說是十分的方便了。 但是,自己有個VPS只用來跑ss感覺太浪費,GitHub上放著網站的文件也始終覺得不舒服,還是放在自己的伺服器上比較好。所以又開始折騰著把博客搬到自己的VPS上。在VPS部署時還因為許可權問題一直403...弄了很久才弄好...菜是原罪... 本文主要記錄在Windows端安裝Hexo,使用Hexo搭建博客並實現Git自動部署到VPS(Ubuntu)。
本地安裝Hexo建站
Hexo是一個快速、簡潔且高效的博客框架。Hexo使用Markdown(或其他渲染引擎)解析文章,在幾秒內,即可利用靚麗的主題生成靜態網頁。
安裝前的準備
- Git下載對應的系統版本的Git安裝好,使用
git --version
查看Git版本,若顯示版本信息則說明安裝成功。
安裝好後,進行一些初始化的操作,打開Git Bash設置用戶名和郵箱:
git config --global user.name "用戶名"git config --global user.email "郵箱地址"
設置SSH Key,Git Bash內執行:ssh-keygen -t rsa -C "郵箱地址"
根據提示輸入密碼等完成設置。查看公開密鑰:cat ~/.ssh/id_rsa.pub
複製顯示的內容,待會有用。
- Node.js下載對應的系統版本的Node.js安裝好,使用
node --version
查看Node.js版本,若顯示版本信息則說明安裝成功。
使用npm安裝Hexo
執行:npm install -g hexo-cli
建站
安裝完畢後,在適當的位置新建一個文件夾(以hexo為例),並在文件夾內打開終端執行:
hexo init npm install
執行完後,文件夾目錄結構如圖所示:
至此,本地Hexo博客搭建完成。
Git Hooks自動部署
部署前的準備
- VPS國內的有阿里雲、騰訊雲等;國外的有Vultr、搬瓦工等。
- 域名可以上萬網、GoDaddy等購買。購買後,將域名解析到VPS的IP地址。
部署原理
通過在本地編輯文本,然後使用Git遠程部署到VPS的Git倉庫。hexo d
命令實際上只deploy了本地的public文件夾,Git Hooks實際上就是當Git倉庫收到最新的push時,將Git倉庫接受到的內容複製到VPS上的網站目錄內。相當於完成了手動將public文件夾複製到VPS的網站根目錄里。
VPS操作
安裝配置Git
- 安裝Git通過SSH連接VPS,執行:
apt-get install git
,完成後通過git --version
查看Git版本,若顯示版本信息則說明安裝成功。
- 創建git用戶執行:
adduser git
,根據提示設置密碼。 - 賦予git用戶sudo許可權執行:
chmod 740 /etc/sudoersvim /etc/sudoers找到以下內容: # User privilege specificationroot ALL=(ALL:ALL) ALL在root ALL=(ALL:ALL) ALL這一行下面添加git ALL=(ALL:ALL) ALL
保存退出後,修改迴文件許可權chmod 440 /etc/sudoers
- 關閉git用戶shell許可權執行:vim /etc/passwd將最後一行的
git:x:1001:1001:,,,:/home/git:/bin/bash
修改為:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
- 初始化git倉庫切換到git用戶su git然後:
cd /home/git //切換到git用戶目錄mkdir blog.git //創建git倉庫文件夾,以blog.git為例cd blog.git //進入倉庫目錄git init --bare //使用--bare參數初始化為裸倉庫,這樣創建的倉庫不包含工作區
- 創建網站目錄
cd /var/www/ //切換目錄mkdir blog //創建網站目錄,以blog為例
- 配置SSH
cd /home/git //切換到git用戶目錄mkdir .ssh //創建.ssh目錄cd .sshvim authorized_keys然後將本地的公鑰複製到authorized_keys文件里(公鑰即上文中本地執行cat ~/.ssh/id_rsa.pub查看的內容)
- 用戶組管理執行:
ll /home/git/
和ll /var/www/
確保blog.git、.ssh、blog目錄的用戶組許可權為git:git
若不是,執行下列命令後再查看:
sudo chown git:git -R /var/www/blog
sudo chown git:git -R /home/git/blog.git
安裝配置nginx
- 安裝nginx執行:apt-get install nginx,若輸入nginx -V可以看到nginx版本信息,則安裝成功。
- 配置nginx執行:
cd /etc/nginx/sites-available //切換目錄cp default default.bak //備份默認配置vim default //修改配置
參靠我的本人配置文件內容:
server { listen 80 default; //默認監聽80埠 root /var/www/blog; //網站根目錄 server_name leihungjyu.com www.leihungjyu.com; //網址 access_log /var/log/nginx/blog_access.log; error_log /var/log/nginx/blog_error.log; error_page 404 = /404.html; ? location ~* ^.+.(ico|gif|jpg|jpeg|png)$ { root /var/www/blog; access_log off; expires 1d; } ? location ~* ^.+.(css|js|txt|xml|swf|wav)$ { root /var/www/blog; access_log off; expires 10m; } ? location / { root /var/www/blog; if (-f $request_filename) { rewrite ^/(.*)$ /$1 break; } } ? location /nginx_status { stub_status on; access_log off; } }
配置Git Hooks
- 創建post-receive文件git用戶下執行:
cd /home/git/blog.git/hooks //切換到hooks目錄下vim post-receive //創建文件
#!/bin/bash GIT_REPO=/home/git/blog.git TMP_GIT_CLONE=/tmp/blog PUBLIC_WWW=/var/www/blog 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
賦予可執行許可權。
本地操作
- 嘗試連接在本地打開Git Bash:ssh git@VPS的ip
如圖所示則連接成功,若默認埠不是22,則需要在後面加上-p 埠號,或者在.ssh文件夾下創建一個config文件,內容如下:
Host 伺服器IPHostName 伺服器IPUser gitPort 埠號IdentityFile ~/.ssh/id_rsa
- 配置Hexo打開本地博客根目錄下的_config.yml文件,找到最後的deploy配置,修改為:
# Deployment ## Docs: Deployment deploy: type: git repo: git@VPS的IP:blog.git branch: master
到此,Hexo建站就全部配置部署完畢了。
第一篇文章
新建文章:hexo n "文章名"
或者hexo new "文章名"
,然後使用Markdown編輯文章內容。
生成:hexo g
或者hexo generate
部署:hexo d
或者hexo deploy
生成部署執行完後,訪問自己的網址就可以看到文章了。
其他有用的命令:
hexo clean //清理緩存hexo s //本地預覽hexo server //本地預覽
一般來說,寫文章時一般先使用hexo s
打開本地預覽,一邊寫一邊預覽修改,完成之後再通過hexo g -d
生成上傳。
更多文章:
Leihungjyu的個人博客推薦閱讀:
※心靈的品級 - 液色迷人的日誌 - 網易博客
※搭建一個自有域名的 WordPress 有哪些要注意的?
※怎樣評價不老歌?
※手把手教你建github技術博客by hexo