由于写得有点长,这是上篇链接:在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
注意:以上是进入到文件所在目录的情况,不然需要输入路径前缀
验证是否收到,传输成功了。一个一个传有点傻(好在文件不多),当时忘了可以压缩一下传到服务器再解压 解压命令:
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 collections
或db.集合名.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你放代码的目录,比如我是~/code
,git clone 你上传到码云或者GitHub上的项目的地址
就可以了。这边后面更新pull push
什么的就不赘述了。
三、设置云服务器安全组规则
具体配置及步骤可以参考官方指南:腾讯云-云服务器-操作指南-安全组应用案例
四、使用pm2让nodeJS项目永久运行在服务器上
- 首先全局安装pm2
npm i pm2 -g
- 再查看项目
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
,控制台会给出所有指令及对应说明。