文章目錄
前言
之前用Gitee的Pages對博客進行部署,怎麼用也不習慣,今天續費阿里雲服務器了,開造~
前期準備:
- 本地hexo構建可運行發佈
- 阿里雲服務器能訪問
- 有一個域名(非必須項,可以公網ip查看嘛~)
服務器環境:
- Ubantu16.04(我也想換centos,但我的數據庫也需要移植,qaq)
- mysql5
端口號3306
+ myphpadmin (hexo是靜態頁面,用不到的啦;如果是WordPress就需要) - apache2
端口號80
(之前的頁面)
因爲我的服務器上正在跑着我的個人網站,要再加一個網站的話需要做反向代理,於是需要安裝nginx,避免80端口衝突,這裏先把apache80端口修改爲82,這樣nginx就可以作爲主頁面顯示。
修改Apache端口號
-
修改服務器Apache端口配置文件:
cd /etc/apache2 vi ports.conf
將Listen 80改爲82
-
在阿里雲控制檯添加安全組規則:添加82端口
-
重啓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用戶
-
創建一個git用戶,用來運行git服務。(root不安全)
sudo useradd git -m
注意:Ubantu下必須加上-m,纔會自動新建用戶目錄/home/git/(後面配置和博客文件都放在這裏)
在/home/git/非常重要,如果出錯,可以刪除sudo userdel -r git
用戶,重新之前的步驟。 -
設置密碼
sudo passwd git
密碼是git用戶的密碼,簡單爲上啦。 -
增加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信任關係
本地電腦生成祕鑰對-》發送公鑰到服務器-》本地可免密連接服務器
-
在本地電腦: 生成密鑰對
ssh-keygen -t rsa -C "郵箱"
成功後,會在c盤用戶下新建祕鑰對:
-
在服務器: 切換至git用戶,創建 ~/.ssh 文件夾
su git mkdir ~/.ssh
或者root用戶直接創建:
cd /home/git/ mkdir .ssh
-
在本地電腦: 發送公鑰 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權限的,不然小心異地登錄,危險危險。
服務器文件夾也有了公鑰:
-
文件夾權限調整:
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空倉庫
-
切換到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 // 修改鉤子函數權限
-
改變 hexo.git 目錄的擁有者爲git用戶:
sudo chown -R git:git blog.git
-
添加備份目錄
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/
藍色爲更新後的上傳機制:
-
爲了安全起見,我們需要關閉git賬號登錄shell的權限!!(一開始疏忽了 一個晚上服務器被異常登陸五次!!)建議這一步放在全文步驟配置好,最後最後來做
vim /etc/passwd
找到git賬號(一般在最後面)添加:
/usr/bin/git-shell
加上git就只能git clone,如需shell操作,撤銷/usr/bin/git-shell
即可。
-
在本地任意一空目錄,測試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多教程之後,還是選擇了源碼安裝😣
-
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
-
下載安裝包,解壓到常用目錄:
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
如果出錯,就是第一步沒有做好,缺編譯工具。
-
修改配置:
vi /usr/local/nginx/conf/nginx.conf
- 端口號(阿里雲控制檯安全組規則要打開端口哦)
- 修改域名
- 修改根目錄位置
- 修改用戶爲root用戶
-
啓動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)雲網站
- 爲了響應國家網絡安全管理,備案名要加上哦!
- hexo中涉及修改:
- valine評論涉及leadcloud後臺添加域名;
- valine評論涉及leadcloud後臺添加域名;
- 換行符轉義警告:
git commit -a命令時,遇到LF will be replaced by CRLF in…提示的解決辦法git config --global core.autocrlf false