云服务器Linux安装Nodejs,并实现连接数据库且公网访问

如果Linux里还没安装mysql数据库,可以参考这个链接:Linux安装配置mysql数据库

Linux版本:Linux CentOS7

目录

1、wegt 安装Nodejs

2、安装mysql数据库驱动

 3、创建脚本并测试连接

4 公网访问

4.1 &命令后台执行

4.2 nohup命令的引入

4.3 pm2的引入

4.4 forever的引入

5、开机自启动


1、wegt 安装Nodejs

下载安装包

wget https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz

 解压

tar -xvf node-v12.16.3-linux-x64.tar.xz
#移动到/usr/local,并重命名为node,方便
mv node-v12.16.3-linux-x64 /usr/local/node

由于node文件夹的 bin 目录底下包含了 node、npm 等命令,我们可以修改linux系统的环境变量(profile)来设置直接运行命令

打开文件

vi /etc/profile

 在文件的最后面添加下面内容(添加环境变量)

export PATH=$PATH:/usr/local/node/bin

保存,并更新文件

source /etc/profile

 然后判断是否成功

node -v
npm -v

 

 

2、安装mysql数据库驱动

在安装驱动前先说明一下:在执行下面的命令后,会在当前目录生成一个node_modules文件夹,而我们之后所创建js脚本,都必须和这个文件夹处在同一个目录下,或者在 这个node_modules目录的同级目录的子目录里,否则运行node 脚本.js就会报cannot find module 'mysql'错误,所以在安装的时候自己先选择好位置。此外,如果在其他目录要想执行脚本,那么就得重新再继续执行下面的命令,才能运行脚本,如果只是单纯的移动node_modules文件,也会出错的。

附:如果不需要数据库连接,就没有上面的限制,也就没必要安装数据库驱动了)

 如图所示,mysqlTest.js的位置可以是在下面所写的位置【字有点丑ㄟ( ▔, ▔ )ㄏ 】

 

 好了,了解了之后就可以安装驱动了

npm install mysql

 成功后显示如下:

更新:如果下载后的输出不太一样没关系,你先看看能不能连接再说,我后面回滚重新尝试发现输出有一些提示警告,但都没什么问题。

 3、创建脚本并测试连接

3.1 在当前目录创建脚本

vi mysqlTest.js

3.2 在文件添加一下内容(帐号、密码、数据库、sql语句根据自己地进行修改)

var http = require('http');
var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',        //帐号
  password : '123456',    //密码
  database : 'user'    //数据库
});
 
connection.connect();//连接
var name="";
//sql语句根据自己需要进行修改
connection.query('SELECT * FROM student', function (error, results, fields) {    
  if (error) throw error;    //错误则抛出异常
//这个是在命令行里显示的
  console.log('The result is: ', results[0].name);
  name=results[0].name;
});
//将内容显示到浏览器上
http.createServer(function (request, response) {
        // 发送 HTTP 头部 
        // HTTP 状态值: 200 : OK
        // 内容类型: text/plain
        response.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
        // 发送响应数据
        response.end("这是通过Nodejs访问数据库得到的\n这是我的名字:"+name);
}).listen(8888);    //端口号

3.3 执行文件

node mysqlTest.js

终端显示如下 :

 

在浏览器输入公网ip:8888,显示如下: 

3.4 结束命令

按ctrl+c结束此次执行 

4 公网访问

4.1 &命令后台执行

 但是这个一旦关闭终端或者与服务器失去连接时就会结束进程,所以只能被pass掉了。

在原来的命令后面加上&

node mysqlTest.js &

 这样就可以将命令放在后台继续执行

4.2 nohup命令的引入

更新:这个命令虽然比之上一个稍微好一点,在关闭终端后可以访问,但好像持续时间不长,我前一天才刚弄好,关闭终端,测试后发现可以,以为成功了,第二天再来测试,发现又崩了,无奈又被pass掉。下面的是我关于nohup命令的测试过程,需要的可以看一下。

由于上面的命令不可行,我就继续查找资料,看到了nohup命令,看清楚,是nohup,而不是nohub,我就是一直看错了然后导致命令找不到。

如果发现命令找不到,那就先安装工具

yum install coreutils

 然后通过命令查看是否有nohup

#两者皆可
whereis nohup
which nohup

 nohup得用法就是

nohup command &

 如果command命令里没有将输出重定向,那么系统会自己在当前目录自动生成一个nohup.out文件,然后重定向。

如果不想要保存输出消息,甚至不想输出提示,可以直接这样

nohup command 2>/dev/null &

/dev/null 文件相当于一个垃圾箱,所有不要的东西都可以扔到这里面去,他会自动清除掉。

2>/dev/null 表示将一些提示信息一起重定向到“垃圾箱”里 

 讲了这么多,下面的才是改进得命令

nohup node mysqlTest.js 2>/dev/null &
#然后按回车
#exit这一步一定要做,否则你关闭终端后还是会无法访问
exit

 按照上面的操作做完后,就算关闭终端也可以直接去浏览器进行访问公网ip:8888了

重新打开终端,想要查看刚才得进程得话

ps -ef | grep mysqlTest.js

 可以看到后台进程里那个node mysqlTest.js 命令还在执行

 

 如果想要关闭进程

#pid为刚才ps -ef | grep MySQLTest.js 后显示出来得第二个字段的数字,即root后面跟着的数字
kill pid号
#如上图所示,那么就应该执行
kill 31355

4.3 pm2的引入

经过上面两个失败,我又找到了另一个pm2的命令,我一个朋友就是用了这个命令,然后成功了,但是不知道为什么,我在下载的时候,一直出错,不知道什么原因,所以只好放弃这个方法。不过还是记录一下过程

 安装

npm install pm2

如果成功安装了的话,那么在/usr/local/node/bin里会出现pm2这个文件

如果按照我上面的操作做了的话

pm2 start mysqlTest.js

 然后应该就可以了

4.4 forever的引入

在下载forever过程中,我下载的比较慢(可能是网速问题吧)

 下载

npm install forever -g

 下载成功后显示如下:

在/usr/local/node/bin里面就有了forever这个文件

 使用forever启动js

forever start mysqlTest.js

r

 停止js文件命令

forever stop mysqlTest.js

查看启动情况

forever list

 

5、开机自启动

我的思路是写一个运行脚本,然后在/etc/init.d/目录下添加自启动服务

首先先创建一个文件forever.sh(名字自己定,我这里是放在/root/node/service目录下,可以放在其他位置,但是下面的forever服务脚本也需要相对应的改掉),添加文件内容为

#!/bin/bash
 
# 定义一些字符串变量,在shell中字符串可以不需要加"",所以这里直接写路径【一定要绝对路径,避免路径问题执行出错】
PATH=/usr/local/node/bin
DEAMON=/root/node/mysqlTest.js
#下面的目录文件需要自己创建,或者自己可以根据自己需要更改
log_path=/root/node/logs
out_file=/root/node/logs/out_file_test.log
err_file=/root/node/logs/err_file_test.log
 
 
# 这里的$1 是当前shell文件执行命令传入的参数,比如执行【./nodej_test start】命令,自动会执行start匹配的命令
# 我这里没有使用pid进程管理,直接开启某个执行文件或停止所有即可【根据自己的需求来】
case "$1" in
    start)
        forever start -p $log_path -o $out_file $DEAMON
        ;;
    stopall)
        forever stopall
        ;;
    restartall)
        forever restartall
        ;;
    list)
        forever list
        ;;
    *)
        echo "Usage: /etc.init.d/node {start|stop|restart|reload|stopall|restartall|list}"
        exit 1
        ;;
esac
exit 0

 然后先运行一下脚本看看是否正确(这里是要加参数的,start/stopall...)

sh forever.sh start

 看看是否能访问页面,或者输出和下面差不多,就表示脚本是ok的

 接下来到/etc/init.d目录下创建一个系统服务,我这里命名为forever

vi /etc/init.d/forever

 添加下面内容

#!/bin/bash
# chkconfig: 354 88 08
# description: Forever for Node.js
# 上面这段解释代码必须要,否则你添加到chkconfig会提示错误:service X does not support chkconfig
/bin/bash /root/node/service/forever.sh start

 然后就修改文件权限,将这个文件添加到系统中开机启动

# 第一步:下面755这一步是别的文章介绍的,不知道用不用,不过加上也无所谓,所以我也一并执行了
chmod a+x forever
chmod 755 /etc/init.d/forever
 
# 第二步:把forever添加到系统服务器上开机启动
chkconfig --add /etc/init.d/forever
 
# 第三步:启动,开启forever服务
chkconfig forever on 
 
#第四步:查看服务
chkconfig --list

最后重启服务器测试一下,就没问题了!!!

参考链接:

                           安装nodejs: https://blog.csdn.net/LittleSeedling/article/details/105907364

                nodejs连接数据库: https://www.runoob.com/nodejs/nodejs-mysql.html

              linux-node后台启动: https://blog.csdn.net/qxianx/article/details/80671416

                forever开机自启动: https://blog.csdn.net/weixin_43343144/article/details/100030314

猜你喜欢

转载自blog.csdn.net/hmq1350167649/article/details/106716097