一区二区三区欧美日韩-一区二区三区欧美-一区二区三区免费在线视频-一区二区三区免费在线观看-久久精品店-久久精品第一页

歡迎您光臨深圳塔燈網絡科技有限公司!
電話圖標 余先生:13699882642

網站百科

為您解碼網站建設的點點滴滴

博客的遷移及自動化部署并全站https化

發表日期:2017-02 文章編輯:小燈 瀏覽次數:2436

過完年來想把博客做一個遷移,放到自己購買的服務器上,并實現?自動化部署,并啟用全站HTTPS

hexo本地部署

這一步驟網上有很多教程,這里不再多說了

服務器自動化部署

大體的流程就是,我們通過hexo g命令在本地生成靜態文件以后,通過git push到我們的遠程倉庫(這里我用的是GitHub),然后由于我們事先在項目庫中配置了webhooks,由它post到你的服務器一個請求鏈接,我們的服務器收到請求后,對應執行我們提前寫好的腳本,再將push的內容同步到我們的服務器,從而更新了服務器的內容。

服務器環境配置

我們通過ssh(windows用戶可以通過putty登錄)登錄到我們的服務,我這里用的是Ubuntu系統,安裝好nodejs,git,nginx后,將我們的文件從遠程倉庫拉下來

mkdir blog cd blog git init git remote add origin https://github.com/yuxingxin/yuxingxin.github.io.git git pull origin master 
  1. 配置nginx
    這個配置之前寫的有相關文章,不明白得可以看這里,不過這里的系統是Ubuntu,所以nginx的安裝路徑也不太一樣(/etc/nginx)
    默認我們需要在/etc/nginx/conf.d/目錄下添加配置文件blog.conf
    注意這里的后綴名一定是.conf
vim /etc/nginx/conf.d/blog.conf 

然后配置上我們的域名,端口和映射地址

server { listen 80;#修改這里為其他端口如8081 server_nameyuxingxin.com www.yuxingxin.com; # 這里是你的域名 location / { root /root/blog/; #修改這里的路徑為自己的路徑 indexindex.html index.htm; } } 

然后重啟nginx通過域名就可以訪問我們的博客了

nginx -s reload 
  1. webhooks配置
    也就是人們常說的鉤子,是一個很有用的工具。你可以通過定制 Webhook 來監測你在 Github.com 上的各種事件,最常見的莫過于 push 事件,如果你設置了一個監測 push 事件的 Webhook,那么每當你的這個項目有了任何提交,這個 Webhook 都會被觸發,這時 Github 就會發送一個 HTTP POST 請求到你配置好的地址。如此一來,你就可以通過這種方式去自動完成一些重復性工作;比如,你可以用 Webhook 來自動觸發一些持續集成(CI)工具的運作,比如 Travis CI;又或者是通過 Webhook 去部署你的線上服務器。
    Webhook 的配置是十分簡單的。首先進入你的 repo 主頁,通過點擊頁面上的按鈕 [settings] -> [Webhooks & service] 進入 Webhooks 配置主頁面。在Payload URL配置鏈接,比如:
http://xxxxx.com:8246/webhooks/push/deploy 

這樣一來,倉庫的配置就算好了,接下來看服務器端如何響應

  1. 服務器配置webhooks響應
    首先我們在我們的博客目錄下創建一個js文件,用來啟動我們的監聽服務,端口就是我們在倉庫配置那里的端口地址:8246
var http = require('http') var exec = require('child_process').exec http.createServer(function (req, res) { if(req.url === '/webhooks/push/deploy'){ exec('sh ./deploy.sh',function(error,stdout,stderr){if(error){ console.log(error.stack); console.log('Error code:'+ error.code);}else{ console.log('success');} }) } res.end() }).listen(8246) 

這段代碼就能啟動一個nodejs服務,監聽8246端口。
當請求過來的url完全匹配的時候,執行deploy.sh。
再新建一個deploy.sh文件處理部署相關腳本

git pull origin master 
  1. 運行nodejs服務
node ./webhooks.js 

如果你使用上面的命令運行nodejs服務,nodejs服務會在前臺運行,可以使用pm2使nodejs運行在后臺。
安裝
npm install pm2 -g
啟動服務
pm2 start webhooks.js
停止服務
pm2 stop webhooks.js
重啟服務
pm2 restart webhooks.js
另外我們也可以實時查看pm2的日志服務
pm2 logs

到此為止我們的自動化部署就全部完成了,以后我們只需在本地將文件push到遠程倉庫,就會自動同步到我們的服務器上

啟用全站HTTPS

這里簡單總結下在 Nginx 配置 HTTPS 服務器:主要簽署第三方可信任的證書和配置HTTPS

關于證書

SSL證書需要向國際公認的證書證書認證機構(簡稱CA,Certificate Authority)申請。
CA機構頒發的證書有3種類型:

  • 域名型SSL證書(DV SSL):信任等級普通,只需驗證網站的真實性便可頒發證書保護網站;
  • 企業型SSL證書(OV SSL):信任等級強,須要驗證企業的身份,審核嚴格,安全性更高;
  • 增強型SSL證書(EV SSL):信任等級最高,一般用于銀行證券等金融機構,審核嚴格,安全性最高,同時可以激活綠色網址欄。

關于證書服務,市面上大體的都是收費的證書,當然也有部分是免費的,比如Let's Encrypt剛剛又拍云也上線了免費的 SSL 證書,另外StartSSL也提供免費證書,有效期3年;另外還有騰訊云和阿里云都有相關的免費證書,這里我使用的是Let's Encrypt ,這也是目前最知名的開源SSL證書。

證書申請

申請 Let's Encrypt 證書不但免費,還非常簡單,雖然每次只有 90 天的有效期,但可以通過腳本定期更新,配好之后一勞永逸。Let's Encrypt 的證書簽發過程使用的就是 ACME 協議,這里也推薦一個小工具就是acme-tiny,它可以幫助我們簡化創建證書的流程。

  1. 創建帳號
    創建一個目錄存放私鑰證書等各種文件,然后進入后創建我們的RSA賬戶私鑰
mkdir ssl cd ssl openssl genrsa 4096 > account.key 
  1. 創建 CSR 文件
    這一步生成我們的證書簽名文件,即CSR,首先要創建RSA私鑰
openssl genrsa 4096 > domain.key 

接下來就可以生成我們的證書文件了,單個域名和多個域名生產的參數還不太一樣.

//單個域名 openssl req -new -sha256 -key domain.key -subj "/CN=yuxingxin.com" > domain.csr //多個域名(比如yuxingxin.com和www.yuxingxin.com) openssl req -new -sha256 -key domain.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:yuxingxin.com,DNS:www.yuxingxin.com")) > domain.csr 
  1. 配置驗證服務
    CA 在簽發 DV(Domain Validation)證書時,需要驗證域名所有權,而大部分都是通過郵件驗證的方式,Let's Encrypt 則是在你的服務器上生成一個隨機驗證文件,再通過創建 CSR 時指定的域名訪問,如果可以訪問則表明你對這個域名有控制權。
    首先創建用于存放驗證文件的目錄
mkdir ~/www/challenges/ 

然后配置一個 HTTP 服務,以 Nginx 為例:

server { listen 80; # 這里改成自己的域名 server_name yuxingxin.com www.yuxingxin.com; location /.well-known/acme-challenge/ { alias /root/www/challenges/; try_files $uri =404; } } 
  1. 生成網站證書
    先把acme-tiny腳本保存到之前的ssl目錄
wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py 

指定賬戶私鑰、CSR 以及驗證目錄,在ssl目錄下執行腳本

python acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /root/www/challenges/ > ./signed.crt 

如果一切正常,當前目錄ssl下就會生成一個 signed.crt,這就是申請好的證書文件。
這里遇到一個錯誤,大致如下:

ValueError: Wrote file to /root/www/challenges/oJbvpIhkwkBGBAQUklWJXyC8VbWAdQqlgpwUJkgC1Vg, but couldn't download http://www.yuxingxin.com/.well-known/acme-challenge/oJbvpIhkwkBGBAQUklWJXyC8VbWAdQqlgpwUJkgC1Vg 

網上查了一些方案,覺得有一個比較靠譜,也得到了解決,大致就是原來庫做了一個驗證導致有些情況通不過,這里有人fork源庫修改了部分代碼,地址在這里,如果出現上述錯誤,可以獲取這個庫的腳步然后在執行上面那條命令。

  1. 下載中間證書
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem cat signed.crt intermediate.pem > chained.pem 
  1. 為了后續能順利啟用 OCSP Stapling,我們再把根證書和中間證書合在一起:
wget -O - https://letsencrypt.org/certs/isrgrootx1.pem > root.pem cat intermediate.pem root.pem > full_chained.pem 
  1. 修改nginx證書配置
server { listen 443; #修改成自己的域名 server_name yuxingxin.com www.yuxingxin.com;ssl on; #這里注意證書路徑 ssl_certificate /root/ssl/chained.pem; ssl_certificate_key /root/ssl/domain.key;ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; ssl_session_cache shared:SSL:50m; ssl_dhparam /root/ssl/dhparam.pem; ssl_prefer_server_ciphers on; resolver 8.8.8.8; ssl_stapling on; ssl_trusted_certificate /root/ssl/signed.crt; add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;preload";location / { # 這里要改成自己存放博客靜態網頁的目錄 root/root/blog; indexindex.html index.htm; } } server { listen 80; # 這里改成自己的域名 server_name yuxingxin.com www.yuxingxin.com; ssl_certificate /root/ssl/chained.pem; ssl_certificate_key /root/ssl/domain.key;location / { return 301 https://$host$request_uri; }location /.well-known/acme-challenge/ { alias /root/www/challenges/; try_files $uri =404; }#error_page404/404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504/50x.html; location = /50x.html { root html; } } 

配置自動更新

Let's Encrypt 簽發的證書只有 90 天有效期,推薦使用腳本定期更新
創建腳本文件并賦予執行權限

mkdir shell cd shell vi renew_cert.sh 

并復制下面內容

#!/bin/bash cd /root/ssl/ python acme_tiny.py --account-key account.key --csr domain.csr --acme-dir /root/www/challenges/ > signed.crt || exit wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem cat signed.crt intermediate.pem > chained.pem service nginx reload 

這里借助crontab來定時執行任務,它是一個可以用來根據時間、日期、月份、星期的組合來調度對重復任務的執行的守護進程。
執行

crontab -e 

然后 添加如下內容

0 0 1 * * /root/shell/renew_cert.sh >/dev/null 2>&1 

這樣以后證書每個月都會自動更新,一勞永逸。
另外這里也推薦一個網站,可以監測你的證書的有效期
https://letsmonitor.org

這樣的話就算完了,但是這里有幾點做說明

  • dhparam的生成
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048 
  • 強制HTTPS
#另外還有兩種其他的配置方式,可以自行Googlelocation / { return 301 https://$host$request_uri; } 
  • 關于HSTS
    HTTP Strict Transport Security的縮寫,即:“HTTP嚴格傳輸安全”。假設一個用戶從來沒有訪問過我的網站,,并且他第一次訪問的時候訪問的是 http://yuxingxin.com ,在正常的情況下,我的服務器就會給這位用戶返回一個 301 跳轉到 https://yuxingxin.com ,并且帶上上面配置的HSTS頭,在用戶下次訪問我的博客時,只要 HSTS 還在有效期中,瀏覽器就會直接跳轉到相對應的 https 頁面,并且這是不需要經過數據傳輸的,直接在本地瀏覽器進行的處理。
    目前大部分瀏覽器對HSTS的支持已經相當完美,具體各瀏覽器和版本的支持情況可以在這里上查看。 但是HSTS是有缺陷的,第一次訪問網站的客戶端,HSTS并不工作。 要解決這個問題,就需要我們下面要講解的HSTS preload list。它是一個站點的列表,并通過硬編碼寫入 Chrome 瀏覽器中,列表中的站點將會默認使用 HTTPS 進行訪問,此外,Firefox 、Safari 、IE 11 和 Edge 也同樣用一份 HSTS 站點列表,它申請加入需要一些條件:
  • 有一張有效的證書(如果是使用了 SHA-1 證書簽名算法的必須在 2016 年前失效)
  • 重定向所有的 HTTP 流量到 HTTPS ( HTTPS ONLY )
  • 全部子域名的流量均通過 HTTPS ,如果子域名的 www 存在的話也同樣需要通過 HTTPS 傳輸。
  • 在相應的域名中輸出 HSTS 響應頭
    1 過期時間至少大于 18 周(10886400 秒)
    2 必須聲明 includeSubdomains
    3 必須聲明 preload
    4 跳轉過去的那個頁面也需要有 HSTS 頭
    點擊這里開始申請,申請成功后,你的域名就會加入到這個列表
    ssl.png
    如果大多數瀏覽器都已經更新到新的列表,那么針對國內的 VPS ,不打開80端口,只打開 443 ,瀏覽器同樣會跳轉過來,這樣就可以免備案了,不過好像這樣對搜索引擎就不太友好。

測試

所有這些工作完成以后,我們可以對證書進行檢測。這里是檢測地址 ,下面是我的域名的檢測報告。

report.jpeg
如果是A+,則說明你的配置是好著的。另外這里也給出一個國內也列一個檢測網站

另外上面如果覺得麻煩的話,這里推薦一個別人寫的腳本,它是一個快速獲取/更新 Let's encrypt 證書的 shell script,使用該腳本可以簡化上面的流程。


本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.junxiaosheng.cn/20457.html
相關開發語言
 八年  行業經驗

多一份參考,總有益處

聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

咨詢相關問題或預約面談,可以通過以下方式與我們聯系

業務熱線:余經理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

  • QQ咨詢
  • 在線咨詢
  • 官方微信
  • 聯系電話
    座機0755-29185426
    手機13699882642
  • 預約上門
  • 返回頂部
主站蜘蛛池模板: 中文字幕99香蕉在线| 国内卡一卡二卡三免费网站| 亚洲免费va在线观看| 欧洲美女高清一级毛片| 黄色三级三级免费看| 高清AV熟女一区| 999人在线精品播放视频| 亚洲精品无码不卡在线播放he| 亲胸揉胸膜下刺激视频网站APP| 精品亚洲欧美中文字幕在线看| 俄罗斯少女人体| 99麻豆精品国产人妻无码 | 女人久久WWW免费人成看片| 国产做国产爱免费视频| 二级片免费看| 少妇无码太爽了视频在线播放 | 亚洲国产成人精品无码区5566 | 亚洲精品网址| 无码国产精品高潮久久9| 人人碰在线视频| 国产欧美日韩网站| 91久久综合精品国产丝袜长腿| 午夜天堂一区人妻| 色综合久久久久久| 日本午夜福利无码高清| 男人吃奶摸下弄进去好爽| 久久香蕉国产线看观看| 久久6699精品国产人妻| 国产一区二区三区乱码在线观看| 国产精品亚洲高清一区二区| 高清国产免费观看视频在线| yellow高清免费观看日本| 99re久久热最新地址一| 999在线观看精品免费| 99爱视频在线观看| 97在线免费观看视频| 973午夜伦伦电影论片| 99久久伊人一区二区yy5099 | 久久精品视频3| 久久电影精品| 恋老视频 国产国佬|