linux centos 服务器 配置 node.js

linux centos 服务器 配置 node.js ,目标人群就是和我一样毫无基础的小白。

准备环境

  • 买了国内某云服务器;

  • 安装PuTTY,输入服务器唯一物理ip后,登录到服务器;

  • 使用linux安装了宝塔面板,以及一堆推荐服务。

注意:安装完成后记得保留账户密码

开始装 node.js

注意:“ $ ”符意味着这句是linux命令,没有的是命令打印内容

注意:查看自己 linux 版本,例如64位下载64位的node

安装方法很多,我们这里找省时省力又简单的:yum? => wget => node => 解压

测试有没有 wget (一款 Linux 服务器便捷远程下载安装的插件 )

1
2
3
4
5
6
$ wget -h

// 稀里哗啦一大堆就是安装了

// 只有这一句就是没装
-bash: wget: command not found

没装的话也很简单,yum 安装一下

1
$ yum install -y wget

接着去找合你心意的 node.js ,官网

1
$ wget

查看一下文件名,接着按步骤解压,

1
2
3
4
5
6
7
8
9
10
11
12
13
$ ls
node-v10.15.0-linux-x64.tar.xz

$ xz -d node-v10.15.0-linux-x64.tar.xz

$ ls
node-v10.15.0-linux-x64.tar

$ tar -xf node-v10.15.0-linux-x64.tar

$ ls

node-v10.15.0-linux-x64 node-v10.15.0-linux-x64.tar

接着建立全局软连接,注意换成你自己的

1
2
3
4
5
6
7
8
9
10
$ ln -s /node/node-v10.15.0-linux-x64/bin/node /usr/local/bin/node
$ ln -s /node/node-v10.15.0-linux-x64/bin/npm /usr/local/bin/npm

// 然后测试一下

$ node -v
v10.15.0

$ npm -v
6.4.1

继续安装 express

1
2
3
4
$ npm install express -gd // 全局安装express 
$ npm install express-generator -g // 全局安装experss生成器
$ ln -s /node/node-v8.9.3-linux-x64/bin/express /usr/local/bin/express // 建立全局软连接
$ express --version // 查看是否安装成功

开个服务器做测试

端口,安全

1
2
3
4
cd node                     // 打开工程目录
express server_01 // 生成项目模板
cd server_01 && npm install // 打开目录并安装依赖
npm start // 开始运行程序

然后本地访问 ...:3000 ,为啥404了?

百思不得姐,

突然想到现在已经安装了宝塔面板,宝塔帮忙安装了Nginx,是不是产生冲突了?另一方面可以用宝塔测试3000端口啊,

于是,建了一个3000端口的php 站点,测试外网访问服务器的3000端口是可以拿到站点信息的,

删除刚测试用的站点,重新登录linux,运行node服务器,这次成功打印出 express 字眼。

于是想到:会不会是宝塔建站帮我做了一些配置呢?

查看宝塔安全管理,果然,3000 端口刚刚被加入可访问序列。

守护进程

运行起服务器,利用宝塔生成一个 ftp 账户用来管理 node 服务器的文件,关掉 PuTTy ,发现服务无法访问了。

想到也许和 window 系统跑 node 一样,开着 cmd 程序运行,不开就停止服务,

查资料后,找到关键字:“守护进程”

node.js 守护进程方法很多,应当按使用场合选择技术:

  1. supervisor : 开发环境使用,非常适合调试。
  2. forever : 管理多个站点,每个站点访问量不大,不需要监控
  3. pm2 : 网站访问量比较大,需要完整的监控界面
  4. nohup : 最简单的办法 nohup node app.js &

这里选择了 forever

跟着教程 npm install forever -g ,安装完后发现:

1
2
forever --help
-bash: forever: command not found

联想到之前 express 全局安装后也是手动安装的软连接,也许是某些配置没有配置好?PATH?

再次使用 ln -s 生成软连接:

1
ln -s 你的node目录+/lib/node_modules/forever/bin/forever /usr/local/bin

之后就可以全局使用forever了。

打开之前建立的server_01,执行:

1
forever start ./bin/www // express模板跑服务器

然后关掉PuTTY也可以访问我们的服务了

常用 forever 命令:

  • forever start test.js|[pid] // 后台开启服务。
  • forever stop test.js|[pid] // 停止后台服务。
  • forever restart test.js|[pid] // 重启后台服务。
  • forever list test.js|[pid] // 打印现有服务。

配置 mysql

之前宝塔面板已经帮我们把 mysql 安装好了,然后我们自己安装 node.js 的 mysql 管理:

1
npm install mysql

想要操作数据库先要有库可用,所以我们先用之前安装好的phpMyAdmin新建数据库,做测试所以名字用了test。

并且建立一张用户表,三个参数,id,user_name,user_password,并输入一条初始数据

然后尝试在我们的node程序中调用数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var mysql = require('mysql'); // 引入

var connection = mysql.createConnection({ // 配置链接信息
host: 'localhost', // 数据库地址,一般在本地
user: '...', // 用户名
password: '...', // 密码
database: '...' // 表名
});
/*
具体使用时建议封装逻辑,
先建立链接,query请求数据,
请求完毕后关闭链接。
*/
connection.connect();
connection.query('SELECT * FROM user', (err, rows, fields) => {
if (err) throw err;
console.log(rows);
});
connection.end();

简单做一个测试接口看看能否获取数据库信息:

1
2
3
4
5
6
7
8
9
10
router.get('/getUser', (req, res, next) => {
var connection = mysql.createConnection(mysqlConfig); // 注意每次查询数据库都需要重新生成链接对象。
connection.connect();
connection.query('SELECT * FROM user', (err, rows, fields) => {
if (err) throw err;
console.log(rows);
connection.end();
res.send(rows)
});
})

浏览器访问服务器ip:3000/getUser,成功打印出信息。 :)

linux 常用指令

  • 鼠标滑动选中目录名,右键鼠标就可以复制了。
  • cd dirName 打开文件夹,cd .. 打开上级文件夹
  • ls 查看当前文件夹内容
  • rm 文件目录:删除对应文件目录;rm -rf 文件目录:删除对应文件目录的文件夹,-r递归删除,-f强行删除,不做提示
  • wget 远程路径:下载对应路径文件到当前文件夹。
  • xz -d **.tar.xz :解压xz后缀的压缩文件
  • tar -xv -f **.tar : 解压tar后缀的压缩文件。
  • ln -s /path_to/bin/node /usr/local/bin/node : 建立软连接,使之可以全局运行,path_to是实际文件夹路径
  • echo :打印某些东西,比如 echo $PATH 打印环境变量
  • find 文件路径: 查找文件。
    • -name : 根据文件名查找
    • -iname : 根据文件名查找文件,忽略大小写
    • -path : 根据路径查找文件
    • -ipath : 根据路劲查找文件,忽略大小写
    • -amin <分钟> : 过去N分钟内访问的文件
    • -atime <天数> : 过去N天内访问的文件
    • -cmin <分钟> :过去N分钟内修改过的文件
    • -ctime <天数> : 过去N天内修改过的文件
    • -anewer <参照文件> : 比参照文件更晚被读取过的文件
  • cat /etc/redhat-release : 查看系统版本
  • df : 查看磁盘占用程度
  • du -sh * : 查看当前文件夹下各文件及文件夹所占内存
  • mv 要复制的目录 复制到的目录: 移动文件夹时要加 -r 递归复制所有文件
  • cp 要复制的目录 复制到的目录: 复制文件夹时要加 -r 递归复制所有文件