# ginx **Repository Path**: swordcoder/ginx ## Basic Information - **Project Name**: ginx - **Description**: 基于Go语言,Gin框架实现的类Nginx的高性能代理服务器。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-03-24 - **Last Updated**: 2023-07-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: ginx ## README # 更新日志 ## 2022-04-30 21:25(最近更新) 1. 实现docker构建,新增build目录 ## 2022-04-22 22:36 1. 将创建server的代码从main.go中分离 2. 增加cmd特性,基于cobra(`github.com/spf13/cobra`) ## 2022-04-16 23:14 1. 支持业务日志输出到文件、kafka、elasticsearch多种模式 2. 业务设置与服务设置相分离,业务设置是ginx.*(\*可以为conf/yaml/json)的文件,服务设置是setting.yml # 简介 本项目主要使用Go语言进行编码,主要基于Gin框架,原生net/http库等进行开发;对知名高性能代理服务器开源软件nginx的功能和架构也进行了一些参考。 本项目目前考虑使用MIT协议,不排除未来更换协议的可能。 请勿将本项目使用于生产环境,本项目仅用于演示一些功能的实现方式和一个Go项目的组织方法。 # 开发 - 语言版本:Go 1.18 - 使用的开发工具:Goland 2021.2.4 ## 如何运行这个项目? 下载Goland,git clone 本项目后使用Goland打开。 如果您的网络到github之间存在连通性的问题,可以考虑为Goland设置 `GOPROXY=https://proxy.golang.com.cn,direct` 代理。 如果您需要在Windows下运行,请在Goland的Terminal中执行:`go env -w GOOS=windows` 后编译。 如果您需要在Linux下运行,请在Goland的Terminal中执行:`go env -w GOOS=linux` 后编译。 首先切换当前目录到项目根路径下。 之后: ```bash cd src ``` 编译请执行如下命令: ```bash go build -o ../bin/ginx ``` 编译并运行请在Goland中按下 `Shift+F10` ,如果没有修改过默认的快捷键的话。 ## 如何容器化这个项目? ### 编译 首先切换当前目录到项目根路径下。 之后执行: ```bash cd src go env -w GOOS=linux go build -o ../build/docker/ginx ``` 这样编译完成的二进制可执行程序就放在了build/docker目录下。 切换当前目录到build/docker目录下。 之后执行: ```bash docker build -t ginx:test . ``` 注意上述命令最后的点号 `.` 不可少。 执行 `docker images | grep ginx` 查看构建的镜像。 ### 运行 请准备一个目录,作为提供配置文件给ginx的挂载目录; 我们假定目录的绝对路径为 `/home/ginx` ,该目录下应提供 `ginx.yml` (或json等格式)和 `setting.yml` 两个文件。 执行: ```bash docker run --name ginx -itd -p 9397:9397 -p 9398:9398 -v /home/ginx:/etc/ginx/conf ginx:test ``` 上述命令中的端口,请替换为您的 `ginx.yml` 中监听的端口。 执行: ```bash docker container ls -a ``` 应当可以看到一个名为ginx的容器处于运行中,`STATUS` 为 `UP` 。 假设您的 `ginx.yml` 监听了9397端口,并配置了路由/test,那么您可以执行如下命令来测试: ```bash curl localhost:9397/test ``` 应能产生您的 `ginx.yml` 所预期的响应。 # 详细文档 - 文档基于`markdown`语法。未来可能考虑引入`swagger`。 - 文档中所涉及图片原则上均采用`draw.io`绘制。图片一并上传到gitee上,并在markdown中引用图片的gitee`原始数据`按钮对应的链接。 - 设计模型 - 配置设计:对象模型,json解析等:https://gitee.com/wisdom7/ginx/blob/master/doc/config-model.md # 预告 待办清单: - 解析类似nginx的conf配置文件中的信息,考虑使用`yacc`。 - 提供代理功能等,考虑基于`Gin`,`net/http`等实现。 - 提供命令行工具,至少支持`ginx`,`ginx -t`,`ginx -s reload`等。 - 已经初步提供了命令行工具的雏形,具体选项仍有待开发。 - 提供`Dockerfile`,`docker-compose.yml`,`chart`等。 - 已经提供Dockerfile! - 实现多进程模型。 - 提供多种日志输出,支持输出到本地文件,kafka,elasticsearch等。 - 已经实现! - 完成基于Linux(特别是Centos7.9)的定制化开发。可能提供`rpm`包,或者`shell`一键安装脚本。 - 持续使用设计模式思想重构。一旦新的修改会使得代码变坏,则立即考虑重构脆弱的部分。 - 引入`单元测试`和`TDD`。 - 考虑提供英文文档。