部署小說api服務到騰訊雲

jilei786發表於2018-06-19

部署小說api服務到騰訊雲

小說api1.0版本寫完了,接下來就開始部署到伺服器上,用到了nginx、pm2、nvm、git、OpenSSL。

伺服器配置: CentOS 7.4 64位 1 核 2 GB 1 Mbps node版本: 8.9.0 nvm版本: 0.33.11 npm版本: 5.5.1 nginx版本:1.12.2 git版本: 2.9.5

第一步新增pm2配置檔案

在小說api專案的根目錄建立一個pm2.json的檔案。

{
    "name": "novel-api",  // 服務名
    "script": "./bin/www", // 啟動指令碼
    "cwd": "./",   // 當前工作路徑
    "watch": [  // 監控變化的目錄,一旦變化,自動重啟
        "bin",
        "routers"
    ],
    "ignore_watch": [  // 從監控目錄中排除
        "node_modules",
        "logs",
        "public",
        "log"
    ],
    "watch_options": {
        "followSymlinks": false
    },
    "max_memory_restart": "1G", // 根據記憶體限制重新啟動應用程式。
    "error_file": "./logs/novel-apierr.log",  // 錯誤日誌路徑
    "out_file": "./logs/novel-api-out.log",   // 普通日誌路徑
    "env": {
        "DEBUG": "novel-api",  // 環境變數引數,debug名字為novel-api,8080埠監聽
        "PORT": "8080"
    }
}
複製程式碼

package.json檔案新增npm run deploy部署命令。

"deploy": "pm2 start pm2.json"
複製程式碼

pm2 常用命令。 pm2 save 儲存當前程式列表。 pm2 resurrect 啟動之前儲存的程式列表。 pm2 restart app.js|app_name 重啟程式 pm2 start app.js 啟動程式 pm2 list 檢視程式列表 pm2 stop app_name |app_id 停止指定的應用。 all 停止所有應用

第二步購買伺服器和域名

購買伺服器buy.cloud.tencent.com/cvm?tab=lit…,我買的是CentOS 7.4 64位 1 核 2 GB 1 Mbps的伺服器。如果只是嘗試部署流程,可以選擇按時計費。 購買域名dnspod.cloud.tencent.com/?from=qclou…建議選.com的域名。

第三步設定子域名

新增一個api開頭的子域名console.cloud.tencent.com/domain,然後新增解析。

部署小說api服務到騰訊雲

第四步登陸伺服器安裝軟體

登陸到伺服器然後執行以下安裝命令。

安裝nginx

yum install -y nginx
nginx -v
複製程式碼

安裝nvm

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
nvm --version
複製程式碼

安裝node和pm2、apidoc

nvm install 8.9.0
nvm use 8.9.0
node -v
npm -v
npm install -g pm2 apidoc
複製程式碼

安裝git

yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel tar
yum install -y gcc-c++ perl-ExtUtils-MakeMaker
cd /usr/src
wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
tar xf git-2.9.5.tar.gz
cd git-2.9.5
make configure
make profix=/usr/git
make install
echo "export PATH=$PATH:/usr/git/bin" >> /etc/profile
source /etc/profile
git --version 
// 配置git
git config --global user.name "使用者名稱稱"
git config --global user.email 電子郵件地址
複製程式碼

在伺服器上克隆git倉庫

先進入home路徑建立wwwroot資料夾。

cd /home && mkdir wwwroot
cd wwwroot
git clone https://github.com/lanpangzhi/novel-api.git
cd novel-api
npm install
npm run doc
npm run deploy
複製程式碼

這個應用就pm2被啟動了。

配置nginx

先啟動nginx。

nginx
複製程式碼

http://123.206.45.87 在瀏覽器輸入伺服器ip就可以看到nginx已經啟動了。

部署小說api服務到騰訊雲
進入nginx配置目錄,新建檔案。

cd /etc/nginx/conf.d
touch api.langpz.com-8080.conf
複製程式碼

如果一臺伺服器的server比較多,建議用域名和埠做配置檔名。 編輯api.langpz.com-8080.conf 配置檔案。

vi api.langpz.com-8080.conf
複製程式碼

把下面程式碼複製貼上過去。

upstream novel-api {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    server_name 你自己的域名;
    location / {
        proxy_pass http://novel-api;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   Host             $http_host;
        proxy_set_header   X-NginX-Proxy    true;
        proxy_redirect     off;
    }
}
複製程式碼

ctrl + c 輸入:wq 退出並儲存。再執行nginx -s reload 在瀏覽器輸入你的域名就可以看到文件,api.langpz.com

gzip壓縮

cd /etc/nginx/
vi nginx.conf
複製程式碼

把下面程式碼複製貼上過去。

## gzip壓縮
gzip on;
# ie6不啟用gzip
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
# 壓縮等級 1-9
gzip_comp_level 2;
gzip_buffers 16 8k;
gzip_http_version 1.1;
# 為除“text/html”之外的MIME型別啟用壓縮
gzip_types text/plain text/css application/json application/x-javascript application/javascript image/tiff image/x-icon application/font-woff application/vnd.ms-fontobject text/javascript;
複製程式碼

ctrl + c 輸入:wq 退出並儲存。再執行nginx -s reload。可以去站長之家看你的壓縮率tool.chinaz.com/gzips/

部署小說api服務到騰訊雲

隱藏nginx版本號

還是修改nginx.conf這個檔案

vi nginx.conf

// 把下面程式碼複製過去
# 隱藏nginx版本號
server_tokens off;
複製程式碼

ctrl + c 輸入:wq 退出並儲存。再執行nginx -s reload。

部署小說api服務到騰訊雲
這裡就不顯示nginx版本號了。

配置ssl證照https,給你的網站加個小綠鎖

我用的是騰訊雲的免費證照,也可以自己生成。cloud.tencent.com/product/ssl…,使用域名免費版。

申請騰訊雲ssl證照

部署小說api服務到騰訊雲
直接點下一步,然後用推薦選項驗證。申請很快不到十分鐘就下來,到時候還會有郵件和簡訊通知。

下載證照上傳到伺服器

找到騰訊雲的ssl證照管理去下載證照。

部署小說api服務到騰訊雲
壓縮包裡面有三個資料夾找到Nginx這個資料夾。 在伺服器進入nginx所在目錄新建一個資料夾。

cd /etc/nginx/
mkdir api.langpz.com
複製程式碼

然後把Nginx資料夾裡面兩個檔案上傳到伺服器/etc/nginx/api.langpz.com 這個資料夾裡面。 可以下載一個FileZilla軟體或者下載一個別的ftp工具,還可以用命令列,我這裡下載了FileZilla使用它去上傳。

加強 HTTPS 安全性

首先在目錄 /etc/nginx/api.langpz.com 執行以下程式碼生成 dhparam.pem 檔案

cd /etc/nginx/api.langpz.com	
openssl dhparam -out dhparam.pem 2048
複製程式碼

修改配置檔案

cd /etc/nginx/conf.d
touch api.langpz.com-8080.conf
複製程式碼

把下面程式碼覆蓋api.langpz.com-8080.conf檔案。

upstream novel-api {
    server 127.0.0.1:8080;
}

# 配置共享會話快取大小
ssl_session_cache shared:SSL:10m;
# 配置會話超時時間
ssl_session_timeout 10m;

# 強制跳轉https
server {
    listen 80;
    server_name api.langpz.com;
    return 301 https://$server_name$request_uri;
}

server {
 listen 443 ssl;
 server_name api.langpz.com;

 # 證照檔案
 ssl_certificate      /etc/nginx/api.langpz.com/1_api.langpz.com_bundle.crt;
 # 私鑰檔案
 ssl_certificate_key  /etc/nginx/api.langpz.com/2_api.langpz.com.key;
 # 設定長連線
 keepalive_timeout    70;
 # 優先採取伺服器演算法
 ssl_prefer_server_ciphers on;
 # 使用DH檔案
 ssl_dhparam /etc/nginx/api.langpz.com/dhparam.pem;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 # 定義演算法
 ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
 # HSTS策略
 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload" always;
 # 防XSS攻擊
 add_header X-Xss-Protection 1;
 # 禁止伺服器自動解析資源型別
 add_header X-Content-Type-Options nosniff;

 
 location / {
    proxy_pass http://novel-api;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header   Host             $http_host;
    proxy_set_header   X-NginX-Proxy    true;
    proxy_redirect     off;
 }
}
複製程式碼

ctrl + c 輸入:wq 退出並儲存。再執行nginx -s reload。 現在就可以訪問api.langpz.com。如果訪問http協議就會強制跳轉到https協議。

部署小說api服務到騰訊雲

SSL安全測試

輸入你的域名。 之前在nginx配置加強 HTTPS 安全性,所以結果是A+。

部署小說api服務到騰訊雲

總結

這種部署比較麻煩,部署完發現pm2也有部署功能,2.0用koa.js重構的時候用pm2部署,docker 生成映象 。

我的部落格和github,喜歡就去點點星吧,謝謝。

github.com/lanpangzhi

blog.langpz.com

參考

nginx.org/en/docs/ github.com/creationix/… www.thinkjs.org/zh-cn/doc/3… www.cnblogs.com/chyingp/p/p… www.runoob.com/git/git-ins… nginx.rails365.net/chapters/in… www.cnblogs.com/nuccch/p/76… aotu.io/notes/2016/…

相關文章