Travis CI Jekyll Docker 自動(dòng)化部署博客到云服務(wù)器

本篇文章講解了如何利用云Travis CI Jekyll Docker 自動(dòng)化部署博客到云服務(wù)器滓玖,從而解決Github pages百度爬蟲禁用的問題。

本文章不包含Github pages 如何配置墙贱,相信Google上有類似的文章就不說明了

本人博客原文:https://elfgzp.cn/2018/10/02/travis-jekyll-docker.html

Jekyll Docker 容器構(gòu)建

在開始Jekyll容器構(gòu)建之前檐盟,先說一下我用的是一款叫HardCandy-Jekyll的主題梯投,作者是xukimseven塞绿。

這款主題非常簡潔清新枕赵,而且對(duì)移動(dòng)端也有適配,在這里也感謝這位作者開源這個(gè)主題位隶。

在依照作者提供的部署說明在自己的倉庫部署好該主題后拷窜,在倉庫下先新建一個(gè)Dockerfile文件用于容器構(gòu)建,Dockerfile文件內(nèi)容如下涧黄。


FROM ruby:latest

RUN gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

RUN gem install jekyll bundler

COPY . /blog/

RUN bundle config mirror.https://rubygems.org https://gems.ruby-china.com

RUN cd blog \

        && bundler install

WORKDIR /blog

CMD bundle exec jekyll serve --host 0.0.0.0

文件內(nèi)容主要是使用ruby容器為基礎(chǔ)篮昧,用gem命令安裝jekyllbundler,由于國內(nèi)使用國外的gem源比較慢笋妥,所以我將源替換為gems.ruby-china.com懊昨。

Centos 安裝Docker CE

在安裝前確保linux內(nèi)核版本是3.10以上并且是64位的centos版本。如果不能滿足這個(gè)前提春宣,建議看官的教程酵颁。

  1. 升級(jí)yum

sudo yum update

  1. 安裝Docker CE

sudo yum -y install docker

在安裝完docker后,還需要配置免sudo使用docker命令月帝,步驟如下:


sudo groupadd docker

sudo gpasswd -a gzp docker # gzp為我的用戶名

sudo service docker restart

newgrp - docker

運(yùn)行完后重新打開ssh會(huì)話躏惋。

使用Dockerfile構(gòu)建容器并運(yùn)行Jekyll

  1. 使用Dockerfile構(gòu)建容器

docker build -t elfgzp.github.io . # elfgzp.github.io為我的容器名稱

運(yùn)行結(jié)果如下:


Sending build context to Docker daemon  203.5MB

Step 1/8 : FROM ruby:latest

---> eb8759981348

Step 2/8 : RUN gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/

---> Using cache

---> 9825055ad6ed

Step 3/8 : RUN gem install jekyll bundler

---> Using cache

---> 1f6bad52f4e4

Step 4/8 : COPY . /blog/

---> e252fdb8d16a

Step 5/8 : RUN bundle config mirror.https://rubygems.org https://gems.ruby-china.com

---> Running in aeb0a7c21689

Removing intermediate container aeb0a7c21689

---> 2a3944c701f0

Step 6/8 : RUN cd blog          && bundler install

---> Running in 494cbc520804

Fetching gem metadata from https://gems.ruby-china.com/...........

Fetching public_suffix 3.0.2

Installing public_suffix 3.0.2

Using addressable 2.5.2

Using bundler 1.16.5

Using colorator 1.1.0

Using concurrent-ruby 1.0.5

Using eventmachine 1.2.7

Using http_parser.rb 0.6.0

Using em-websocket 0.5.1

Fetching ffi 1.9.23

Installing ffi 1.9.23 with native extensions

Using forwardable-extended 2.6.0

Using i18n 0.9.5

Using rb-fsevent 0.10.3

Using rb-inotify 0.9.10

Using sass-listen 4.0.0

Fetching sass 3.5.6

Installing sass 3.5.6

Using jekyll-sass-converter 1.5.2

Using ruby_dep 1.5.0

Using listen 3.1.5

Using jekyll-watch 2.0.0

Fetching kramdown 1.16.2

Installing kramdown 1.16.2

Using liquid 4.0.0

Using mercenary 0.3.6

Using pathutil 0.16.1

Fetching rouge 3.1.1

Installing rouge 3.1.1

Using safe_yaml 1.0.4

Fetching jekyll 3.8.1

Installing jekyll 3.8.1

Fetching jekyll-feed 0.9.3

Installing jekyll-feed 0.9.3

Fetching jekyll-seo-tag 2.4.0

Installing jekyll-seo-tag 2.4.0

Fetching minima 2.5.0

Installing minima 2.5.0

Bundle complete! 4 Gemfile dependencies, 29 gems now installed.

Bundled gems are installed into `/usr/local/bundle`

Removing intermediate container 494cbc520804

---> c5cadba1e55e

Step 7/8 : WORKDIR /blog

---> Running in ccff546be8e0

Removing intermediate container ccff546be8e0

---> 70d0f72ed6b1

Step 8/8 : CMD bundle exec jekyll serve --host 0.0.0.0

---> Running in ae3fd7719de5

Removing intermediate container ae3fd7719de5

---> e9973d4dac75

Successfully built e9973d4dac75

Successfully tagged elfgzp.github.io:latest

  1. 構(gòu)建成功后測試Jekyll是否能夠運(yùn)行

docker run -d -p 4000:4000 elfgzp.github.io

運(yùn)行后使用docker ps查看容器是否成功運(yùn)行,或者使用curl http://127.0.0.1:4000訪問4000端口嚷辅。

使用docker-compose來運(yùn)行容器

由于我們要實(shí)現(xiàn)自動(dòng)化構(gòu)建和運(yùn)行容器簿姨,這里使用了docker-compose

Centos 安裝 docker-compose


sudo yum -y install epel-release

sudo yum -y install python-pip

pip install docker-compose

編寫docker-compose.yml

docker-compose.yml的內(nèi)容非常簡單,內(nèi)容如下:


version: '3'

services:

  blog:

    build:

      context: .

      dockerfile: Dockerfile

    image: elfgzp.github.io:latest # 這里是我鏡像的名字

    network_mode: host

使用docker-compose構(gòu)建并運(yùn)行容器

這里將更新代碼的git pull命令也加進(jìn)去了簸搞,運(yùn)行代碼如下:


git pull origin master && \

docker-compose build && \

docker-compose down && \

docker-compose up -d

運(yùn)行后會(huì)從git倉庫拉取最新的代碼扁位,并根據(jù)Dockerfile進(jìn)行容器構(gòu)建,并且重啟容器趁俊。

到這里我們已經(jīng)可以直接使用上面的命令拉取最新的代碼域仇,并且能夠構(gòu)建運(yùn)行新的容器,我們只剩下一個(gè)自動(dòng)觸發(fā)這個(gè)命令的工具寺擂,這里就需要用到Travis暇务,接下來我會(huì)講解Travis如何使用。

Travis 配置和使用

首先我們需要注冊一個(gè)Travis賬號(hào)沽讹,并且關(guān)聯(lián)Github般卑。

  1. 在創(chuàng)建好賬號(hào)并關(guān)聯(lián)Github后,需要添加你的Github pages倉庫爽雄。
WX20181003-002426@2x.png
  1. 在添加好后進(jìn)入倉庫的設(shè)置蝠检,點(diǎn)擊倉庫右邊的more action,并選擇settings挚瘟。
WX20181003-002806@2x.png
  1. 然后需要從Github獲取一個(gè)DEPLOY_TOKEN叹谁,步驟如下:

  2. 進(jìn)入Github設(shè)置頁面饲梭,點(diǎn)擊Developer Settings

    WX20181003-003201@2x.png
  3. 然后在點(diǎn)擊Personal access tokens,在點(diǎn)擊右上角的Generate new token

WX20181003-003247@2x.png
  1. 輸入生成的token名稱焰檩,然后勾選admin:public_key, admin:repo_hook, repo

    WX20181003-003327@2x.png
  2. 最后將成的DEPLOY_TOKEN填入TravisEnvironment Variables

    WX20181003-021647@2x.png
  3. 最后我們還需要配置Travis遠(yuǎn)程登陸我們云服務(wù)器的ssh key

  4. 首先需要在本地生成id_ras_deployid_ras_deploy.pub

    
    ssh-keygen -t rsa -C "deploy_key" -f ~/.ssh/id_ras_deploy
    
    
  5. 然后將生成的id_ras_deploy.pub復(fù)制到云服務(wù)器中

    
    ssh-copy-id -i ~/.ssh/id_ras_deploy.pub  gzp@cloud.elfgzp.cn # 我的服務(wù)器域名
    
    
  6. 在倉庫中創(chuàng)建ssh_config文件憔涉,內(nèi)容如下

    
    Host cloud.elfgzp.cn
    
        HostName cloud.elfgzp.cn
    
        StrictHostKeyChecking no
    
        User gzp
    
        IdentityFile ~/.ssh/id_ras_deploy
    
    
  7. 最后在安裝好Travis,運(yùn)行命令

    
    gem install travis
    
    travis login --auto  # 注意這里登陸會(huì)要求輸入Github賬號(hào)密碼析苫,賬號(hào)是郵箱不是用戶名
    
    touch .travis.yml
    
    travis encrypt-file ~/.ssh/id_ras_deploy --add
    
    
  8. 會(huì)在生成的.travis.yml中看到

    
    before_install:
    
    - openssl aes-256-cbc -K $encrypted_f91baf41390f_key -iv $encrypted_f91baf41390f_iv
    
      -in id_ras_deploy.enc -out ~/.ssh/id_ras_deploy -d
    
    

    注意~/.ssh有可能為~\/.ssh需要去掉\

  9. 我們還需要在after_success中加入成功之后訪問云服務(wù)器執(zhí)行響應(yīng)的操作更新容器并運(yùn)行

    
    after_success:
    
    - ssh gzp@cloud.elfgzp.cn "cd ~/workspace/elfgzp.github.io && source ~/.zshrc  && git pull origin master
    
      && docker-compose build && docker-compose down && docker-compose up -d"
    
    

    注意這里我使用的是zsh所以配置是~/.zshrc兜叨,如果使用的是默認(rèn)的bash,請使用~/.bashrc

    最后的.travis文件格式如下:

    
    language: ruby
    
    rvm:
    
    - 2.3.3
    
    addons:
    
      ssh_known_hosts: cloud.elfgzp.cn
    
    before_install:
    
    - openssl aes-256-cbc -K $encrypted_f91baf41390f_key -iv $encrypted_f91baf41390f_iv
    
      -in id_ras_deploy.enc -out ~/.ssh/id_ras_deploy -d
    
    - chmod 600 ~/.ssh/id_ras_deploy
    
    - cp ssh_config ~/.ssh/config
    
    script:
    
    - bundle install
    
    - bundle exec jekyll build
    
    after_success:
    
    - ssh gzp@cloud.elfgzp.cn "cd ~/workspace/elfgzp.github.io && source ~/.zshrc  && git pull origin master
    
      && docker-compose build && docker-compose down && docker-compose up -d"
    
    branches:
    
      only:
    
      - master
    
    env:
    
      global:
    
      - NOKOGIRI_USE_SYSTEM_LIBRARIES=true
    
    

    大功告成衩侥,最后我們只需要把代碼提交到master分支国旷,然后到Travis中查看代碼的build結(jié)果,如果成功則最后的結(jié)果應(yīng)該與運(yùn)行docker-compose的結(jié)果相同茫死。

總結(jié)

在網(wǎng)上其實(shí)還有很多通過coding pagesgithub pages同步的方式來解決百度爬蟲被禁用的問題跪但,之所以我會(huì)選擇這種方式,因?yàn)檫@種方式能學(xué)到更多使用的技術(shù)知識(shí)峦萎。

希望看完本文章由收獲的別忘了給我留言哦屡久。

參考文章

centos安裝docker,docker-compose
基于Docker搭建Jekyll并實(shí)現(xiàn)自動(dòng)部署
Jekyll + Travis CI 自動(dòng)化部署博客
Travis-ci遠(yuǎn)程部署到服務(wù)器
使用travis自動(dòng)部署hexo日志

https://elfgzp.cn/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市爱榔,隨后出現(xiàn)的幾起案子被环,更是在濱河造成了極大的恐慌,老刑警劉巖搓蚪,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤售,死亡現(xiàn)場離奇詭異,居然都是意外死亡妒潭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門揣钦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雳灾,“玉大人,你說我怎么就攤上這事冯凹』涯叮” “怎么了?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵宇姚,是天一觀的道長缀壤。 經(jīng)常有香客問我仪际,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任赴叹,我火速辦了婚禮,結(jié)果婚禮上萍诱,老公的妹妹穿的比我還像新娘。我一直安慰自己鸽扁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布镶骗。 她就那樣靜靜地躺著桶现,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鼎姊。 梳的紋絲不亂的頭發(fā)上骡和,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音相寇,去河邊找鬼即横。 笑死,一個(gè)胖子當(dāng)著我的面吹牛裆赵,可吹牛的內(nèi)容都是我干的东囚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼战授,長吁一口氣:“原來是場噩夢啊……” “哼页藻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起植兰,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬榮一對(duì)情侶失蹤份帐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后楣导,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體废境,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年筒繁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了噩凹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毡咏,死狀恐怖驮宴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呕缭,我是刑警寧澤堵泽,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站恢总,受9級(jí)特大地震影響迎罗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜片仿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一纹安、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦钻蔑、人聲如沸啥刻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽可帽。三九已至,卻和暖如春窗怒,著一層夾襖步出監(jiān)牢的瞬間映跟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來泰國打工扬虚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留努隙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓辜昵,卻偏偏與公主長得像荸镊,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堪置,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容