6f07849a53
Build Packages / Test (push) Has been cancelled
Build Packages / Build macOS package (push) Has been cancelled
Build Packages / Build Linux package (push) Has been cancelled
Build Packages / Build Windows package (push) Has been cancelled
Build Packages / Publish GitHub Release (push) Has been cancelled
290 lines
7.3 KiB
Markdown
290 lines
7.3 KiB
Markdown
## 个人主页 - 动态版本
|
||
|
||
基于Vue3 + Go的个人主页项目【原项目[Home-Vue](https://github.com/JLinMr/Home-Vue)】支持动态更新配置,无需修改代码即可更新站点信息。
|
||
|
||
### 技术栈
|
||
|
||
**前端:**
|
||
- Vue3 + Vite
|
||
- CSS3 + HTML5 + JavaScript
|
||
- Vue Router
|
||
- Axios
|
||
|
||
**后端:**
|
||
- Go + Gin
|
||
- Ent ORM
|
||
- JWT认证
|
||
- SQLite数据库
|
||
|
||
### 功能特性
|
||
|
||
- ✅ 动态配置站点信息(名称、URL、图标等)
|
||
- ✅ 可视化管理界面
|
||
- ✅ 支持多种图片格式上传(jpg、png、jpeg、webp、avif等)
|
||
- ✅ 联系方式管理(Email、GitHub、支付宝、微信等)
|
||
- ✅ JWT认证保护管理接口
|
||
- ✅ 数据存储在SQLite,轻量级数据库
|
||
- ✅ 支持Linux服务器二进制打包部署
|
||
|
||
### 项目结构
|
||
|
||
```
|
||
Home-Vue-go/
|
||
├── docs/ # 文档目录
|
||
├── scripts/ # 构建脚本
|
||
├── src/ # 前端源代码
|
||
├── internal/ # Go后端代码
|
||
└── public/ # 静态资源
|
||
```
|
||
|
||
详细的项目结构说明请查看 [PROJECT_STRUCTURE.md](./docs/PROJECT_STRUCTURE.md)
|
||
|
||
### 快速开始
|
||
|
||
#### 1. 环境要求
|
||
|
||
- Go >= 1.21
|
||
- Node.js >= 16.16.0
|
||
- npm >= 8.15.0
|
||
|
||
#### 2. 安装依赖
|
||
|
||
```bash
|
||
# 安装前端依赖
|
||
npm install
|
||
|
||
# 安装Go依赖
|
||
go mod download
|
||
```
|
||
|
||
#### 3. 生成 Ent 代码(仅修改 Schema 后)
|
||
|
||
生成后的 Ent 源码已提交到仓库,普通运行和构建不需要重复生成。只有修改 `internal/ent/schema` 后才运行:
|
||
|
||
```bash
|
||
# 进入ent目录
|
||
cd internal/ent
|
||
|
||
# 生成Ent代码
|
||
go generate ./...
|
||
|
||
# 返回项目根目录
|
||
cd ../..
|
||
```
|
||
|
||
**说明:**
|
||
- `go generate` 是Go的内置命令,用于运行代码生成工具
|
||
- `./...` 表示当前目录及所有子目录
|
||
- 这会根据 `schema/` 目录中的定义生成Ent ORM代码
|
||
- 生成器使用 `go.mod` 中固定的 Ent 版本,不会使用 `@latest`
|
||
|
||
#### 4. 运行项目
|
||
|
||
**开发模式:**
|
||
|
||
生产运行只需要启动一个服务。需要前端热更新时,可额外启动 Vite 开发服务器:
|
||
|
||
**终端1 - 启动统一服务:**
|
||
```bash
|
||
# 在项目根目录运行
|
||
make run
|
||
```
|
||
|
||
**终端2 - 启动前端开发服务器:**
|
||
```bash
|
||
# 在项目根目录运行
|
||
npm run dev
|
||
```
|
||
|
||
**说明:**
|
||
- `make run` 会先构建前端,再启动同时提供前端、API和上传文件的统一服务
|
||
- 统一服务默认运行在 `http://localhost:1552`
|
||
- Vite 开发服务器运行在 `http://localhost:5173`,并将 API 请求代理到统一服务
|
||
- 首次运行会自动创建 `data/` 目录和数据库
|
||
- 可以通过环境变量 `PORT` 修改统一服务端口(默认1552)
|
||
|
||
**Windows用户注意:** 如果遇到中文乱码,在PowerShell中运行:
|
||
```powershell
|
||
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
|
||
chcp 65001
|
||
```
|
||
|
||
访问:
|
||
- 前端:http://localhost:1552
|
||
- 管理界面:http://localhost:1552/admin
|
||
- 登录页面:http://localhost:1552/login
|
||
- API:http://localhost:1552/api
|
||
|
||
**默认管理员账号:**
|
||
- 用户名:`admin`
|
||
- 密码:`admin123`
|
||
|
||
⚠️ **重要:** 首次运行后请立即修改默认密码!
|
||
|
||
#### 5. 构建部署
|
||
|
||
**构建 Linux 单文件程序:**
|
||
```bash
|
||
make build-linux
|
||
```
|
||
|
||
**构建 Windows 单文件程序:**
|
||
```powershell
|
||
make build-windows
|
||
```
|
||
|
||
**构建全部平台:**
|
||
```bash
|
||
make build
|
||
```
|
||
|
||
该命令会生成 Windows、Linux 和 macOS amd64 可执行文件;需要单独构建某个平台时使用对应的 `make build-windows`、`make build-linux` 或 `make build-darwin`。
|
||
|
||
**构建前端:**
|
||
```bash
|
||
npm install
|
||
npm run build
|
||
```
|
||
|
||
构建完成后:
|
||
- `make build` 的发布包位于 `./dist/`
|
||
- 前端资源已经嵌入每个平台的二进制文件,部署时只需要对应的可执行文件
|
||
|
||
**说明:**
|
||
- `go build` 编译Go程序为二进制文件
|
||
- SQLite 使用纯 Go 驱动,构建不需要 CGO 或 GCC
|
||
- `GOOS=linux GOARCH=amd64` 指定目标平台和架构
|
||
- `-o` 指定输出文件名
|
||
|
||
### 部署说明
|
||
|
||
1. **上传文件到服务器:**
|
||
- 上传 `home-vue-go` 二进制文件
|
||
|
||
2. **运行二进制文件:**
|
||
```bash
|
||
./home-vue-go
|
||
```
|
||
|
||
3. **数据存储:**
|
||
- 数据库文件:`./data/home.db`
|
||
- 上传的图片:`./data/uploads/`
|
||
- 所有数据存储在二进制文件同级目录的 `data` 文件夹中
|
||
|
||
4. **环境变量(可选):**
|
||
```bash
|
||
export PORT=1552 # 统一服务端口,默认1552
|
||
export JWT_SECRET=your-secret-key # JWT密钥,建议修改
|
||
```
|
||
|
||
### 管理界面使用
|
||
|
||
1. 访问 `/admin` 进入管理界面
|
||
2. 使用默认账号登录
|
||
3. 在管理界面中可以:
|
||
- **站点配置**:修改站点名称、URL、图标、描述等
|
||
- **站点管理**:添加、编辑、删除站点链接
|
||
- **联系方式管理**:管理Email、GitHub、支付宝、微信等联系方式
|
||
|
||
### 数据迁移
|
||
|
||
如果你之前使用的是静态版本(使用JSON配置文件),可以:
|
||
|
||
1. 启动新版本服务
|
||
2. 登录管理界面
|
||
3. 手动导入原有数据,或使用API批量导入
|
||
|
||
### API文档
|
||
|
||
#### 公开API(无需认证)
|
||
|
||
- `GET /api/sites` - 获取站点列表
|
||
- `GET /api/contacts` - 获取联系方式列表
|
||
- `GET /api/config` - 获取站点配置
|
||
|
||
#### 管理API(需要JWT认证)
|
||
|
||
- `POST /api/auth/login` - 登录获取token
|
||
- `GET /api/admin/sites` - 获取站点列表(管理)
|
||
- `POST /api/admin/sites` - 创建站点
|
||
- `PUT /api/admin/sites/:id` - 更新站点
|
||
- `DELETE /api/admin/sites/:id` - 删除站点
|
||
- `GET /api/admin/contacts` - 获取联系方式列表(管理)
|
||
- `POST /api/admin/contacts` - 创建联系方式
|
||
- `PUT /api/admin/contacts/:id` - 更新联系方式
|
||
- `DELETE /api/admin/contacts/:id` - 删除联系方式
|
||
- `GET /api/admin/config` - 获取站点配置(管理)
|
||
- `PUT /api/admin/config` - 更新站点配置
|
||
- `POST /api/admin/upload` - 上传图片文件
|
||
|
||
### 注意事项
|
||
|
||
1. **Email格式验证**:Email类型的联系方式URL必须是 `mailto:` 格式(如:`mailto:i@bsgun.cn`)
|
||
2. **图片上传**:支持 jpg、jpeg、png、gif、webp、avif、svg、bmp 格式
|
||
3. **数据库安全**:SQLite数据库文件存储在服务器本地,不对外暴露,防止数据库注入
|
||
4. **JWT密钥**:生产环境请务必修改JWT_SECRET环境变量
|
||
5. **默认密码**:首次部署后请立即修改管理员密码
|
||
|
||
### 开发命令
|
||
|
||
**Go相关命令:**
|
||
```bash
|
||
# 更新依赖
|
||
go mod tidy
|
||
|
||
# 下载依赖
|
||
go mod download
|
||
|
||
# 生成Ent代码
|
||
cd internal/ent && go generate ./... && cd ../..
|
||
|
||
# 运行后端(开发模式)
|
||
make run
|
||
|
||
# 构建后端(当前平台)
|
||
CGO_ENABLED=0 go build -o home-vue-go .
|
||
|
||
# 构建后端(Linux)
|
||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o home-vue-go .
|
||
|
||
# 查看Go版本
|
||
go version
|
||
|
||
# 查看模块信息
|
||
go mod graph
|
||
```
|
||
|
||
**前端相关命令:**
|
||
```bash
|
||
# 安装依赖
|
||
npm install
|
||
|
||
# 开发模式
|
||
npm run dev
|
||
|
||
# 构建生产版本
|
||
npm run build
|
||
|
||
# 预览构建结果
|
||
npm run preview
|
||
```
|
||
|
||
### GitHub Actions 构建与安装包
|
||
|
||
仓库内置 `.github/workflows/build.yml`,在推送到 `main` 或创建 Pull Request 时运行测试和跨平台构建。每次工作流运行都会产生三个可下载的安装包:
|
||
|
||
- Windows amd64:ZIP
|
||
- Linux amd64:TAR.GZ
|
||
- macOS amd64:TAR.GZ
|
||
|
||
在 GitHub Actions 的运行详情页下载 `package-windows`、`package-linux` 或 `package-darwin`。发布版本时推送一个 `v` 开头的标签,工作流会自动创建 GitHub Release 并附加这三个安装包:
|
||
|
||
```bash
|
||
git tag v1.0.0
|
||
git push github v1.0.0
|
||
```
|
||
|
||
### 许可证
|
||
|
||
MIT License
|