(新手指南)在Linux服务器上安装Nodejs和Nginx并部署Web应用所以写了这篇文章,记录了我从零开始的部署过程,希望能帮助到和我一样的新手。如有遗漏请指出,我会尽快修改,谢谢!?笔者使用的服务器系统为CentOS7,操作说明可能与其他系统不同,这里不再赘述。请大家查看详情,善用百度(′???`)安装Nodejs。有两种安装Nodejs的方法。分别是下载源码编译和下载软件包。在Nodejs官网(https://nodejs.org/en/download/)的下载页面可以看到两个不同的包,查看链接地址下载链接可以得到对应的版本。在写这篇文章的时候,Nodejs最新的稳定版本是v8.9.1,所以下面的步骤都会以这个版本为例进行安装。1.编译安装首先将源码下载到本地:wget-chttps://nodejs.org/dist/v8.9.1/node-v8.9.1.tar.gz下载后解压tar文件:tar-zxvfnode-v8。9.1.tar.gz进入文件夹:cdnode-v8.9.1编译代码之前,需要在机器上安装一些软件包,才能正常运行编译:sudoyuminstallgccgcc-c++配置源码:./configure编译:makeinstallation:sudomakeinstall安装完成后,可以输入命令node-v查看Nodejs是否安装成功:$node-vv8.9.1#如果出现对应的版本号信息,说明安装成功。编译的时间往往比较长,在配置较低的服务器上编译的时间会更长。所以对于低配置的服务器,我推荐下面的方法,使用编译好的二进制文件来安装Nodejs。2、直接安装编译好的Nodejs(推荐)这种方式相比第一种方式,节省了编译安装的时间,安装速度更快。第一步还是需要下载对应的二进制文件:wget-chttps://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz解压文件:tar-xvfnode-v8.9.1-linux-x64.tar.xz解压后得到的文件夹就是安装好的Nodejs。为了方便,我们可以重命名(这里我放在用户根目录下的app文件夹下,你也可以改成其他路径):mvnode-v8.9.1-linux-x64~/app/nodejs不过,Nodejs安装好了这种方式并不完美。首先,Nodejs命令node和npm不能全局使用。为了解决这个问题,我们需要创建两个软链接:sudoln-s~/app/nodejs/bin/node/usr/local/bin/nodesudoln-s~/app/nodejs/bin/npm/usr/local/bin/npm其中~/app/nodejs是我们刚才安装的Nodejs的路径,创建软链接的时候要注意区别。现在,node和npm可以全局使用了。同样输入命令node-v查看Nodejs是否安装成功:$node-vv8.9.1#出现对应的版本号信息,说明安装成功还有问题。npm下全局安装的模块不能直接在bash中执行。比如我们要在npm中安装yarn:$npminstall-gyarn$yarnbash:yarn:commandnotfound...要解决这个问题,我们需要在Linux上手动配置环境变量。编辑/etc/profile文件:sudovi/etc/profile在文件底部,添加如下两行代码:exportNODE_HOME=~/app/nodejs/binexportPATH=$NODE_HOME:$PATHisthesameas之前~/app/nodejs是我们安装的Nodejs的路径。由npm全局安装的模块现在也可用:$yarnyarninstallv1.3.2infoNolockfilefound.[1/4]Resolvingpackages...[2/4]Fetchingpackages...[3/4]Linkingdependencies...[4/4]构建新包...信息锁文件未保存,无依赖项。在0.09秒内完成。至此,Nodejs的安装已经顺利完成,我们就可以在服务器上用Nodejs为所欲为了!3、通过yum安装我们也可以直接通过系统的yum来安装Nodejs。这种方式安装的时候需要保证可以访问官方库:sudoyuminstallepel-release然后我们就可以安装Nodejs了:sudoyuminstallnodejs但是这种方式并不能保证安装的Nodejs是最新版本.在最新的稳定版本是v8.9.1的情况下,我用这种方法安装的Nodejs版本是v6.12.0,升级过程一波三折,不推荐这种方法。Nginx的安装和配置在CentOS上安装Nginx比较简单。步骤和Nodejs的编译安装非常相似。网上也有很多关于安装Nginx的帖子。我参考了CentOS7下安装Nginx的帖子,安装过程也很顺利,没有出现任何问题,这里不再赘述。配置Nginx安装完成并启动Nginx后,我们在本地浏览器访问服务器,发现无法连接:但是,我们在终端运行命令curlhttp://127.0.0.1,却可以看到HTML代码:表示Nginx正常启动,本地可以成功访问!这个问题困扰了我一段时间。后来百度了一下发现是被CentOS的防火墙屏蔽了(CentOS7的防火墙改成了firewall,7下面是iptables,具体修改命令可以参考Centos7打开查看端口防火墙关闭和打开这篇文章)。所以修改服务器的防火墙,让它通过80端口:sudofirewall-cmd--zone=public--add-port=80/tcp--permanent这条命令的几个含义:–zone#Scope–add-port=80/tcp#添加端口,格式为:端口/通讯协议–permanent#永久有效,没有这个参数,重启后会失效,现在发现可以成功访问了:哈哈!越来越好了!部署Web应用目前的前端项目基本都是围绕Webpack构建的,经过Webpack打包后,会生成一系列HTML静态文件。我们的目的是将Webpack打包后的文件放到Nginx上,方便用户访问我们的项目。这里我们以vue-cli脚手架生成的项目为例进行说明。首先生成一个打包好的项目文件:$npminstall-gvue-cli#安装vue-cli脚手架$vueinitwebpackmy-vue#初始化项目my-vue$cdmy-vue&&npminstall#安装项目所需Module$npmrunbuild#webpack项目文件这样my-vue中的dist文件夹就是我们打包好的项目文件。为了方便,我们在根目录下新建一个nginx文件夹,将my-vue中的dist文件夹放到nginx文件夹中,然后重命名为vue文件夹:$mkdir~/nginx$mv~/my-vue/dist~/nginx/vue然后我们需要配置Nginx,运行sudo/usr/local/nginx/sbin/nginx-t确定nginx的配置文件:$sudo/usr/local/nginx/sbin/nginx-t#的下面这行代码表明nginx的配置文件是/usr/local/nginx/conf/nginx.conf/nginx/conf/nginx.conf测试成功运行命令sudovim/usr/local/nginx/conf/nginx.conf,在配置文件中添加如下代码:http{...//其他配置代码server{听8080;//监听端口server_namelocalhost;root/home/收服/nginx/vue;//项目文件的根目录位置/{indexindex.htmlindex.htm;其中/home/shoufu为我服务器的用户根目录(~)修改,保存退出。运行如下命令重启Nginx使配置生效:sudo/usr/local/nginx/sbin/nginx-sreload别忘了在防火墙中开放8080端口允许用户访问:sudofirewall-cmd--zone=public--add-port=8080/tcp--permanentsudofirewall-cmd--reload这时候我们打开浏览器访问服务器的8080端口,却意外得到403Forbiddenerror:gototheserver并执行命令$curlhttp://127.0.0.1:8080,发现也是403:恍然大悟!原来是Nginx还没设置好!那么问题到底是什么?转百度后发现是Nginx权限不足。为了保证文件能够正确执行,Nginx既需要文件的读权限,又需要文件所有父目录的可执行权限。所以运行如下命令为vue文件夹和所有父文件夹添加读写权限:$sudochmod755~$sudochmod755~/nginx$sudochmod755~/nginx/vue此时我们打开浏览器来访问服务器的8080端口:祝你好运!!至此,前端项目的部署已经基本完成!终于可以暂时抛开配置的烦恼,愉快的回去修bug了!总结正如你所看到的,这是一篇关于Nginx配置的非常入门的文章,没有任何技术难度。文章特意把浏览器无法访问服务器的两个问题写出来,因为笔者在排查问题时发现服务器可以直接访问Nginx页面,可以很好的排查和排除问题;在百度寻找问题答案的时候,发现这种做法也得到了很多人的肯定。所以记录下来,希望能给后来搭建Nginx服务器的新人一些启发。限于篇幅,本文不对Nginx的特性进行深入讲解,如有需要请自行百度;如果时间允许,我会尽量更新Nginx文章。如果看完之后什么都没发现,那大概说明你已经不在小白的行列了:D对你有所收获,欢迎点赞或收藏,这会鼓励我写出更多更好的文章!:D参考CentOS下安装nodejs最简单的方法:https://segmentfault.com/a/11...解决linux下找不到node.js全局模块的情况:http://blog.csdn。net/y3530275...CentOS7下安装Nginx:http://www.linuxidc.com/Linux...Centos7打开查看端口防火墙关闭打开:http://blog.csdn.net/jack8598...解决服务器Nginx403forbidden错误:https://www.server110.com/ngi...
