GoChat 项目初始化和环境搭建
🪴 写在前面
整个项目包含前端、后端的代码编写和数据库、消息队列等中间件的配置。这里主要记录前后端项目初始化和环境搭建的过程。
💐 参考资料
- Gin:Gin是一个用Go语言编写的Web框架,具有高性能和低内存占用。
- Gorm:Gorm是一个Go语言编写的ORM库,支持MySQL、PostgreSQL、SQLite等数据库。
- Docker:Docker是一个开源的应用容器引擎,可以轻松打包应用和依赖包。
- Redis:Redis是一个开源的内存数据库,支持多种数据结构。
- Kafka:Kafka是一个分布式流处理平台,可以处理大量的实时数据。
- WebSocket:WebSocket是一种网络通信协议,可以实现客户端和服务器之间的全双工通信。
🌿 后端
后端使用Gin框架作为Web框架,Gorm作为ORM框架,Kafka作为消息队列,MySQL作为数据库,Redis作为缓存数据库, WebSocket作为即时通信的协议。另外由于服务器的资源限制,开发是在我本地完成的,后续会将后端编译为二进制文件, 放在服务器上运行。
1. 初始化一个Golang项目
mkdir gochat-record
go mod init gochat-record
2. 安装Gin框架,并在gochat项目中引入Gin,参考Gin文档
go get -u github.com/gin-gonic/gin
拷贝一个模板main文件到gochat项目中,其中就包含了导入net/http的代码。
curl https://raw.githubusercontent.com/gin-gonic/examples/master/basic/main.go > main.go
3. 安装Gorm框架,参考Gorm文档
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
4. 安装kafka-go,用于后端连接Kafka消息队列
go get -u github.com/segmentio/kafka-go
5. 安装Redis驱动
go get -u github.com/go-redis/redis/v8
6. 安装WebSocket库
go get -u github.com/gorilla/websocket
7. 安装日志库 logrus go标准库的log不太好用。logrus是一个比较好用的日志库,代码随想录是自己实现了一个日志库。这里我感觉logrus用起来更方便。
go get -u github.com/sirupsen/logrus
8. 导入前面安装所有的库 在步骤3中创建的main.go文件中导入所有的库。
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"github.com/segmentio/kafka-go"
"github.com/go-redis/redis/v8"
"github.com/gorilla/websocket"
"github.com/sirupsen/logrus"
)
到这里基本的中间件需要使用到的库就安装完毕。
🌴 中间件
代码随想录是通过直接安装软件的形式来运行中间件的。这里我考虑使用Docker加docker-compose来运行中间件, 这样可以方便快速部署,也方便环境的迁移。注意这些中间件是在服务器上安装的。
1. 安装Docker和Docker Compose,参考Docker官方文档和阿里云docker安装文档
#更新包管理工具
sudo apt-get update
#添加Docker软件包源
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#安装Docker社区版本,容器运行时containerd.io,以及Docker构建和Compose插件
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#启动Docker
sudo systemctl start docker
#设置Docker守护进程在系统启动时自动启动
sudo systemctl enable docker
2. 拉取MySQL、Redis、Kafka、Apache的镜像 首先要配置仓库为阿里云的镜像,这样拉取镜像的速度会快很多。阿里云可以免费申请一个镜像加速器。
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的阿里云镜像加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
然后我们拉取MySQL、Redis、Kafka、Apache、Coturn的镜像。
docker pull mysql:5.7
docker pull redis:6.2
docker pull wurstmeister/kafka
ocker pull httpd:latest
docker pull coturn/coturn
3. 编写docker-compose.yaml配置文件 在后端gochat项目的根目录下创建一个docker-compose.yaml文件,用于配置中间件的启动。暂时这么配置,后续会根据实际情况修改。apache和coturn不知道会不会用到。
version: '3'
services:
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
redis:
image: redis:6.2
ports:
- "6379:6379"
volumes:
- redis_data:/data
kafka:
image: wurstmeister/kafka:latest
ports:
- "9092:9092"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
apache:
image: httpd:latest
ports:
- "80:80"
volumes:
- ./public-html:/usr/local/apache2/htdocs/
coturn:
image: coturn/coturn:latest
ports:
- "3478:3478"
- "5349:5349"
volumes:
- coturn_data:/etc/coturn
volumes:
mysql_data:
redis_data:
coturn_data:
🌱 前端
前端使用Vue.js作为前端框架,ElementUI作为UI组件库,Node.js作为前端的运行环境。同样的我们在本地搭建一个前端项目。 参考Vue.js文档先把Vue.js的环境搭建起来。
- 创建一个Vue.js项目
npm create vue@latest
目前主要需要把后端的接口支持起来。所以前端暂时不管。
🌲 最后
新建两个GitHub仓库,分别用于存放前端和后端的代码。