把Node.js项目部署到阿里云服务器(CentOs)

来源:互联网 发布:java电商项目控制超卖 编辑:程序博客网 时间:2024/06/06 00:45

最近用node.js开发了一个web项目,先打算随便写个简单的小服务部署到我自己的阿里服务器上,测试一下。不知道如何把node.js项目部署到阿里云服务器,综合了网上的说法以及自己一点点实验。把教程整合了一下,做下分享。

服务器

服务器选择了 阿里云服务器 。

  • 配置:

  • 系统:CentOS6.5 64位(Linux系统的一种)

配置环境

配置服务器环境

1.在阿里云管理控制台把云服务器实例启动

2.登入服务器:用Putty 或 Xshell(我使用的是xshell):

下载安装xsheel后,新建会话。

登入成功,如图:

3.把yum更新到最新版本:

yum -y update

4.我们将使用最新源代码构建Node.js,要进行软件的安装,需要一组用来编译源代码的开发工具:

yum -y groupinstall "Development Tools" 

安装node.js

1.开始安装Node.js,先进入/usr/src文件夹,这个文件夹通常用来存放软件源代码:

cd /usr/src 

2.从 Node.js的站点 中获取压缩档源代码, 我选择的版本为v0.10.18:

wget http://nodejs.org/dist/v0.10.18/node-v0.10.18.tar.gz 

3.解压缩源文件,并且进入到压缩后的文件夹中:

tar zxf node-v0.10.18.tar.gz cd node-v0.10.18 

4.执行配置脚本来进行编译预处理:

./configure 

5.开始编译源代码

make 

6.当编译完成后,我们需要使之在系统范围内可用, 编译后的二进制文件将被放置到系统路径,默认情况下,Node二进制文件应该放在/user/local/bin/node文件夹下:

make install 

7.现在已经安装了Node.js, 可以开始部署应用程序, 首先要使用Node.js的模块管理器npm安装Express middleware 和forever(一个用来确保应用程序启动并且在需要时重启的非常有用的模块):

npm -g install express forever 

8.建立超级链接, 不然 sudo node 时会报 "command not found"

sudo ln -s /usr/local/bin/node /usr/bin/node sudo ln -s /usr/local/lib/node /usr/lib/node sudo ln -s /usr/local/bin/npm /usr/bin/npm sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf sudo ln -s /usr/local/bin/forever /usr/bin/forever

安装mongodb(在项目中使用的数据库)

1.安装说明:

  • 系统环境:Centos-6.5

  • 安装软件:mongodb-linux-x86_64-2.4.9.tgz

  • 下载地址: http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.9.tgz

  • 上传位置:/usr/local/

  • 软件安装位置:/usr/local/mongodb

  • 数据存放位置:/var/mongodb/data日志存放位置:/var/mongodb/logs

2.进入文件夹/usr/local,下载mongodb源代码:

cd /usr/localwget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.9.tgz

3.解压安装包,重命名文件夹为mongodb

tar zxvf mongodb-linux-x86_64-2.4.9.tgz mv mongodb-linux-x86_64-2.4.9 mongodb

4.在var文件夹里建立mongodb文件夹,并分别建立文件夹data用于存放数据,logs用于存放日志

mkdir /var/mongodbmkdir /var/mongodb/datamkdir /var/mongodb/logs

5.打开rc.local文件,添加CentOS开机启动项:

vim /etc/rc.d/rc.local

6.将mongodb启动命令追加到本文件中,让mongodb开机自启动:

/usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork

7.启动mongodb

/usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork

8.看到如下信息说明已经安装完成并成功启动:

forked process: 18394all output going to: /var/mongodb/logs/log.log

上传代码

上传代码可以考虑使用ftp(xftp、sftp等)、svn、git。我用的是xftp。

下载安装xftp后,启动xftp,新建会话:

登入成功,如图:

我把代码上传到了/root/nodejs目录文件夹下。

中间有点问题 不能通过域名直接访问,然后安装了nginx做反向代理

安装nginx

1.安装文件

 yum install gcc-c++    
 yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel

2.下载安装nginx

sudo forever list 

3.如果需要关闭应用,命令如下:

wget http://nginx.org/download/nginx-1.7.11.tar.gz

[root@admin local]# tar -zxv -f nginx-1.7.11.tar.gz
[root@admin local]# rm -rf nginx-1.7.11.tar.gz
[root@admin local]# mv nginx-1.7.11 nginx
[root@admin local]# cd /usr/local/nginx
[root@admin nginx]# ./configure --prefix=/usr/local/nginx
[root@admin nginx]# make
[root@admin nginx]# make install

4.修改配置文件

#运行用户#user  nobody; #启动进程,通常设置成和cpu的数量相等或者2倍于cpu的个数(具体结合cpu和内存)。默认为1worker_processes  1; #全局的错误日志和日志级别[ debug | info | notice | warn | error | crit ]#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info; #pid进程文件#pid        logs/nginx.pid; #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)#与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。#默认不需设置#worker_rlimit_nofile 65535; #工作模式以及连接数上限events {    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,    #仅用于linux2.6以上内核,可以大大的提高nginx的性能    #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];    #在FreeBSD上面,就用kqueue模型    #window下没有epoll    #use epoll;         #单个后台worker process进程的最大并发连接数。默认为1024    #单个进程最大连接数(最大连接数=连接数*进程数)    worker_connections  1024;         #并发总数是worker_processes和worker_connections的乘积    #即 max_clients=worker_processes * worker_connections    #在设置了反向代理的情况下,max_clients=worker_processes * worker_connections / 4    #worker_connections 值的设置跟物理内存大小有关    #因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数    #而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右    #我们来看看360M内存的VPS可以打开的文件句柄数是多少:    #$ cat /proc/sys/fs/file-max    #输出 34336    #32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内    #所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置    #使得并发总数小于操作系统可以打开的最大文件数目    #其实质也就是根据主机的物理CPU和内存进行配置    #当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。    #ulimit -SHn 65535} #设定http服务器http {    #设定mime类型,类型由mime.type文件定义。文件扩展名与文件类型映射表    include       mime.types;         ##默认文件类型    default_type  application/octet-stream;         #默认编码    #charset utf-8;          #服务器名字的hash表大小    #server_names_hash_bucket_size 128;          #上传文件大小限制    #client_header_buffer_size 32k;          #设定请求缓    #large_client_header_buffers 4 64k;          #设定请求缓    #client_max_body_size 8m;          #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,    #对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,    #以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。默认开启状态    sendfile on;          #开启目录列表访问,合适下载服务器,默认关闭。    #autoindex on;          #防止网络阻塞    #tcp_nopush on;          #防止网络阻塞    #tcp_nodelay on;          #长连接超时时间,单位是秒    #keepalive_timeout 120;     keepalive_timeout  65;         #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。    #fastcgi_connect_timeout 300;    #fastcgi_send_timeout 300;    #fastcgi_read_timeout 300;    #fastcgi_buffer_size 64k;    #fastcgi_buffers 4 64k;    #fastcgi_busy_buffers_size 128k;    #fastcgi_temp_file_write_size 128k;     #gzip模块设置    #开启gzip压缩输出    #gzip on;     #gzip_min_length 1k; #最小压缩文件大小    #gzip_buffers 4 16k; #压缩缓冲区    #gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)    #gzip_comp_level 2; #压缩等级    #gzip_types text/plain application/x-javascript text/css application/xml;    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。    #gzip_vary on;         #开启限制IP连接数的时候需要使用    #limit_zone crawler $binary_remote_addr 10m;      upstream www.eazdp.cn {        #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。        #server 192.168.80.121:80 weight=3;                 #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。        ip_hash;                #ECS服务器地址         server 123.56.27.241:8080;        #server 192.168.80.123:80 weight=3;    }         #设定日志格式    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';     #access日志文件的路径,采用上面定义的main 格式记录    #access_log  logs/access.log  main;        #虚拟主机的配置    server {        #侦听80端口        listen       80;                 #定义使用 localhost,可以自定义域名访问        #域名可以有多个,用空格隔开        server_name  localhost;                #编码        #charset koi8-r;         #access_log  logs/host.access.log  main;         #默认请求        location / {            proxy_pass http://www.eazdp.cn;            proxy_redirect off;            proxy_set_header X-Real-IP $remote_addr;                         #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                         #以下是一些反向代理的配置,可选。            proxy_set_header Host $host;                     #定义服务器的默认网站根目录位置            root D:/apache-tomcat-6.0.41/webapps/test;                         #定义首页索引文件的名称。定义多个用空格分隔            index index.jsp;        }                 #定义404错误提示页面        #error_page  404              /404.html;                 #定义50x错误提示页面        error_page   500 502 503 504  /50x.html;        location = /50x.html {            #定义服务器的默认网站错误页面位置            root   html;        }         #静态文件,nginx自己处理。正则表达式        #location ~ ^/(images|javascript|js|css|flash|media|static|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)/ {            #过期30天,静态文件不怎么更新,过期可以设大一点,            #如果频繁更新,则可以设置得小一点。            #expires 30d;        #}                 #禁止访问 .htxxx 文件        #location ~ /\.ht {        #    deny  all;        #}                 #对 "/" 启用反向代理        #location / {            #proxy_pass http://127.0.0.1:88;            #proxy_redirect off;            #proxy_set_header X-Real-IP $remote_addr;                         #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                         #以下是一些反向代理的配置,可选。            #proxy_set_header Host $host;                         #允许客户端请求的最大单文件字节数            #client_max_body_size 10m;                          #缓冲区代理缓冲用户端请求的最大字节数            #client_body_buffer_size 128k;                          #nginx跟后端服务器连接超时时间(代理连接超时)            #proxy_connect_timeout 90;                          #后端服务器数据回传时间(代理发送超时)            #proxy_send_timeout 90;                          #连接成功后,后端服务器响应时间(代理接收超时)            #proxy_read_timeout 90;                          #设置代理服务器(nginx)保存用户头信息的缓冲区大小            #proxy_buffer_size 4k;                          #proxy_buffers缓冲区,网页平均在32k以下的设置            #proxy_buffers 4 32k;                          #高负荷下缓冲大小(proxy_buffers*2)            #proxy_busy_buffers_size 64k;                          #设定缓存文件夹大小,大于这个值,将从upstream服务器传            #proxy_temp_file_write_size 64k;        #}                 #设定查看Nginx状态的地址        #location /NginxStatus {            #stub_status on;            #access_log on;            #auth_basic "NginxStatus";            #auth_basic_user_file conf/htpasswd;            #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。        #}                 #本地动静分离反向代理配置        #所有jsp的页面均交由tomcat或resin处理        #location ~ .(jsp|jspx|do)?$ {            #proxy_set_header Host $host;            #proxy_set_header X-Real-IP $remote_addr;            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            #proxy_pass http://127.0.0.1:8080;        #}             }      #另一个虚拟主机使用混合的IP的配置    #server {    #    listen       8000;    #    listen       somename:8080;    #    server_name  somename  alias  another.alias;     #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #}      #HTTPS server的配置,默认不开启    #server {    #    listen       443 ssl;    #    server_name  localhost;     #    ssl_certificate      cert.pem;    #    ssl_certificate_key  cert.key;     #    ssl_session_cache    shared:SSL:1m;    #    ssl_session_timeout  5m;     #    ssl_ciphers  HIGH:!aNULL:!MD5;    #    ssl_prefer_server_ciphers  on;     #    location / {    #        root   html;    #        index  index.html index.htm;    #    }    #} }

上面是配置文件的信息,copy一下,替换nginx.conf

4.启动nginx

[root@admin local]# nginx

5.查询接口是否被占用

[root@admin local]# fuser -n tcp 80

NGINX-ERR-2


6.杀死接口

[root@admin local]# kill -9 ***

6.重启nginx


启动应用

1.进入存放代码的目录,存放在/home/app目录下,server.js为程序入口文件

cd root/nodejs  sudo forever start server.js

2.检视运行中的应用:

sudo forever list 

3.如果需要关闭应用,命令如下:

 sudo forever stop 0 





0 0
原创粉丝点击