总结使用Golang开发服务端时,使用的基础的工具和部署方式。用于思考不足并优化,提升编码效率。 总体上采用MVCS的软件模式,如下图:
从图中可以看出,MVCS是从MVC进化而来,相比于MVC,增加了Service层。把业务逻辑从Controller层中抽离出来,这样做的好处在于,项目日益庞大之后,将某些功能独立出来。
Golang工具 #
“gvt” 依赖管理工具 “httprouter” 路由及中间件配置 “schema” 解析请求参数到结构体 “beego/validation” 结构体校验工具 “github.com/go-redis/redis” redis操作库 “github.com/go-sql-driver/mysql” Mysql Driver
文件结构 #
--Golang Project
|-sh # shell脚本,包括数据库脚本
|-config # 配置文件
|-logs # 日志文件
|-vendor # 项目源码及依赖
| |-github.com #
| |-mainfest # gvt 依赖管理文件
| |-app
| |-utils
| |-controllers
| |-models
| |-route
| |-services
|-Dockerfile # docker构建镜像配置文件
|-docker-compose.yml # docker-compose.yml文件
`-entry.go # web服务入口文件
部署方式 #
采用docker来部署应用。分别编写Dockerfile和docker-composer.yml文件,实例如下:
Dockerfile #
####
# build
####
FROM golang:1.9-alpine AS build
WORKDIR /go/src/web-server
COPY ./entry.go ./
COPY ./vendor ./vendor
RUN CGO_ENABLED=0 GOOS=linux ARCH=amd64 go build -o web-server entry.go
####
# deploy
####
FROM alpine
WORKDIR /usr/src/web-server
COPY --from=build /go/src/web-server/web-server ./
COPY ./config ./
RUN mkdir ./logs
EXPOSE 9090
# CMD ["./web-server", "--conf ./config/config.json"]
打包镜像的方法如下:
docker build -t web-server:release . -f Dockerfile
docker-compose.yml配置 #
version: "2"
services:
web:
image: web-server:release
container_name: ${SERVER_NAME}
links:
- postgres:postgres
volumes:
- ./logs:/usr/src/web-server/logs
ports:
- 9090:9090
postgres:
image: postgres:9.4
container_name: postgres
volumes:
- ./postgresql:/var/lib/postgresql/data
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: ${USER_PWD}
POSTGRES_USER: ${USER}
POSTGRES_DB: ${$DB_NAME}
简单解释:
links:采用容器内联的方式来通信,如此便可以在web-server
容器中,访问HOST=postgres来访问postgresql数据库
volumes:挂载宿主机上文件或者文件夹到容器内,以便完成数据持久化
数据库选择 #
no Sql
选用Mongo,Redis(缓存系统)
Sql
选用Postgre或者MySql