Hexo自動部署到阿里雲(Ubantu16.04)【超詳細踩坑記錄】

前言

之前用Gitee的Pages對博客進行部署,怎麼用也不習慣,今天續費阿里雲服務器了,開造~

前期準備:

  • 本地hexo構建可運行發佈
  • 阿里雲服務器能訪問
  • 有一個域名(非必須項,可以公網ip查看嘛~)

服務器環境:

  • Ubantu16.04(我也想換centos,但我的數據庫也需要移植,qaq)
  • mysql5端口號3306 + myphpadmin (hexo是靜態頁面,用不到的啦;如果是WordPress就需要)
  • apache2端口號80 (之前的頁面)
    因爲我的服務器上正在跑着我的個人網站,要再加一個網站的話需要做反向代理,於是需要安裝nginx,避免80端口衝突,這裏先把apache80端口修改爲82,這樣nginx就可以作爲主頁面顯示。

修改Apache端口號

  1. 修改服務器Apache端口配置文件:

    cd /etc/apache2
    vi ports.conf
    

    在這裏插入圖片描述
    Listen 80改爲82
    在這裏插入圖片描述

  2. 在阿里雲控制檯添加安全組規則:添加82端口
    在這裏插入圖片描述

  3. 重啓Apache

    sudo /etc/init.d/apache2 restart
    

    在這裏插入圖片描述

思路

回顧一下Hexo發佈到gitee(Pages)的流程:

  • 本地計算機用Hexo構建靜態文件public
  • 關鍵一步就是git上傳github或gitee
  • 發佈Pages將倉庫目錄https://gitee.com/cungudafa/cungudafa/index.html拉取到https://cungudafa.gitee.io/index.html
    在這裏插入圖片描述
    當然我們需要上傳的是public文件夾;每次xftp手動上傳肯定是不現實且麻煩的,所以我們接下來要在服務器安裝git。

正文

1. 服務器創建git用戶

  1. 創建一個git用戶,用來運行git服務。(root不安全)

    sudo useradd git -m
    

    注意:Ubantu下必須加上-m,纔會自動新建用戶目錄/home/git/(後面配置和博客文件都放在這裏)
    在/home/git/非常重要,如果出錯,可以刪除sudo userdel -r git用戶,重新之前的步驟。

  2. 設置密碼

    sudo passwd git
    

    在這裏插入圖片描述
    密碼是git用戶的密碼,簡單爲上啦。

  3. 增加git用戶執行sudo的權限

    chmod 740 /etc/sudoers
    vim /etc/sudoers
    

    找到以下內容:root ALL=(ALL) ALL在下面添加一行

    git     ALL=(ALL)       ALL
    

    保存退出後改回權限:

    chmod 400 /etc/sudoers
    

2. 服務器打開RSA認證

RSA用公鑰加密,私鑰解密,成爲加密通信。
用私鑰加密,公鑰解密,就是認證。(這樣就能證明消息是你發出的。)
因爲:公鑰大家都有,私鑰就只有一個,在你自己手裏。
在這裏插入圖片描述

2.1 開啓認證配置

服務器端:

vim /etc/ssh/sshd_config

在這裏插入圖片描述
在sshd_config中開啓以下幾項:(前兩項yes,後一項修改爲如下)

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

重啓sshd

systemctl stop sshd.service
systemctl start sshd.service

在這裏插入圖片描述

2.2 建立ssh信任關係

本地電腦生成祕鑰對-》發送公鑰到服務器-》本地可免密連接服務器

  1. 在本地電腦: 生成密鑰對

    ssh-keygen -t rsa -C "郵箱" 
    

    在這裏插入圖片描述
    成功後,會在c盤用戶下新建祕鑰對:
    在這裏插入圖片描述

  2. 在服務器: 切換至git用戶,創建 ~/.ssh 文件夾

    su git
    mkdir ~/.ssh
    

    或者root用戶直接創建:

    cd /home/git/
    mkdir .ssh
    
  3. 在本地電腦: 發送公鑰 id_rsa.pub/home/git/.ssh/authorzied_keys

    ssh-copy-id -i C:/Users/CUNGU/.ssh/id_rsa.pub [email protected] //把公鑰發送給服務器
    ssh [email protected] // 測試能否登錄
    

    本地登錄效果:(authorzied_keys是一行一行添加的,顯示成功添加一行)
    通過ssh能夠直接登錄操作shell,當然後面要關掉git的這個shell權限的,不然小心異地登錄,危險危險。在這裏插入圖片描述
    服務器文件夾也有了公鑰:
    在這裏插入圖片描述

  4. 文件夾權限調整:authorzied_keys權限爲600時才生效
    git用戶:

    su git
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorzied_keys
    

    第二步沒有成功,說我沒有權限(Permission denied);emmm,root設置好了在這裏插入圖片描述
    root設置第二步:(注意在.ssh目錄下)

    exit // 退出到 root 登錄
    sudo chmod 600 authorized_keys
    

    在這裏插入圖片描述
    現在就搭建好git橋樑,爲後面實現hexo d部署時,可以自動上傳啦!

3.創建blog.git空倉庫

  1. 切換到git用戶,接下來都是在git用戶權限下進行操作:

    su git                //切換git用戶
    cd /home/git/
    mkdir -p projects/blog  //創建你的博客目錄
    mkdir repos && cd repos
    git init --bare blog.git  //創建一個空倉庫
    cd blog.git/hooks
    vi post-receive  //創建hook鉤子函數,輸入以下內容
    git --work-tree=/home/git/projects/blog --git-dir=/home/git/repos/blog.git checkout -f
    chmod +x post-receive  // 修改鉤子函數權限
    

    在這裏插入圖片描述

  2. 改變 hexo.git 目錄的擁有者爲git用戶:

    sudo chown -R git:git blog.git
    

    在這裏插入圖片描述

  3. 添加備份目錄

    cd /home/git/projects/
    mkdir -p tmp/blog
    

    修改鉤子的內容:(重點是git clone 克隆到主目錄home/git/projects/blog主目錄要配置到nginx中去的)

    #!/bin/bash
    GIT_REPO=/home/git/repos/blog.git    # git倉庫
    TMP_GIT_CLONE=/home/git/projects/tmp/blog
    PUBLIC_WWW=/home/git/projects/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用戶賦權:

    su git
    chmod +x post-receive
    exit // 退出到 root 登錄
    chown -R git:git /home/git/repos/blog.git // 添加權限
    sudo chown git:git -R /home/git/projects/
    

    在這裏插入圖片描述
    藍色爲更新後的上傳機制:
    在這裏插入圖片描述

  4. 爲了安全起見,我們需要關閉git賬號登錄shell的權限!!(一開始疏忽了 一個晚上服務器被異常登陸五次!!)建議這一步放在全文步驟配置好,最後最後來做

    vim /etc/passwd
    

    找到git賬號(一般在最後面)添加:/usr/bin/git-shell
    在這裏插入圖片描述
    加上git就只能git clone,如需shell操作,撤銷/usr/bin/git-shell即可。
    在這裏插入圖片描述

  5. 在本地任意一空目錄,測試git倉庫是否可用(測試步驟,稍後可清除)

    git clone [email protected]:/home/git/repos/blog.git
    

    實際拉下來的是你的/home/git/projects/blog,哈哈哈還是空的~在這裏插入圖片描述

4. hexo配置

修改博客根目錄配置_config.yml,部署部分,增添repo:(以git用戶的身份操作)

deploy:
  type: git
  message: update
  gitee: https://gitee.com/cungudafa/cungudafa.git
  repo: [email protected]:/home/git/repos/blog.git
  branch: master

接下來,在用hexo clean && hexo g -d時,就會自動上傳啦!
在這裏插入圖片描述

只有在ssh祕鑰配置成功,才能成功上傳。如果需要修改公鑰,要打開git操作shell的權限哦!vim /etc/passwd最後一句。及時開,及時關,做到萬無一失。

現在public生成的靜態文件已經完好推送到阿里雲服務器了!
現在需要Pages工作:即將靜態頁面顯示在網站上。

5. nginx配置

nginx顯示blog的index.html:
在這裏插入圖片描述
我直接使用sudo apt install nginx安裝是有問題的,看了n多教程之後,還是選擇了源碼安裝😣

  1. 下載源碼編譯工具
    參考1 | 參考2 | 參考3

    sudo apt-get update
    apt-get install gcc
    apt-get install libpcre3 libpcre3-dev
    apt-get install zlib1g zlib1g-dev zlib1g.dev
    apt-get install openssl openssl-dev
    sudo apt-get install openssl libssl-dev
    
  2. 下載安裝包,解壓到常用目錄:

    cd /usr/local/
    wget http://nginx.org/download/nginx-1.8.1.tar.gz
    tar -zxvf nginx-1.8.1.tar.gz
    #重命名
    mv nginx-1.8.1 nginx 
    cd nginx
    #開始配置
    ./configure --prefix=/usr/local/nginx --with-http_ssl_module
    # 編譯nginx:
    sudo make
    # 安裝nginx:
    sudo make install
    

    如果出錯,就是第一步沒有做好,缺編譯工具。

  3. 修改配置:

    vi /usr/local/nginx/conf/nginx.conf
    
    • 端口號(阿里雲控制檯安全組規則要打開端口哦)
    • 修改域名
    • 修改根目錄位置
    • 修改用戶爲root用戶
      在這裏插入圖片描述
      在這裏插入圖片描述
  4. 啓動nginx

    sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    

    報錯:缺少兩個文件:
    解決方法:參考
    在這裏插入圖片描述

    此時已經可以用域名cungudafa.top或者公網ip在瀏覽器查看到頁面咯:
    相比較apache,用另一個端口號即可見:cungudafa.top:82,雙頁面美滋滋~
    在這裏插入圖片描述
    hexo部署就到此結束了,看看操作流程,配置只配置一次,以後發佈就自動發佈了,再也不用點gitee的手動部署了。 👏在這裏插入圖片描述

6. Tips

(1) nginx常用的命令

建議記在小本本上哦!📃)

  • 啓動:/usr/local/nginx/sbin/nginx
  • 關閉:/usr/local/nginx/sbin/nginx -s stop
  • 重啓:/usr/local/nginx/sbin/nginx -s reload
  • 查看nginx的進程pid: cat /usr/local/nginx/logs/nginx.pid
  • 查看版本:/usr/local/nginx/sbin/nginx -V
  • 修改配置文件:vim /usr/local/nginx/conf/nginx.conf
  • 修改完後測試:/usr/local/nginx/sbin/nginx -t

參考於:nginx常用的命令
完整: 刪除apt install nginx

tips:爲 nginx 取別名,後面可直接用🧡

alias nginx='/usr/local/nginx/sbin/nginx'
  • 啓動:nginx
  • 關閉:nginx -s stop
  • 重啓:nginx -s reload
  • 查看nginx的進程pid: cat /usr/local/nginx/logs/nginx.pid
  • 查看版本:nginx -V
  • 修改配置文件:vim /usr/local/nginx/conf/nginx.conf
  • 修改完後測試:nginx -t

(2)雲網站

  1. 爲了響應國家網絡安全管理,備案名要加上哦!
    在這裏插入圖片描述
  2. hexo中涉及修改:
    • valine評論涉及leadcloud後臺添加域名;
      在這裏插入圖片描述
  3. 換行符轉義警告:
    git commit -a命令時,遇到LF will be replaced by CRLF in…提示的解決辦法
    git config --global core.autocrlf false
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章