即时通讯系统

一个即时通讯系统: IM

技术栈: Gin + Websocket + MongoDB

扩展安装

1
2
3
4
5
go get -u github.com/gin-gonic/gin
go get github.com/gorilla/websocket
go get go.mongodb.org/mongo-driver/mongo
go get -u github.com/golang-jwt/jwt/v5
go get github.com/satori/go.uuid

数据库安装&&启动

1
2
3
4
5
6
7
8
9
10
11
12
sudo docker pull mongo

# 启动
sudo docker run --restart=always --name mongo \
-p 27017:27017 \
-e TZ=Asia/Shanghai \
-v /data/mongo/data:/data/db \
-v /data/mongo/log:/data/log \
--privileged=true \
-e MONGO_INITDB_ROOT_USERNAME=mongo \
-e MONGO_INITDB_ROOT_PASSWORD=mongo \
-d mongo

数据库用法,新建集合


集合列表

用户集合

1
2
3
4
5
6
7
8
9
10
{
"account":"账号",
"password":"密码",
"nickname":"昵称",
"sex" : 1, // 0-未知 1-男 2-女
"email": "邮箱",
"avatar":"头像",
"created_at": 1, // 创建时间
"updated_at": 1, // 更新时间
}

消息集合

1
2
3
4
5
6
7
{
"user_identity": "用户的唯一标识",
"room_identity": "房间的唯一标识",
"data": "发送的数据",
"created_at": 1, // 创建时间
"updated_at": 1, // 更新时间
}

房间集合

1
2
3
4
5
6
7
8
{
"number":"房间号",
"name":"房间名称",
"info":"房间简介",
"user_identity": "房间创建者的唯一标识",
"created_at": 1, // 房间的创建时间
"updated_at": 1, // 房间的更新时间
}

用户房间关联集合

1
2
3
4
5
6
7
{
"user_identity": "用户的唯一标识",
"room_identity": "房间的唯一标识",
"message_identity": "消息的唯一标识",
"created_at": 1, // 创建时间
"updated_at": 1, // 更新时间
}

docker安装并且使用redis

1
2
3
4
5
6
7
# 拉取镜像
docker pull redis

## 创建目录
mkdir -p /home/redis/conf
## 创建文件
touch /home/redis/conf/redis.conf

启动容器

1
2
3
4
5

docker run --name redis -p 6379:6379 \
-v /home/redis/data:/data \
-v /home/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

进入容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
### 通过 Docker 命令进入 Redis 容器内部
docker exec -it redis /bin/bash
docker exec -it redis bash
### 进入 Redis 控制台
redis-cli
### 添加一个变量为 key 为 name , value 为 bella 的内容
> set name bella
### 查看 key 为 name 的 value 值
> get name
### 或者也可以直接通过Docker Redis 命令进入Redis控制台 (上面两个命令的结合)
docker exec -it redis redis-cli


## 通过密码进入Redis控制台
redis-cli -h 127.0.0.1 -p 6379 -a 123456