在阿里雲上部署nodejs應用

前段時間領了一個阿里免費的半年服務器,一直想用來搞點小東西。時至今日,總算勉強搞定了。
在這兒寫一下總結,把遇到的問題都作一個概括。node

1、購買阿里雲服務器

對於沒錢的學生黨阿里雲有推出9.9一個月的套餐,對於不想花太多錢去體驗的我的,阿里雲有免費半年的名額(這個須要搶)。貌似騰訊雲和百度雲也有相似的活動。
放一個阿里雲半年免費鏈接:
https://free.aliyun.com/?spm=...nginx

然而個人是花了9塊錢買的半年(這個不用搶),可是鏈接我已經找不到了。。。。mongodb

開通服務器的時候根據本身的喜愛可選擇不一樣才操做系統(本人選的是windows server 2008)。其餘服務器方面的配置就不在此贅述了,阿里雲官網上有對應的教程。數據庫

2、搭建環境

安裝node

在安裝node以前,被迫安裝了一個360瀏覽器(服務器上的IE實在是受不了),而後去nodejs官網下載對應的版本。express

下載node-8.1.2 32 位 版本安裝失敗,提示此版本只支持win7以及window server 2008 R2以上
本服務器恰好比R2低
下載6.11.0也是提示相同的內容
下載4.4.4 版本安裝成功npm

PS: 下載的都是.msiwindows

安裝mongodb

服務器版本爲windows server 2008與windows server 2008 R2的區別在於一個是基區windows vista 而R8基於windows7瀏覽器

因此在選擇mongodb安裝包時,選擇windows vista版本(只有32位)服務器

安裝的版本爲: mongodb-win32-i386-3.2.16-signedsession

安裝完畢以後 在monodb安裝目錄下的bin文件下 執行cmd

mongod  --dbpath "E:\mongoData"

此處的文件路徑是你要作爲啓動的數據庫的存儲路徑(需提早建立)

報錯:

Wed May 16 16:44:35 warning: 32-bit servers don't have journaling enabled by default.
 Please use --journal if you want durability.

表示32bit版本的mongodb默認不開journal記錄,若是你須要的話,須要在運行時加上--journal開關

因而從新輸入cmd命令:

mongod  --dbpath "E:mongodbData" --journal

報另外一個錯:

2017-07-31T13:37:49.022+0800 I STORAGE  [initandlisten] exception in initAndList
en: 28663 Cannot start server. The default storage engine 'wiredTiger' is not av
ailable with this build of mongod. Please specify a different storage engine exp
licitly, e.g. --storageEngine=mmapv1., terminating

wiredTiger 儲存啓動引擎在32位上不被支持,須要將儲存啓動引擎設置爲mmapv1或者將你的系統升級爲64位

因而輸入命令

E:\mongodb\bin>mongod --dbpath "E:\mongodbData" --storageEngine=mmapv1

程序成功運行,在瀏覽器輸入localhost:27017顯示以下字段:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

配置nginx

將本身以前作得一個nodejs+angular的項目copy到服務器上嘗試運行,沒想到直接成功了。
本來覺得node項目能跑起來就萬事大吉,然而仍是太年輕。
跑起來只能經過localhost訪問,輸入公網IP一點卵用的沒有,因而去查了一下node http模塊的文檔,發現:
圖片描述
因而改了改打碼:

server.listen(port,host);
server.on('error', onError);
server.on('listening', onListening);

prot = '你想要的端口',host = '你對應的公網IP';

結果運行時報錯:

E:\ermu-blog>npm start

> blog@0.0.0 start E:\ermu-blog
> node ./bin/www

express-session deprecated undefined resave option; provide resave option app.js
:24:9
express-session deprecated undefined saveUninitialized option; provide saveUnini
tialized option app.js:24:9
E:\ermu-blog
E:\ermu-blog\bin\www:76
      throw error;
      ^

Error: listen EADDRNOTAVAIL 39.108.188.57:3000
    at Object.exports._errnoException (util.js:870:11)
    at exports._exceptionWithHostPort (util.js:893:20)
    at Server._listen2 (net.js:1221:19)
    at listen (net.js:1270:10)
    at net.js:1379:9
    at nextTickCallbackWith3Args (node.js:453:9)
    at process._tickCallback (node.js:359:17)
    at Function.Module.runMain (module.js:443:11)
    at startup (node.js:139:18)
    at node.js:968:3

EADDRNOTAVAIL 表示 error address not available
地址沒法獲取
將host改成本服務器的ip地址以後,能成功打開。

因而得出一個結論:
須要經過一種手段來使項目支持公網IP訪問,這種手段————就是ngxin反向代理

隨便去下載一個ngxin,而後在ngxin/conf文件夾下新建一個node.conf。

upstream nodejs {
    server 127.0.0.1:3000;
    keepalive 64;
}

server {
    listen 80;
    server_name '';#此處爲你的公網IP
    location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass      http://nodejs;

    }

}

而後在同級目錄下的nginx.conf中include。

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Credentials true;
    add_header Access-Control-Allow-Methods GET,POST,PUT;
    add_header Access-Control-Allow-Headers accept,content-type,x-iamservice-appid,x-iamservice-appkey;
    
    include       mime.types;
    default_type  application/octet-stream;

   

    sendfile        on;
   

    keepalive_timeout  65;
    include node.conf;

}

node項目仍是在localhost上運行,mongodb也開啓,在使用localhost:3000能訪問項目的狀況下,雙擊執行ngxin或者在ngxin目錄下打開cmd執行nginx.exe。

而後使用公網IP訪問,很是完美。(就是網速有點慢,還偶爾會重定向,多是ngxin配置有問題);

3、搞一個域名

在萬網上隨便買了一個域名,online後綴,很便宜 7塊錢能用一年呢。
而後配置一下域名解析,這一步也很完美。

可是!過幾天再去訪問的的域名返現沒法訪問了。

圖片描述

查了下緣由是由於我沒有備案(我去還要備案。。。);
而後照着教程準備備案了,結果輸入域名時提示域名後綴沒法提交備案。
才發現又踩了一個坑 online後綴不支持備案....不能備案又不能用,還不能轉賣,這個域名買了有毛用啊。

還有部分域名也不能備案。可參考
https://www.zhihu.com/questio... 固然最好仍是去工信部查查

附上網站鏈接: http://ermuit.top/#/home (由於沒有備案已沒法訪問)

相關文章
相關標籤/搜索