这是一篇记录文章,记录一些坑点
- centos7.6
- mongodb4.2
一、winscp连接服务器异常:Disconnected:No supported authentication methods available
参考自 laviniatu
服务器上的SSH配置 PasswordAuthentication
出现了问题,关闭或者注释后,重启服务器即可。
二、linux服务器安装nodejs
参考自一爿简书
三、linux服务器安装cnpm
参考自mnixu
四、centos6/7安装mongodb
参考自mongodb官方文档
这里我使用了压缩包安装,因为没有使用 yum package manager
安装,所以没有办法详细说说两者的安装难易程度,初学者无论何种安装方式都会觉得坑多的。好了,下面进入正题(为了保障顺利安装,以下均需要 sudo
管理员权限)。
1. 下载 MongoDB .tgz tarball
- 这里我以4.2版本mongodb作为示例
- centos系统下载
RHEL
开头的系统,centos几就选RHEL
几即可。(查询centos系统版本命令行内键入:cat /etc/redhat-release
) - 如果服务器下载的慢了,可以先下载到本地,再使用winScp软件推送到服务器上
- 截图如下:
- 命令行:
通常是直接下载到了 root目录下$ wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.2/x86_64/RPMS/mongodb-org-server-4.2.1-1.el7.x86_64.rpm
2. 解压缩
$ tar -zxvf mongodb-linux-*-4.2.1.tgz
如果下载下来没动地方,应该解压缩到了 root/mongodb-linux-*-4.2.1 文件夹下
3. 迁移
因为这个文件夹名太长了,也不利于后面的配置,所以我们给他改个名:
$ mv mongodb-linux-*-4.2.1 mongodb
4. 添加环境变量
- 既可以直接使用
mv
迁移也可以使用ln
创建索引,这里我使用的是:
$ ln -s /path/to/the/mongodb-directory/bin/* /usr/local/bin/
5. 创建日志和数据库文件目录
$ mkdir -p /var/lib/mongo
创建数据库文件目录$ mkdir -p /var/log/mongodb
创建日志文件目录
6. 赋权限(首次创建)
$ chown root /var/lib/mongo # Or substitute another user
$ chown root /var/log/mongodb # Or substitute another user
7. 运行
$ mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
- –dbpath /var/lib/mongo 指定数据库文件
- –logpath /var/log/mongodb/mongod.log 指定日志文件
- –fork 以后台程序方式执行
- 成功截图:
8. 关闭
- 先查询使用 27017 端口的程序 PID:
$ netstat -tunlp
可以看到PID为 17491
- 接下来使用
$ kill [PID]
,也即$ kill 17491
,就可以了
9. 问题与解决
- 出现了问题不要怕,百度一下,还有个方法实在没辙的时候使用清空 **/var/lib/mongo** 和 **/var/log/mongodb** 两个目录再从第6步开始来一遍。
- 关闭 `SELinux` 会省很多事,但是是否关闭还需要你具体去了解一下 `SELinux` 再做判断,我是个人小项目建着玩,所以连带防火墙也一并关闭了。
10. 优化
-
启动,每次启动后面挂那么些参数是不是很烦,这个时候就可以去添加config文件,我看好多文档上来先创建一个config文件,百思不得其解,后来自己研究了一番确实创建config方便,但是那些博客一上来就创建config文件的写法对初学者非常不友好,这里我们循序渐进,来一起创建一下config文件。
-
文件路径,如果你的mongodb已经启动了,就是 /etc/mongod.conf 这个文件
-
下面展示一下我的mongod.conf:
```bash
# 日志目录
systemLog:
destination: file #这里必须设置为 file,下面的path才能起作用
path: /var/log/mongodb/mongod.logstorage: dbPath: /var/lib/mongo # 监听所有IP net: bindIp: 0.0.0.0 # 后台进程 processManagement: fork: true security: authorization: enabled # 为了远程连接数据库,必须开启这个功能 ```
-
上面使用了 yaml格式配置文件,学习这个配置文件格式可以看一看阮一峰大神的博客,这里就不过多讲述,就讲两个重点吧:注意大小写;使用空格缩进代表次级,多少个空格无所谓,不要使用tab。
- yaml格式config说明
- 优化之后我们的启动方式就简单多了:
$ mongod --config /etc/mongod.conf
- 或
$ mongod -f /etc/mongod.conf
(-f是–config的缩写)
五、 远程连接mongodb
1. 防火墙开放27017端口
$ iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27017 -j ACCEPT
- 我使用的腾讯云需要配置安全组策略以开启这个端口
2. 关闭SELinux
- 先看一下是否开启了,我的云服务器就没开启这一项,如果你的服务器开启了,就去百度一下如何关闭吧,不想关闭就老老实实去啃官方文档设置一下mongodb。
3. mongodb设置管理员,为了远程连接的时候使用用户名和密码登录
$ mongo # 不要管中间报的错
> db #显示当前数据库,默认为test
test
> use admin # 转换为admin数据库,这个是mongodb默认创建的数据库,用户存储数据库管理员数据
switched to db admin
# 如你所见,admin是数据库管理员名,admin888是密码,后面的role和db不需要修改,到此管理员账号就创建好了
# userAdminAnyDatabase:超级用户角色
# admin是一个管理用户的用户,它可以用来创建新用户,并为新创建的用户赋予对应角色
> db.createUser({ user: "admin", pwd: "admin888", roles: [{ role: "root", db: "admin" }] })
Successfully added user:......
> db.auth("admin", "admin888") # 验证一下,返回 1 就代表创建成功了
1
> ctrl + c # 退出mongo模式(可不退出,继续看下面的 4. 创建数据库用户)
4. 创建数据库用户
摘录自官方文档(使用谷歌翻译)mongodb内置用户角色
这里创建 admin 相当于管理数据库的用户,因为其是创建在 admin 默认数据库中的用户,要让这个用户具有某个数据库的管理权限,需要进行授权角色;或者新创建一个用户用于管理指定数据库,然后授权给他,这里我为了方便演示,直接使用了admin,不过我不太建议这样做。
> use test # 切换到test分支,在test分支创建一个新用户,并对这个用户赋角色readWrite
switched to db admin
> db.createUser({
user : 'testAdmin',
pwd : '000000',
roles : ['readWrite']
})
# 查看用户
> show users