# Minim轻聊 **Repository Path**: onefly/minim ## Basic Information - **Project Name**: Minim轻聊 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-16 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Minim 轻量级 H5 聊天应用,支持文本 / 图片 / 语音 / 文件消息、实时 WebSocket 推送、邀请链接加好友、微信公众号网页授权登录。 ## 技术栈 | 层 | 技术 | |---|---| | 后端 | Go 1.25 · Gin · GORM · MySQL · gorilla/websocket | | 前端 | Vue 3 · Vite 5 · Pinia · vue-router · TypeScript | | 部署 | 单二进制(前端内嵌 `go:embed`) · Caddy 2 反代 · systemd | ## 项目结构 ``` Minim/ ├── server/ # 后端 │ ├── cmd/server/main.go # 入口 │ ├── internal/ │ │ ├── config/ # 配置加载(YAML + 环境变量) │ │ ├── database/ # 连接、AutoMigrate、种子数据 │ │ ├── model/ # GORM 模型 │ │ ├── auth/ # JWT 签发/校验 │ │ ├── middleware/ # 认证中间件 │ │ ├── handler/ # HTTP 处理器 │ │ ├── service/ # 业务逻辑 │ │ ├── ws/ # WebSocket hub/client │ │ ├── dto/ # 请求/响应结构体 │ │ ├── apperr/ # 应用错误码 │ │ └── constants/ # 内置头像等常量 │ ├── web/ │ │ ├── embed.go # 静态资源 + SPA fallback │ │ └── dist/ # 前端构建产物(内嵌进二进制) │ ├── configs/ │ │ ├── config.yaml # 开发配置 │ │ └── config.prod.example.yaml # 生产配置模板 │ └── deploy/ │ └── minim-linux-amd64 # 交叉编译产物 ├── web/ # 前端源码 │ ├── src/ │ │ ├── views/ # 页面组件 │ │ ├── components/ # 通用 + 聊天组件 │ │ ├── stores/ # Pinia 状态 │ │ ├── api/ # HTTP 封装 │ │ ├── realtime/ # WebSocket 客户端 │ │ └── router/ # 路由 │ ├── vite.config.ts # Vite 配置(base: /im/,dev proxy) │ └── package.json └── deploy/ # 部署文件 ├── Caddyfile # Caddy 2 反代配置 ├── minim.env.example # 环境变量模板 └── minim.service # systemd 服务单元 ``` ## 本地开发 ### 前置要求 - Go 1.25+ - Node.js 18+ - MySQL 8.0+ ### 后端 ```powershell cd server $env:GOTOOLCHAIN='local' $env:GOPROXY='https://goproxy.cn,direct' # 首次需构建前端产物到 server/web/dist/ cd ../web && npm install && npm run build && cd ../server # 运行(开发配置含种子数据,自动创建 demo 账号,密码 123456) go run ./cmd/server -config configs/config.yaml ``` 后端监听 `0.0.0.0:8080`,访问 `http://localhost:8080/im/`。 ### 前端(热更新开发) ```powershell cd web npm install npm run dev ``` Vite 启动 `http://localhost:5173/im/`,API/WS/上传由 proxy 转发到 8080。 ## 生产部署 ### 1. 构建产物 ```powershell # 前端 cd web npm install npm run build # 产物输出到 server/web/dist/ # 后端(交叉编译 Linux amd64) cd ../server $env:GOTOOLCHAIN='local' $env:GOPROXY='https://goproxy.cn,direct' $env:GOOS='linux'; $env:GOARCH='amd64' go build -trimpath -o deploy/minim-linux-amd64 ./cmd/server ``` ### 2. 服务器安装 ```bash # 建用户和目录 sudo useradd --system --home /opt/minim --shell /usr/sbin/nologin minim sudo mkdir -p /opt/minim /etc/minim /var/minim/verify sudo chown -R minim:minim /opt/minim # 放文件 sudo cp minim-linux-amd64 /opt/minim/minim && sudo chmod 755 /opt/minim/minim sudo cp config.prod.example.yaml /etc/minim/config.yaml # 改成生产实际值 sudo cp minim.env.example /etc/minim/minim.env # 填密钥后 chmod 600 sudo cp minim.service /etc/systemd/system/ # 启动 sudo systemctl daemon-reload sudo systemctl enable --now minim sudo journalctl -u minim -f ``` ### 3. Caddy 反代 ``` 你的域名 { encode zstd gzip request_body { max_size 25MB } @assets path /im/assets/* header @assets Cache-Control "public, max-age=31536000, immutable" handle /im/* { reverse_proxy 127.0.0.1:8080 } } ``` ## 配置说明 | 配置项 | 环境变量 | 说明 | |---|---|---| | `server.port` | `SERVER_PORT` | 监听端口,默认 8080 | | `server.base_path` | `SERVER_BASE_PATH` | 统一根路径前缀,默认 `/im`,须与前端 vite base 一致 | | `server.trusted_proxies` | `SERVER_TRUSTED_PROXIES` | 反代信任网段,逗号分隔 | | `mysql.*` | `MYSQL_*` | 数据库连接 | | `jwt.secret` | `JWT_SECRET` | JWT 签名密钥,生产必须覆盖 | | `upload.dir` | `UPLOAD_DIR` | 上传文件存储目录 | | `wechat.*` | `WECHAT_*` | 微信网页授权配置 | | `seed.enabled` | `SEED_ENABLED` | 空库播种 demo 数据,生产必须关闭 | ## 部署文件清单 | 文件 | 服务器路径 | |---|---| | `server/deploy/minim-linux-amd64` | `/opt/minim/minim` | | `server/configs/config.prod.example.yaml` | `/etc/minim/config.yaml` | | `deploy/minim.env.example` | `/etc/minim/minim.env` | | `deploy/minim.service` | `/etc/systemd/system/minim.service` | | `deploy/Caddyfile` | Caddy 配置目录 |