资讯专栏INFORMATION COLUMN

在阿里云上部署nodejs应用

Cobub / 1736人阅读

摘要:一购买阿里云服务器对于没钱的学生党阿里云有推出一个月的套餐,对于不想花太多钱去体验的个人,阿里云有免费半年的名额这个需要抢。其他服务器方面的配置就不在此赘述了,阿里云官网上有对应的教程。

前段时间领了一个阿里免费的半年服务器,一直想用来搞点小东西。时至今日,总算勉强搞定了。
在这儿写一下总结,把遇到的问题都做一个归纳。

一、购买阿里云服务器

对于没钱的学生党阿里云有推出9.9一个月的套餐,对于不想花太多钱去体验的个人,阿里云有免费半年的名额(这个需要抢)。貌似腾讯云和百度云也有类似的活动。
放一个阿里云半年免费连接:
https://free.aliyun.com/?spm=...

然而我的是花了9块钱买的半年(这个不用抢),但是连接我已经找不到了。。。。

开通服务器的时候根据自己的喜好可选择不同才操作系统(本人选的是windows server 2008)。其他服务器方面的配置就不在此赘述了,阿里云官网上有对应的教程。

二、搭建环境 安装node

在安装node之前,被迫安装了一个360浏览器(服务器上的IE实在是受不了),然后去nodejs官网下载对应的版本。

下载node-8.1.2 32 位 版本安装失败,提示此版本只支持win7以及window server 2008 R2以上
本服务器刚好比R2低
下载6.11.0也是提示相同的内容
下载4.4.4 版本安装成功

PS: 下载的都是.msi

安装mongodb

服务器版本为windows server 2008与windows server 2008 R2的区别在于一个是基区windows vista 而R8基于windows7

所以在选择mongodb安装包时,选择windows vista版本(只有32位)

安装的版本为: mongodb-win32-i386-3.2.16-signed

安装完毕之后 在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:mongodbin>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-bloginwww: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 (因为没有备案已无法访问)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84520.html

相关文章

  • 阿里服务器之项目线上部署过程

    摘要:还有需要配置安全组,在阿里云控制台中进行配置,添加和端口,才能够访问到线上服务器。 在搭建web全栈的过程中,最令我头疼的就是项目的部署与上线,这个过程虽然简单,但是对于全栈菜鸟的我来说真的是个大坑,但是我还是去尝试,终于通过各种文档、请教与实践中完成了线上部署,在此做一下记录与总结 一、购买服务器 服务器选择:服务器的品牌有很多,如亚马逊、阿里云、腾讯等等,各大厂商之间的产品、服务...

    sevi_stuo 评论0 收藏0
  • 阿里服务器之项目线上部署过程

    摘要:还有需要配置安全组,在阿里云控制台中进行配置,添加和端口,才能够访问到线上服务器。 在搭建web全栈的过程中,最令我头疼的就是项目的部署与上线,这个过程虽然简单,但是对于全栈菜鸟的我来说真的是个大坑,但是我还是去尝试,终于通过各种文档、请教与实践中完成了线上部署,在此做一下记录与总结 一、购买服务器 服务器选择:服务器的品牌有很多,如亚马逊、阿里云、腾讯等等,各大厂商之间的产品、服务...

    Yangyang 评论0 收藏0
  • 阿里云产品头条(2017年12月刊)

    摘要:性能平台公测发布性能平台,是由阿里云所提供的,面向中大型应用提供性能监控安全提醒故障排查性能优化等服务的整体性解决方案。业务实时监控服务版本发布,新增应用监控功能等重磅功能业务实时监控服务简称是一款阿里云类监控产品。 摘要: 一、新产品发布1、云防火墙 商业化 发布云防火墙是一款云环境下的防火墙产品,首创了基于业务可视的结果,实现业务梳理和业务隔离的技术。适用于互联网/通用/游戏/金融...

    sixleaves 评论0 收藏0
  • Oracle APEX 系列文章2:阿里云上打造属于你自己的APEX完整开发环境 (准备工作)

    摘要:本系列文章使用的是阿里云的云服务器,仅仅是因为在国内用阿里云的人比较多而已。在这里我们采用将单独部署到上运行的方式完成安装,这也是比较推荐的方式。 本文是钢哥的Oracle APEX系列文章中的其中一篇,完整 Oracle APEX 系列文章如下: Oracle APEX 系列文章1:Oracle APEX, 让你秒变全栈开发的黑科技 Oracle APEX 系列文章2:在阿里云上打...

    hightopo 评论0 收藏0
  • Oracle APEX 系列文章2:阿里云上打造属于你自己的APEX完整开发环境 (准备工作)

    摘要:本系列文章使用的是阿里云的云服务器,仅仅是因为在国内用阿里云的人比较多而已。在这里我们采用将单独部署到上运行的方式完成安装,这也是比较推荐的方式。 本文是钢哥的Oracle APEX系列文章中的其中一篇,完整 Oracle APEX 系列文章如下: Oracle APEX 系列文章1:Oracle APEX, 让你秒变全栈开发的黑科技 Oracle APEX 系列文章2:在阿里云上打...

    MAX_zuo 评论0 收藏0

发表评论

0条评论

Cobub

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<