前段时间在阿里云买了个轻量应用服务器,要把项目部署到服务器上,初入Linux,踩了不少坑。下面总结一下踩过的这些坑。
声明:作者使用的服务器系统是CentOS 7。
下面开始我们的部署过程。

1、安装Nodejs
搬个写的比较详细的博客:blog.csdn.net/xerysherryx… 我是按照文章中编译部署的方式安装的,这里会有一个坑,后面我会提到。
2、安装MongoDB
这篇文章写的超详细:www.linuxidc.com/Linux/2016-…
我在安装配置的时候出现这个错误:
ERROR:child process failed, exited with error number 48
以修复模式运行,这样可以查看具体错误:
./mongod --repair -f mongodb.conf
通过查看日志文件也可以查看具体错误:
tail -200f /usr/local/mongodb/mongodb3.2.4/bin/data/test/logs/mongodb.log
查看MongoDB进程:
ps aux |grep mongodb
杀死MongoDB进程:
kill -15 PID
PID在上面的日志文件中可以找到,然后删除日志文件,再次运行mongod:
rm -f /usr/local/mongodb/mongodb3.2.4/bin/data/test/logs/mongodb.log
./mongod --config mongodb.conf
这篇文章对错误排查写的很详细:www.cnblogs.com/dunitian/p/…
3、安装redis
我参考这篇博客安装配置redis,然后以后台进程方式启动redis,并设置开机启动。
参考资料:www.cnblogs.com/zuidongfeng…
4、安装git
参考资料:www.cnblogs.com/oufeng/p/66…
这里因为我比较懒,也没配置Nginx做反向代理,感兴趣的同学可以参考网上资料。
至此,我们的运行环境基本配置好了,从git上将我的项目下载到服务器上运行,这里我把项目扔到home根目录底下的。
5、运行项目
获取root权限,进入项目目录,npm start,同学们注意了,坑来了,不过办法总比困难多。

bash: npm: command not found
查了很多资料,该错误的主要原因是环境变量没设置好,我们可以使用ln命令将node和npm 加入到/usr/bin文件夹下,具体解决办法如下:
1、cd命令进入到nodejs安装目录,使用find命令查找node及npm:
find ./ -name node
find ./ -name npm
2、cd /usr/bin 进入到该文件夹
3、使用ln命令将npm在该文件夹建立一个同步的链接
ln -s /usr/local/nodejs/node-v9.3.0/node /usr/bin/node
ln -s /usr/local/nodejs/node-v9.3.0/deps/npm/bin/npm /usr/bin/node
连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。
ln命令语法:
ln -s sourceFile targetFile //将一个源文件链到目标文件上
ln -s sourceFile ... targetFile //将多个源文件链到目标文件上
还有以下选项:
- -b或--backup:删除,覆盖目标文件之前的备份;
- -d或-F或——directory:建立目录的硬连接;
- -f或——force:强行建立文件或目录的连接,不论文件或目录是否存在;
- -i或——interactive:覆盖既有文件之前先询问用户;
- -n或--no-dereference:把符号连接的目的目录视为一般文件;
- -s或——symbolic:对源文件建立符号连接,而非硬连接;
- -S<字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它;
- -v或——verbose:显示指令执行过程;
- -V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串;
- --help:在线帮助;
- --version:显示版本信息。
关于Linux系统下文件夹的补充说明:
- 所有用户皆可用的系统程序放在/bin;
- 超级用户才能使用的系统程序放在/sbin;
- 所有用户都可用的应用程序放在/usr/bin;
- 超级用户才能使用的应用程序放在/usr/sbin;
- 所有用户都可用的与本地机器无关的程序存放在/usr/local/bin;
- 超级用户才能使用的与本地机器无关的程序存放在/usr/local/sbin。
所以我们将node和npm链到该文件夹,就可以全局使用npm为所欲为了。

然鹅,在我和终端断开连接之后,就无法访问这个IP地址了,怎么肥四???简单来说我的程序进程是ssh的子进程,当父进程退出的时候子进程也会随之退出,所以终端关闭之后,所有属于它的进程就结束了。这里我的解决办法是用nohup。
nohup是由两个字组成的命令:no-hup,hup是指SIGHUP信号,nohup就是忽略SIGHUP这个信号。当我们从一个连线登出的时候,每个process都会收到一个SIGHUP信号,通过nohup所下达的命令就可以不受该信号的影响,从而继续执行。
在项目根目录执行以下代码:
nohup npm start &
至此,我的项目已经部署完毕。

nohup参考资料奉上:blog.csdn.net/liuyanfeier…
另外,再奉上几个Linux常用命令
- netstat -anp|grep 80 查看某个端口是否被占用
- kill -9 pid 如果被占用可以kill掉这个端口(pid 是端口pid)
- rz –be 命令 上传数据到远程
- firewall-cmd –list-ports 查看已经开放的端口
- systemctl status firewalld 查看firewalld状态
- systemctl start firewalld 开启防火墙,没有任何提示即开启成功
- vim 命令使用,i//输入模式,输入完成之后按Esc退出输入模式并切换到命令模式,:wq保存并退出vi程序
- rm -rf fileName 递归删除一个文件夹
此外,推荐两个辅助软件xftp和SecureCRT。