个人主页 - 动态版本
基于Vue3 + Go的个人主页项目【原项目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
快速开始
1. 环境要求
- Go >= 1.21
- Node.js >= 16.16.0
- npm >= 8.15.0
2. 安装依赖
# 安装前端依赖
npm install
# 安装Go依赖
go mod download
3. 生成 Ent 代码(仅修改 Schema 后)
生成后的 Ent 源码已提交到仓库,普通运行和构建不需要重复生成。只有修改 internal/ent/schema 后才运行:
# 进入ent目录
cd internal/ent
# 生成Ent代码
go generate ./...
# 返回项目根目录
cd ../..
说明:
go generate是Go的内置命令,用于运行代码生成工具./...表示当前目录及所有子目录- 这会根据
schema/目录中的定义生成Ent ORM代码 - 生成器使用
go.mod中固定的 Ent 版本,不会使用@latest
4. 运行项目
开发模式:
生产运行只需要启动一个服务。需要前端热更新时,可额外启动 Vite 开发服务器:
终端1 - 启动统一服务:
# 在项目根目录运行
make run
终端2 - 启动前端开发服务器:
# 在项目根目录运行
npm run dev
说明:
make run会先构建前端,再启动同时提供前端、API和上传文件的统一服务- 统一服务默认运行在
http://localhost:1552 - Vite 开发服务器运行在
http://localhost:5173,并将 API 请求代理到统一服务 - 首次运行会自动创建
data/目录和数据库 - 可以通过环境变量
PORT修改统一服务端口(默认1552)
Windows用户注意: 如果遇到中文乱码,在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 单文件程序:
make build-linux
构建 Windows 单文件程序:
make build-windows
构建全部平台:
make build
该命令会生成 Windows、Linux 和 macOS amd64 可执行文件;需要单独构建某个平台时使用对应的 make build-windows、make build-linux 或 make build-darwin。
构建前端:
npm install
npm run build
构建完成后:
make build的发布包位于./dist/- 前端资源已经嵌入每个平台的二进制文件,部署时只需要对应的可执行文件
说明:
go build编译Go程序为二进制文件- SQLite 使用纯 Go 驱动,构建不需要 CGO 或 GCC
GOOS=linux GOARCH=amd64指定目标平台和架构-o指定输出文件名
部署说明
-
上传文件到服务器:
- 上传
home-vue-go二进制文件
- 上传
-
运行二进制文件:
./home-vue-go -
数据存储:
- 数据库文件:
./data/home.db - 上传的图片:
./data/uploads/ - 所有数据存储在二进制文件同级目录的
data文件夹中
- 数据库文件:
-
环境变量(可选):
export PORT=1552 # 统一服务端口,默认1552 export JWT_SECRET=your-secret-key # JWT密钥,建议修改
管理界面使用
- 访问
/admin进入管理界面 - 使用默认账号登录
- 在管理界面中可以:
- 站点配置:修改站点名称、URL、图标、描述等
- 站点管理:添加、编辑、删除站点链接
- 联系方式管理:管理Email、GitHub、支付宝、微信等联系方式
数据迁移
如果你之前使用的是静态版本(使用JSON配置文件),可以:
- 启动新版本服务
- 登录管理界面
- 手动导入原有数据,或使用API批量导入
API文档
公开API(无需认证)
GET /api/sites- 获取站点列表GET /api/contacts- 获取联系方式列表GET /api/config- 获取站点配置
管理API(需要JWT认证)
POST /api/auth/login- 登录获取tokenGET /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- 上传图片文件
注意事项
- Email格式验证:Email类型的联系方式URL必须是
mailto:格式(如:mailto:i@bsgun.cn) - 图片上传:支持 jpg、jpeg、png、gif、webp、avif、svg、bmp 格式
- 数据库安全:SQLite数据库文件存储在服务器本地,不对外暴露,防止数据库注入
- JWT密钥:生产环境请务必修改JWT_SECRET环境变量
- 默认密码:首次部署后请立即修改管理员密码
开发命令
Go相关命令:
# 更新依赖
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
前端相关命令:
# 安装依赖
npm install
# 开发模式
npm run dev
# 构建生产版本
npm run build
# 预览构建结果
npm run preview
GitHub Actions 构建与安装包
仓库内置 .github/workflows/build.yml,在推送到 main 或创建 Pull Request 时运行测试和跨平台构建。每次工作流运行都会产生三个可下载的安装包:
- Windows amd64:
Home-Vue-Go_Windows.zip - Linux amd64:
Home-Vue-Go_Linux.tar.gz - macOS amd64:
Home-Vue-Go_macOS.tar.gz
在 GitHub Actions 的运行详情页下载对应平台的 Home-Vue-Go_<平台> 构建产物。发布版本时推送一个 v 开头的标签,工作流会自动创建 GitHub Release、读取对应版本的发行说明并附加这三个安装包:
git tag v1.0.0
git push github v1.0.0
许可证
本项目沿用原仓库的 MIT License,发行包中也会包含完整的 LICENSE 文件。原项目版权声明及许可条款予以保留。