# 線上部署
[TOC=2,3]
## 使用 pm2 管理服務
pm2 是一款專業管理 Node.js 服務的模塊,非常建議在線上使用。使用 pm2 需要以全局的方式安裝,如:`sudo npm install -g pm2`。安裝完成后,命令行下會有 pm2 命令。
創建項目時,會在項目目錄下創建名為?`pm2.json`?的配置文件,內容類似如下:
~~~
{
"apps": [{
"name": "demo",
"script": "www/production.js",
"cwd": "/Users/welefen/Develop/git/thinkjs/demo",
"max_memory_restart": "1G",
"autorestart": true,
"node_args": [],
"args": [],
"env": {
}
}]
}
~~~
將?`cwd`?配置值改為線上真實的項目路徑,然后在項目目錄下使用下面的命令來啟動/重啟服務:
~~~
pm2 startOrGracefulReload pm2.json
~~~
pm2 詳細的配置請見?[http://pm2.keymetrics.io/docs/usage/application-declaration/](http://pm2.keymetrics.io/docs/usage/application-declaration/)。
## 使用 nginx 做反向代理
創建項目時,會在項目目錄創建一個名為?`nginx.conf`?的 nginx 配置文件。配置文件內容類似如下:
~~~
server {
listen 80;
server_name localhost;
root /Users/welefen/Develop/git/thinkjs/demo/www;
set $node_port 8360;
index index.js index.html index.htm;
if ( -f $request_filename/index.html ){
rewrite (.*) $1/index.html break;
}
if ( !-f $request_filename ){
rewrite (.*) /index.js;
}
location = /index.js {
proxy_http_version 1.1;
proxy_set_header Connection "";
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:$node_port$request_uri;
proxy_redirect off;
}
location ~ /static/ {
etag on;
expires max;
}
}
~~~
將?`server_name localhost`?里的 localhost 修改為對應的域名,將?`set $node_port 8360`?里的 8360 修改和項目里監聽的端口一致。
修改完成后,將該配置文件拷貝到 nginx 的配置文件目錄中,然后通過?`nginx -s reload`?命令 reload 配置,這樣就可以通過域名訪問了。
線上建議開啟配置?`proxy_on`,這樣就可以禁止直接通過 IP + 端口來訪問。修改配置文件`src/common/config/env/production.js`,如:
~~~
export default {
proxy_on: true
}
~~~
## 關閉靜態資源處理的配置
為了方便開發,ThinkJS 是支持處理靜態資源請求的。但代碼部署在線上時,是用 nginx 來處理靜態資源請求的,這時可以關閉 ThinkJS 里處理靜態資源請求的功能來提高性能。
可以在配置文件?`src/common/config/env/production.js`?中加入如下的配置:
~~~
export default {
resource_on: false
}
~~~
## 使用 cluster
線上可以開啟 cluster 功能達到利用多核 CPU 來提升性能,提高并發處理能力。
可以在配置文件?`src/common/config/env/production.js`?中加入如下的配置:
~~~
export default {
cluster_on: true
}
~~~
- 快速入門
- 介紹
- 創建項目
- 項目結構
- 代碼規范
- 升級指南
- 進階應用
- 模塊
- 控制器
- 視圖
- 配置
- 路由
- 模型
- 介紹
- 事務
- 關聯模型
- Mysql
- MongoDB
- SQLite
- Adapter
- 介紹
- Cache
- Session
- WebSocket
- Template
- 擴展功能
- thinkjs 命令
- 靜態資源訪問
- Middleware
- Service
- Cookie
- 錯誤處理
- 錯誤信息
- 數據校驗
- 國際化
- 路徑常量
- REST API
- 定時任務
- 線上部署
- 推薦模塊
- API
- think
- think.base
- think.http.base
- http
- controller
- rest controller
- model
- model.mongo
- middleware