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

    xiaoxiao2021-03-25  62

    最近用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/local wget 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/mongodb mkdir /var/mongodb/data mkdir /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: 18394 all 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和内存)。默认为1 worker_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

    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

    转载请注明原文地址: https://ju.6miu.com/read-37774.html

    最新回复(0)