在CentOS 7(腾讯云)部署node+mongodb项目全过程(下)

由于写得有点长,这是上篇链接:在CentOS 7(腾讯云)部署node+mongodb服务器全过程(上)

一、新建数据库并导入我们开发环境(自己电脑上)的全部数据

上一篇我们已经把mongoDB安装运行起来了,现在需要在云服务器新建项目连接用到的数据库,并导入我们的数据。注意:这里预设我们已经建好了数据库animal、animal的管理用户apple 和 密码123456。
(1)导出集合(mongoexport指令)

# 导出为 json 文件
mongoexport -d animal -c artworks -u aizawasayo -p 123456 -o ~/MongoDB_data/artworks.json

# 可以直接cd到当前要导出的目录下,然后-o 文件名.json
cd MongoDB_data
# aizawasayo@VivdeMBP ~/MongoDB_data
mongoexport -d animal -c clothings -u aizawasayo -p 123456 -o clothings.json

# 导出成功信息
2020-11-27T10:22:02.922+0800    connected to: mongodb://localhost/
2020-11-27T10:22:02.972+0800    exported 1010 records

常用参数名及缩写对应

主机名:--host | -h 默认localhost,也可以是ip或域名
端口名:--port 默认27017
数据库名:--db | -d
集合名:--collection | -c
如果需要访问权限:
权限用户名:--username | -u
权限用户密码:--password|-p
指定导出的存放路径和文件名 --out|-o
指定导出的字段:--fields|-f
主从数据库名: authenticationDatabase
导出格式:--type 默认值是json

# 使用完整参数名的官方示例
mongoexport --host=mongodb1.example.net --port=27017 --username=someUser --authenticationDatabase=admin --collection=contacts --db=marketing --out=mdb1-examplenet.json

如果指定csv格式,则还必须使用--fields--fieldFile选项来声明要从集合中导出的字段。
比如我们要导出集合中的name和address字段

用fields指定这些字段,用,分隔:--fields=name,address

# 官方示例
mongoexport --db=users --collection=contacts --type=csv --fields=name,address --out=/opt/backups/contacts.csv

或者编辑一个文件fields.txt
内容如下:

name
address

然后导出时用fieldFile指定这个txt文件路径:--fieldFile=fields.txt

(2)导入集合(mongoimport指令)
当然需要先把我们导出的数据文件传到云服务器:
CentOS一般都已自带了openssh-clients,这个包帮助支持ssh连接,如果没有可以用yum安装一下:yum install openssh-clients

之后我们就可以在本地终端上传了:
示例scp /local/file user@remote:/file
参数对照
[本地文件名][用户名]@[公网ip地址:][服务器中的文件目录]

如果服务器用的不是默认端口:scp -P 1021 dist.zip [email protected]:/root/code 注意P要大写

如果要从服务器下载到本地,把本地和服务器参数的位置反一反即可。在本地终端scp user@remote:/file /local/code
scp -P 1021 [email protected]:/etc/nginx/nginx.conf /Users/xxx/code

注意:以上是进入到文件所在目录的情况,不然需要输入路径前缀

Mac终端上传截图

验证是否收到,传输成功了。一个一个传有点傻(好在文件不多),当时忘了可以压缩一下传到服务器再解压 解压命令:unzip xxx.zip

服务器截图

现在就能把数据导入我们服务器上的数据库了,参数方面都和导出mongoexport操作差不多,file就是要导入的集合文件的路径

# 官方示例
mongoimport --host=mongodb1.example.net --port=27016 --username=user --collection=contacts --db=marketing --file=/opt/backups/mdb1-examplenet.json

为了安全数据库登录我们都开启了验证,如果忘了数据库的账号密码可以用mongo shelldb.system.users.find().pretty()查询下,我图方便导入都是用超级管理员验证。

# 需要验证
mongoimport --port 27016 -u root -p root -c islanders -d animal --authenticationDatabase admin --file /root/data/islanders.json

另外我自己比较喜欢用简写的参数,方便好记。参数后面的=号也可以省略为空格,有=呢逻辑比较清晰,看个人习惯吧。

导入成功了

不放心可以用show collectionsdb.集合名.find()查下对不对

二、利用git结合码云或者GitHub把我们的项目放在云服务器

也可以通过FileZilla等连接服务器上传文件的软件,我自己是本地上传到码云再clone和pull,用软件上传的方式还没研究使用过。

首先在远程机上安装git,不要求最新版的话用yum安装就可以,不影响使用
yum install git
先在远程机生成SSH公钥,然后cat ~/.ssh/id_rsa.pub查看并复制(以ssh-rsa 开头,以账号的注册邮箱结尾的)。将它添加到码云,添加地址: https://gitee.com/profile/sshkeys
然后直接在远程机cd你放代码的目录,比如我是~/codegit clone 你上传到码云或者GitHub上的项目的地址就可以了。这边后面更新pull push什么的就不赘述了。

三、设置云服务器安全组规则


具体配置及步骤可以参考官方指南:腾讯云-云服务器-操作指南-安全组应用案例

四、使用pm2让nodeJS项目永久运行在服务器上

  1. 首先全局安装pm2
    npm i pm2 -g
  2. 再查看项目package.json文件里的运行脚本
"scripts": {
    "start": "npm run prod",
    "server": "babel-node ./src/bin/www",
    "server:prod": "node ./dist/bin/www",
    "dev": "NODE_ENV=development npm-run-all server",
    "clean": "rimraf dist",
    "build": "babel ./src --out-dir dist",
    "prod": "NODE_ENV=production npm-run-all clean build server:prod",
    "watch": "nodemon"
},

你可以直接运行一个node脚本,比如pm2 start ./dist/bin/www
也可以通过package.json自己定义的scripts脚本里的node指令来执行:
比如本地是通过npm run dev运行的,就可以写成:pm2 start npm -- run dev推荐,此乃万能方法

运行成功的界面

一些常用指令:

# 查看所用已启动项目:
pm2 list
# 重启:
pm2 restart XXX
# 停止:
pm2 stop XXX
# 删除
pm2 delete XXX

为了区分托管的项目,也便于我们记忆和执行操作,还可以用--name给项目自定义别名,如:
pm2 start npm --name xxx -- run start 这个xxx是你自定义的名字

运行中的项目拥有了姓名

这样运行起来就能准确地知道这是哪个项目了。

之后管理这个项目的运行就可以很方便
启动项目 pm2 start animal_api
停止项目 pm2 stop animal_api
其他还有很多指令,但一般部署服务这几个也够用了。可以在命令行工具输入:pm2,控制台会给出所有指令及对应说明。

现在就可以愉快地通过公网地址加上我们项目的端口号访问啦!

你可能感兴趣的:(在CentOS 7(腾讯云)部署node+mongodb项目全过程(下))