一.安装Docker
首先Centos必须是7及以上版本,查看版本命令:
cat /etc/redhat-release
安装gcc、工具相关
yum -y install gcc
yum -y install gcc-c++
yum install -y yum-utils
设置stable镜像库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
这里直接用阿里的镜像,毕竟官网的话老卡了
更新yum索引,然后安装Docker ce
yum makecache fast
yum -y install docker-ce docker-ce-cli containerd.io
启动Docker
systemctl start docker
一般都是这步会出问题,会出 Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details. 这样的问题
vim /etc/docker/daemon.json
直接进入编辑模式修改json文件,内容全部删除改成
{
"storage-driver": "devicemapper"
}
然后esc退出编辑模式,:wq保存退出
再次启动会发现成功
二.Docker容器部署mongoDB
简而言之mongodb是用于海量数据高并发读写,不能适应多表关联复杂查询以及事务的一致性,特点是对象型命令和存储
#拉取镜像
docker pull mongo:latest
#创建和启动容器
**docker run -d --restart=always -p 27017:27018--name mymongo -v /data/db:/data/db -d mongo --privileged=true
#进入容器
docker exec -it **mymongo** ****/bin/bash
#使用MongoDB客户端进行操作,6.0及以上
mongosh
#使用MongoDB客户端进行操作,6.0以下
mongo
show dbs #查询所有的数据库
#常用命令对比
# select * from User where name = 'zhangsan'
> db.User.find({name:"zhangsan"})
# select name, age from User where age = 21
> db.User.find({age:21}, {'name':1, 'age':1})
# select * from User order by age
> db.User.find().sort({age:1})
#在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
# select * from User skip 2 limit 3
> db.User.find().skip(0).limit(3)
#在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法来跳过指定数量的数据
# select * from User where age in (21, 26, 32)
> db.User.find({age:{$in:[21,26,32]}})
# select count(*) from User where age >20
> db.User.find({age:{$gt:20}}).count()
# select * from User where age = 21 or age = 28
> db.User.find({$or:[{age:21}, {age:28}]})
# update Userset age = 100, sex = 0 where name = 'user1'
> db.User.update({name:"zhangsan"}, {$set:{age:100, sex:0}})
> db.User.remove(id)
//移除对应id的行
> db.User.remove({})
//移除所有
以上资料来源于尚医通的课件
聚合表达式:
| 表达式**** | 描述**** | 实例**** |
|---|---|---|
| $sum | 计算总和。 | db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {likes"}}}]) |
| $avg | 计算平均值 | db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {likes"}}}]) |
| $min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {likes"}}}]) |
| $max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{group : {_id : "by_user", num_tutorial : {likes"}}}]) |
| $push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{group : {_id : "by_user", url : {url"}}}]) |
| $addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{group : {_id : "by_user", url : {url"}}}]) |
| $first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{group : {_id : "by_user", first_url : {url"}}}]) |
| $last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{group : {_id : "by_user", last_url : {url"}}}]) |
三.idea集成mongodb
在application.properties文件添加配置
| spring.data.mongodb.uri=mongodb://47.93.118.241:27017/test |
|---|
其中地址为你在linux中的ipv4地址,要注意防火墙的关闭和27017端口的开启
pom.xml依赖:
<**dependencies**>
<**dependency**>
<**groupId**>org.springframework.boot</**groupId**>
<**artifactId**>spring-boot-starter-data-mongodb</**artifactId**>
</**dependency**>
<**dependency**>
<**groupId**>org.springframework.boot</**groupId**>
<**artifactId**>spring-boot-starter-web</**artifactId**>
</**dependency**>
<**dependency**>
<**groupId**>org.projectlombok</**groupId**>
<**artifactId**>lombok</**artifactId**>
</**dependency**>
<**dependency**>
<**groupId**>joda-time</**groupId**>
<**artifactId**>joda-time</**artifactId**>
<**version**>2.10.1</**version**>
</**dependency**>
<**dependency**>
<**groupId**>org.springframework.boot</**groupId**>
<**artifactId**>spring-boot-starter-test</**artifactId**>
<**scope**>test</**scope**>
<**exclusions**>
<**exclusion**>
<**groupId**>org.junit.vintage</**groupId**>
<**artifactId**>junit-vintage-engine</**artifactId**>
</**exclusion**>
</**exclusions**>
</**dependency**>
</**dependencies**>
常用方法:
mongoTemplate.findAll(User.class): 查询User文档的全部数据
mongoTemplate.findById(<id>, User.class): 查询User文档id为id的数据
mongoTemplate.find(query, User.class);: 根据query内的查询条件查询
mongoTemplate.upsert(query, update, User.class): 修改
mongoTemplate.remove(query, User.class): 删除
mongoTemplate.insert(User): 新增
引用时
@Autowired
private MongoTemplate mongoTemplate;
直接调用即可 也可以定义接口去生成注解调用
@Repository
public interface UserRepository extends MongoRepository<User, String> {
}
#调用时:
@Autowired
private UserRepository userRepository;
四.nginx配置
直接添加server,config里的
server {
listen 9001;
server_name localhost;
location ~ /hosp/ {
proxy_pass http://localhost:8201;
}
location ~ /cmn/ {
proxy_pass http://localhost:8202;
}
}
调整/config/dev.env.js中的BASE_API
BASE_API: 'http://localhost:9001'
这样访问http://localhost:9001可以进入页面,不同的location对应不同的功能模块,可以解决想要使用不同端口访问的问题
也可以设置轮询和权重去分配不同性能服务器的压力
upstream backend {
server a weight=6;
server b weight=3;
server c weight=1;
}
会在a,b,c进行轮询,权重以此是6:3:1,a,b,c是服务器ip