前段時間領了一個阿里免費的半年服務器,一直想用來搞點小東西。時至今日,總算勉強搞定了。
在這兒寫一下總結,把遇到的問題都作一個概括。node
對於沒錢的學生黨阿里雲有推出9.9一個月的套餐,對於不想花太多錢去體驗的我的,阿里雲有免費半年的名額(這個須要搶)。貌似騰訊雲和百度雲也有相似的活動。
放一個阿里雲半年免費鏈接:
https://free.aliyun.com/?spm=...nginx
然而個人是花了9塊錢買的半年(這個不用搶),可是鏈接我已經找不到了。。。。mongodb
開通服務器的時候根據本身的喜愛可選擇不一樣才操做系統(本人選的是windows server 2008)。其餘服務器方面的配置就不在此贅述了,阿里雲官網上有對應的教程。數據庫
在安裝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
服務器版本爲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.
將本身以前作得一個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配置有問題);
在萬網上隨便買了一個域名,online後綴,很便宜 7塊錢能用一年呢。
而後配置一下域名解析,這一步也很完美。
可是!過幾天再去訪問的的域名返現沒法訪問了。
查了下緣由是由於我沒有備案(我去還要備案。。。);
而後照着教程準備備案了,結果輸入域名時提示域名後綴沒法提交備案。
才發現又踩了一個坑 online後綴不支持備案....不能備案又不能用,還不能轉賣,這個域名買了有毛用啊。
還有部分域名也不能備案。可參考
https://www.zhihu.com/questio... 固然最好仍是去工信部查查
附上網站鏈接: http://ermuit.top/#/home (由於沒有備案已沒法訪問)