vps攜手hexo的博客搭建之旅

由於自己搞了個vps,也搭建了vpn,日常科學上網與看看視頻還是沒什麼壓力的。想着也不能白白浪費每個月500G的流量,於是想起自己現在的hexo博客。目前還沒有自己的私有域名與服務器,用的還是傳統的github.io通用域名。作爲it界的一員,既然有條件能變得更好就不應該不去做。於是花一天時間折騰出來的自己的專屬博客系統。

下面我會將自己搭建過程中遇到的問題與步驟羅列出來,希望能夠幫助有同樣需求的你。

前提條件

首先我的搭建是基於以下條件之上的

  1. 本地hexo博客已完成(github.io可以訪問)
  2. 有自己的vps
  3. 服務器系統Centos 6 x86_64
  4. 有自己的域名
  5. 域名已進行解析
這裏就不介紹hexo博客本地構建,想了解的推薦閱讀Hexo的安裝與配置

我們將要解決的主要問題是:

  1. SSH連接服務器
  2. 下載git與創建git服務器
  3. 下載nginx與配置nginx環境
  4. 本地hexo與服務器關聯

SSH連接服務器

SSH非常強大,在我日常工作中時刻相遇。相信你也是,可能你不曾注意到它而已。日常從服務器拉取與上傳代碼都是通過SSH進行通信的。雖然將生成的id_rsa.pub公鑰交給服務器後就再沒怎麼接觸過它,但並不能否認它的存在。

由於SSH可以幫助我們給服務器構建一個安全與穩定的通信,所以我這裏也使用SSH來連接服務器。

在連接服務器之前,你需知道自己服務器的IP地址,相信都能夠拿到。

# 以root用戶連接服務器
# 將12.12.12.12換成自己服務器IP
# 如果你已經有自己的域名且已經進行了解析,則可以直接使用域名代替
ssh [email protected]

相信這一步大部分人都會報下面一段錯

ssh: connect to host 12.12.12.12 port 22: Connection refused

這是由於你的ssh默認連接端口22與你的服務器端口不一致導致的。該問題有兩種解決方法,其一是改變ssh的默認端口;其二是指定連接端口。第一中不推薦,因爲我都堅持能不動默認的的就不出修改默認的。所以我們使用第二中方法,在上面的連接命令行後再加上端口

ssh [email protected] -p 端口

接下來剩下的就是輸入密碼了,這樣我們就連接上服務器了,現在可以在自己的電腦上遠程操作服務器了。

插曲

如果你客戶端上沒有ssh公鑰,可以根據Hexo的安裝與配置來進行配置。

找到公鑰,公鑰位置:~/.ssh/id_rsa.pub,後續會用到。

git服務器

連接上服務之後,首先查看是否安裝了git,沒有的使用yum進行按照即可

yum install git

裸庫

在開始搭建git服務器之前,我們需要將現有的倉庫導出爲裸倉庫。意思就是一個不包含當前工作目錄的倉庫。主要是使用git的--bare。在操作之前我們先回到客戶端,再執行如下命令:

git clone --bare my_project blog.git

my_project如果爲遠程倉庫就使用遠程倉庫的ssh鏈接, blog.git可以隨便命名但必須以.git結尾。

現在我們已經有了倉庫的裸庫了,接下來需要將客戶端的裸庫copy到服務器上,本質也是通過ssh進行通信。

假設你的服務器上已經有/opt/git/目錄,可以通過如下命令copy到服務器

scp -r blog.git user@Ip:/opt/git

user爲連接用戶,例如root。如果又遇到端口問題,替換成下面的命令

scp -P 端口 -r blog.git user@IP:/opt/git
注意大寫P

如果通過ssh連接的用戶對blog.git擁有可讀權限,那麼他就可以通過如下命令克隆你的倉庫

git clone user@IP:/opt/git/blog.git

當然如擁有可寫權限,他也可以進行推送。所以如果後續你發現操作不了倉庫時,很大可能是該用戶沒有讀或寫權限

爲了防止這一點,我們接下來創建git用戶

git用戶與認證

回到服務器,對用戶進行認證。用戶認證使用authorized_keys進行,首先,創建一個操作系統用戶git,併爲它建立.ssh目錄。

sudo adduser git
su git
cd
mkdir .ssh && chomd 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

爲了防止權限問題,終極解決方法,可以將git添加到sudo用戶組

# 切換到root用戶
su root
sudo vi /etc/sudoers

打開文件,使用:/root進行搜索,在root下添加git用戶

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
git     ALL=(ALL)       ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

回到認證,我們爲系統用戶git的authorized_keys文件添加操作用戶的ssh公鑰,就是上面我們客戶端生成的公鑰。假設你已經將id_rsa.pub保存到臨時文件/tmp/id_rsa.pub中。執行如下命令,將公鑰加入到authorized_keys文件的末尾

cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

設置完之後,返回客戶端,執行如下命令,測試是否可以連接上服務器

ssh -v git@IP -p 端口

通過git服務器、用戶認證與操作權限,我們就可以實現對倉庫的人員添加與倉庫分支等的操作權限限制。該功能就也市面上的代碼託管平臺類似。感興趣的可以去研究。

現在我們已經完成一大半了,剩下的就是服務器指向域名與代碼上傳服務器。

Nginx配置

nginx相信或多或少都有一點接觸吧,主要是服務端與前端。最近學習了前端,所以自己對nginx也不是那麼陌生。我們公司前端主要是用nginx來進行本地代理,方便本地測試。

話不多說,現在進行nginx配置

安裝

如果你使用下面命令就安裝成功,那麼你是幸運的

yum install nginx

如果一切順利,請跳過安裝這部分,如果提示沒有找到nginx,請接下看。

由於我是使用Centos 6,nginx位於第三方的yum源中,而nginx不在Centos 6官方yum中,解決方法安裝epel(Extra Packages for Enterprise Linux)

yum install epel-release

然後再查看是否在源列表中,這非常重要,因爲它可能不在源列表中。

yum repolist

clipboard.png

只有顯示了epel,接下來你執行nginx的安裝命令纔不會失敗。

yum install nginx

如果不存在,你執行上述命令nginx還是找不到。如果沒有意思到這一點,就是無頭緒爲什麼一直報nginx找不到。如果不在,我們接着走。

打開文件epel.repo,將其中的enable=0改爲enable=1

vi /etc/yum.repos.d/epel.repo

clipboard.png

然後執行下面命令查看epel是否存在

yum repolist 2>&1 | grep epel
epel          Extra Packages for Enterprise Linux 6 - x86_64              12,517

如果展示了epel,代表已經存在。這時你再執行安裝nginx的命令就可以成功了。

安裝完之後,我們再將其啓動

service nginx start
# 設置開機啓動
chkconfig nginx on

進行到這裏,你可以將服務器的ip複製到瀏覽器,如果你看到nginx的welcome界面,說明nginx已經安裝成功。

配置

接下來我們要配置nginx,讓其指向我們的blog地址。打開nginx的配置文件

vi /etc/nginx/conf.d/default.conf

安裝如下說明替換自己的信息

#
# The default server
#
 
server {
    listen       80;
    # listen       [::]:80 default_server;
    server_name  rousetime.com; # 替換成自己的域名
    root         /usr/share/nginx/html/blog; # 博客所在目錄
 
    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;
 
    location / {
        root /usr/share/nginx/html/blog; # 博客所在目錄
        index index.html index.htm;
    }
 
    error_page 404 /404.html;
        location = /40x.html {
        root /usr/share/nginx/html/blog; # 博客所在目錄
    }
 
    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        root /usr/share/nginx/html/blog; # 博客所在目錄
    }
 
}

/usr/share/nginx/html/blog是我服務器上存放博客的目錄,你可以改成自己的目錄。這樣nginx就配置完成。

本地與服務器同步

現在就剩最後一步了,將本地hexo文件上傳到服務器,同時每次通過git更新代碼後都會同步到服務器。

之前我們已經建立了git服務器與git裸庫,爲了之後的上傳代碼關聯操作,我們藉助git的服務鉤子post-receive。它可以在倉庫收到push代碼後,進行一些相關操作,例如通知與更新等。

我們在blog.git/hooks中新建post-receive文件 (這裏我已將blog.git轉移到git用戶下/home/git)

su git
vi ~/blog.git/hooks/post-receive

向其中添加如下代碼,指明git的工作樹路徑與倉庫路徑

#! /bin/sh
git --work-tree=/usr/share/nginx/html/blog --git-dir=/home/git/blog.git checkout -f

保存後退出,再給其賦予可執行權限

chmod +x ~/blog.git/hooks/post-receive

hexo代碼同步

返回客戶端,打開hexo的_config.xml文件,找到deploy,在之前的設置後面再添加我們的服務器倉庫地址

deploy:
- type: git
  repository: xxx # 之前的github倉庫地址
  branch: master
- type: git
  # repository: [email protected]:/~/blog.git # 默認端口生效使用
  # repository: ssh://[email protected]:端口/~/blog.git # 默認端口不生效使用,設置端口
  branch: master
現在可以將hexo相關配置中的github.io域名都換成你自己的

最後我們再提交一遍hexo代碼

hexo clean
hexo g
heox d

操作完之後,你會發現git將代碼push到之前的github倉庫與我們的搭建的服務器倉庫。

部署完畢,我們就可以在瀏覽器中輸入域名進行訪問。例如:這是我的blog地址歡迎訪問。

這就是我折騰了一天搭建的過程,希望對你有所幫助。如有任何問題可以隨時@我。

資料

SSH連接服務器
服務器上的 Git
hexo部署
EPEL
EPEL未激活解決方案
Shadowsocks Python版一鍵安裝腳本

clipboard.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章