很久前一直糾結一個問題,寫好的node程序如何發布到服務器主機上呢?在本地的是直接一個node app.js
或者supervisor ./bin/www
就可以了
但是你在服務器主機上,用戶以一個域名或者一個IP地址來訪問你的主機的時候,怎么辦?
准備工作
- 阿里雲Linux主機
- Xshell4
- Xftp4
- node.js程序,默認express
准備工作完成后,登錄你的阿里雲主機
- 在Xshell4上登錄你的Ecs,填寫好你的主機外網IP,端口默認為22
- 填寫好的你的登錄用戶名,Linux主機登錄用戶名如果你在購買主機的時候沒有設置的話默認的是root
- 輸入你的主機密碼連接到你的服務器
- 成功后會提示
現在,你的服務器Xshell環境已經進入
linux作為服務器專用操作系統,主要就是默默的待在機房提供各項網絡服務的,為了節省系統資源,像windows那樣華麗麗的用戶桌面就默認不加載了
安裝node.js環境
依次執行以下指令:
sudo apt-get update
sudo apt-get install -y -software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
注意:從 Node.js v0.10.0 開始,Chris Lea 倉庫中提供的 Node.js 安裝包默認包含了 npm 和 nodejs-dev
執行 sudo add-apt-repository ppa:chris-lea/node.js
這條指令時,系統會出現如下提示,詢問你是否確定要添加上面的 PPA
這里必須是Enter
執行sudo apt-get install nodejs
這條指令時,系統會出現如下提示
這里也是必須Y
上訴步驟完成后,執行node -v
,寫這篇文章的時候node.js版本為v0.10.37,所以也會出現
node.js環境已經安裝完畢
安裝nginx
nginx安裝比較簡單,直接sudo apt-get install nginx
安裝過程也會提示Y/N,統一Y
安裝完成后 nginx -v
然后這時可以測試下了,具體nginx操作命令請百度,啟動nginx
nginx
或者sudo service nginx restar
這個時候有些情況下會這樣報錯
這是因為80端口在Linux主機上已經占用,nginx默認占用的80端口
成功后在瀏覽器端輸入你的外網IP,
查看響應頭
說明nginx已經運行成功
上傳並配置node程序
做過node的都知道,express綁定的是3000端口,當然這個端口可以自己設置,現在的思路就是,3000端口保持不變,用nginx把80端口代理到3000端口,轉接到node.js上面去
用Xftp4登錄你的服務器主機,具體步驟和上面Xshell4雷同,你會發現空空如也,當然,你還沒有上傳程序,上傳程序建議先壓縮后上傳,不然你可以試試,很痛苦的,在服務器端解壓縮,注意壓縮為zip文件具體步驟下面有
下面配置nginx.conf,我這里安裝的nginx的目錄在/etc/nginx下
我的nginx.conf是這樣配置的
upstream nodesocket { server 139.129.15.150:3000 fail_timeout=20s; server 139.129.15.150:3000 fail_timeout=20s; } server { #將網站域名設置好,然后端口設置為8000,最后proxy_pass設置為http://127.0.0.1:3000,將所有從localost:8000的請求傳遞到nodejs程序去。 #重啟nginx #訪問域名,就可以了 listen 80; server_name 139.129.15.150 ; location / { proxy_pass http://nodesocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; }
到這里,出來一個問題,如果你再次輸入域名,會給你報404,怎么運行node.js呢?如何在服務器掛掉或者重啟了自動啟動node.js呢?
別怕,有forever,forever可以看做是一個nodejs的守護進程,能夠啟動,停止,重啟我們的app應用。
前面說過了 Chris Lea 倉庫中提供的 Node.js 安裝包默認包含了 npm 和 nodejs-dev
所以,直接在Xshell4中輸入sudo npm install forever -g ,注意forever需要安裝的全局環境下
建議npm命令加上-d 可以看到安裝進度
把你的node程序壓縮並上傳到服務器上
需要在你的Linux上安裝一個叫做unzip的東東
apt-get install unzip
你在解壓縮文件的時候會一直報錯,權限不足
更改root文件夾下的權限為777
unzip Blog.zip
然后forever start bin/www
注意www文件里面的server.listen 需要加上第二個參數,你的服務器外網IP
