Skip to content

TechFunWay/bookmarks

Repository files navigation

网址收藏夹

一个简单易用的网址收藏夹管理工具,基于Go语言后端和Vue.js前端构建。

Bookmark Manager

功能特性

  • 📁 文件夹管理 - 创建、编辑、删除文件夹,支持嵌套结构
  • 🔖 书签管理 - 添加、编辑、删除网址书签,支持批量操作
  • 🔄 拖拽排序 - 支持文件夹和书签的拖拽重排序
  • 📦 批量操作 - 批量选择、删除和移动书签
  • 🌐 元数据获取 - 自动获取网页标题和favicon图标
  • 🎨 现代化界面 - 简洁美观的用户界面
  • 📱 响应式设计 - 适配不同屏幕尺寸
  • 快速响应 - 基于SQLite本地数据库,查询速度快
  • 🔒 安全可靠 - 支持内网HTTPS站点访问
  • 📤 导入导出 - 支持JSON格式书签的导入和导出
  • 🌐 Edge浏览器支持 - 支持导入和导出Edge浏览器的HTML格式书签
  • 🎨 主题切换 - 支持浅色和深色主题切换
  • 🎨 背景设置 - 支持自定义背景(默认、纯色、图片),可调节面板透明度
  • 📊 每页显示 - 支持自定义每行显示的书签数量(1-6个)
  • 🔍 搜索功能 - 支持按网址名称搜索书签
  • 💾 配置保存 - 所有设置自动保存到数据库,跨浏览器同步

技术架构

后端技术栈

  • Go 1.21+ - 主要编程语言
  • Chi - 轻量级HTTP路由器
  • SQLite - 本地数据库存储
  • Go Modules - 依赖管理

前端技术栈

  • Vue.js 3 - 现代JavaScript框架
  • HTML5/CSS3 - 页面布局和样式
  • Fetch API - HTTP请求处理

数据存储

  • SQLite数据库文件:data.db
  • 支持外键约束和数据一致性
  • 自动维护排序位置

快速开始

系统要求

  • Go 1.21 或更高版本
  • 支持SQLite的操作系统(Windows/macOS/Linux)
  • Docker(可选,用于容器化部署)

安装步骤

方式一:直接运行

  1. 克隆或下载项目

    git clone <项目地址>
    cd bookmarks
  2. 运行应用

    • 使用默认端口8901启动:
    go run main.go
    • 自定义端口启动:
    go run main.go -port 3000
    • 自定义数据路径和端口:
    go run main.go -dataUrl /path/to/data -port 8080
  3. 访问应用

    • 默认访问地址:http://localhost:8901
    • 或访问您指定的端口地址
    • 查看所有可用选项:go run main.go -h

方式二:Docker部署(推荐)

快速启动(推荐新手使用):

Linux/macOS用户:

cd docker
./start.sh

Windows用户:

cd docker
start.bat

详细使用指南:

请查看 docker/README.md 获取完整的Docker部署指南,包括:

  • 快速启动
  • 自定义端口
  • 手动构建和运行
  • 常用命令
  • 故障排除

手动启动:

  1. 使用docker-compose快速启动

    cd docker
    docker-compose up -d

    应用将在默认端口8901上运行,访问地址:http://localhost:8901

  2. 自定义端口启动

    # 方法1:修改docker-compose.yml中的PORT环境变量
    # 然后运行
    cd docker
    docker-compose up -d
    
    # 方法2:命令行指定端口(例如使用8080端口)
    cd docker
    PORT=8080 docker-compose up -d
  3. 手动构建和运行

    # AMD64架构
    docker build -f docker/Dockerfile.amd64 -t bookmarks:amd64 .
    docker run -d -p 8901:8901 -v $(pwd)/data:/app/data bookmarks:amd64
    
    # ARM64架构(如树莓派等)
    docker build -f docker/Dockerfile.arm64 -t bookmarks:arm64 .
    docker run -d -p 8901:8901 -v $(pwd)/data:/app/data bookmarks:arm64
  4. 使用自定义端口运行

    # 映射到8080端口
    docker run -d -p 8080:8901 -v $(pwd)/data:/app/data bookmarks:amd64
    
    # 映射到3000端口
    docker run -d -p 3000:8901 -v $(pwd)/data:/app/data bookmarks:amd64
  5. 停止和删除容器

    cd docker
    
    # 停止容器
    docker-compose down
    
    # 停止并删除数据卷
    docker-compose down -v

Docker数据持久化

应用的数据(SQLite数据库)默认存储在容器内的/app/data目录。为了防止数据丢失,建议使用Docker volume或绑定挂载:

  • docker-compose方式:已自动配置../data:/app/data挂载,数据会保存在宿主机的./data目录(相对于项目根目录)
  • docker run方式:使用-v $(pwd)/data:/app/data参数挂载

Docker常用命令

# 查看容器日志
cd docker
docker-compose logs -f bookmarks

# 查看容器状态
cd docker
docker-compose ps

# 重启容器
cd docker
docker-compose restart

# 进入容器
docker exec -it bookmarks sh

# 查看容器健康状态
docker inspect bookmarks | grep -A 10 Health

自定义配置

启动时可以通过命令行参数自定义配置:

数据路径

go run main.go -dataUrl=/path/to/your/data/

端口配置

go run main.go -port 3000

组合配置

go run main.go -dataUrl=/path/to/data -port 8080

查看所有选项

go run main.go -h

可用参数:

  • -dataUrl:数据存储路径(默认:"./")
  • -port:服务器监听端口(默认:"8901")

使用说明

基础操作

  1. 创建文件夹

    • 点击左侧"新建文件夹"按钮
    • 或右键点击现有文件夹选择"新建子文件夹"
  2. 添加书签

    • 点击左侧"添加网址"按钮
    • 或右键点击文件夹选择"添加网址"
    • 输入网址后点击"获取信息"可自动填充标题和图标
  3. 编辑项目

    • 双击文件夹或书签名称进行编辑
    • 或右键选择"编辑"选项
  4. 删除项目

    • 右键选择"删除"选项
    • 或在编辑模式下批量选择删除

高级功能

  1. 重排序

    • 拖拽文件夹或书签到新位置
    • 或使用右键菜单的"上移"/"下移"选项
  2. 移动到文件夹

    • 右键选择"移动到文件夹"
    • 选择目标文件夹并确认
  3. 批量操作

    • 点击"编辑"按钮进入编辑模式
    • 使用复选框选择多个项目
    • 执行批量删除或移动操作
  4. 搜索和组织

    • 通过文件夹结构组织书签
    • 查看书签路径信息
    • 使用搜索框按名称搜索书签
  5. 导入导出

    • 点击顶部的"导出"按钮导出JSON格式书签
    • 点击顶部的"导入"按钮导入JSON格式书签
    • 选择导入模式(合并或替换)
    • 选择导入目标文件夹
    • 支持从Edge浏览器导入HTML格式书签
  6. 主题切换

    • 点击右上角的主题切换按钮
    • 在浅色和深色主题之间切换
    • 主题设置会自动保存
  7. 背景设置

    • 点击右上角的"背景"按钮
    • 选择背景类型:默认背景、纯色背景、图片背景
    • 可以上传自定义图片作为背景
    • 支持调节面板透明度,让背景图片或颜色透过面板显示
    • 背景设置会自动保存
  8. 每页显示设置

    • 在网址列表上方选择每行显示的书签数量(1-6个)
    • 设置会自动保存到数据库
    • 换浏览器后设置依然有效

快捷操作

  • 右键菜单:在任何项目上右键查看可用操作
  • 双击编辑:双击项目名称快速编辑
  • 拖拽移动:直接拖拽到目标位置
  • 批量选择:使用编辑模式进行批量操作

API接口

RESTful API

  • GET /api/tree - 获取完整树结构
  • GET /api/metadata?url=<网址> - 获取网页元数据
  • POST /api/folders - 创建文件夹
  • POST /api/bookmarks - 创建书签
  • PUT /api/nodes/{id} - 更新节点
  • DELETE /api/nodes/{id} - 删除节点
  • POST /api/nodes/reorder - 重新排序节点
  • POST /api/import - 导入JSON格式书签
  • POST /api/import-edge - 导入Edge浏览器HTML格式书签
  • GET /api/config - 获取配置(主题、背景、每页显示等)
  • POST /api/config - 保存配置(主题、背景、每页显示等)

请求示例

# 获取树结构
curl http://localhost:8901/api/tree

# 创建文件夹
curl -X POST http://localhost:8901/api/folders \
  -H "Content-Type: application/json" \
  -d '{"title":"工作相关","parent_id":null}'

# 创建书签
curl -X POST http://localhost:8901/api/bookmarks \
  -H "Content-Type: application/json" \
  -d '{"title":"GitHub","url":"https://github.com","parent_id":1}'

配置说明

数据库配置

  • 数据库文件位置:可通过-dataUrl参数指定
  • 默认位置:当前目录下的data.db
  • 自动创建必要的表和索引

服务器配置

  • 默认端口:8901
  • 支持静态文件服务
  • 内置CORS支持

目录结构

bookmarks/
├── main.go              # 主程序入口
├── go.mod               # Go模块定义
├── go.sum               # 依赖校验
├── data.db              # SQLite数据库文件(运行时生成)
├── static/              # 静态文件目录
│   ├── index.html       # 主页面
│   ├── app.js          # Vue.js应用
│   └── style.css       # 样式文件
├── README.md           # 中文说明
├── README.en.md        # English README
└── techfunway.bookmarks/ # 打包相关文件

开发说明

环境要求

  • Go 1.21+
  • 现代浏览器支持(Chrome、Firefox、Safari、Edge)

开发运行

# 启动开发服务器
go run main.go

# 修改前端代码后刷新浏览器即可看到效果

部署建议

  • 可以打包成单文件可执行程序
  • 支持在任何支持Go的平台上运行
  • 数据文件可与程序分离,便于备份

故障排除

常见问题

  1. 端口被占用

    • 检查8901端口是否被其他程序占用
    • 或修改代码中的端口配置
    • Docker用户可以使用自定义端口:docker run -p 8080:8901 ...
  2. 数据库错误

    • 确保有写入权限
    • 检查磁盘空间是否充足
  3. 网页元数据获取失败

    • 检查网络连接
    • 某些网站可能限制爬虫访问
  4. HTTPS站点访问失败

    • 应用支持自签名证书
    • 内网HTTPS站点可正常访问
  5. Docker容器无法启动

    • 检查Docker是否正常运行:docker ps
    • 查看容器日志:docker-compose logs -f bookmarks
    • 确保端口未被占用
    • 检查数据目录权限
  6. Docker数据丢失

    • 确保使用了volume挂载:-v $(pwd)/data:/app/data
    • 检查宿主机data目录是否有数据
    • 避免使用docker-compose down -v(会删除数据卷)
  7. Docker健康检查失败

    • 等待容器完全启动(最多30秒)
    • 检查容器日志:docker-compose logs bookmarks
    • 确认应用正常运行

日志查看

  • 启动时会显示服务器运行端口
  • 浏览器开发者工具查看前端错误
  • 服务器日志显示API请求和错误信息

许可证

本项目采用MIT许可证,详见LICENSE文件。

参与贡献

欢迎提交Issue和Pull Request!

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

更新日志

v2.1.0

  • 1.更新:浏览器同步插件支持同时同步多个设备,每个设备独立配置设置
  • 2.新增:免登录功能(开启免登录后实际使用的是管理员数据)
  • 3.新增:新增分类显示页面,支持滑动缩放图标大小

v1.4.0

  • 新增背景设置功能,支持默认背景、纯色背景、自定义图片背景
  • 新增面板透明度调节功能,可调节列表和结构面板的透明度
  • 新增每页显示数量保存功能,设置自动保存到数据库,跨浏览器同步
  • 优化浅色主题下选中数字的显示效果
  • 调整PC端列表布局高度,解决内容超出问题
  • 性能优化和bug修复

v1.2.0

  • 新增导入导出功能,支持JSON格式书签的导入和导出
  • 新增Edge浏览器支持,支持导入和导出Edge浏览器的HTML格式书签
  • 新增主题切换功能,支持浅色和深色主题切换
  • 优化了文件夹选择功能,修复了导入时无法选择文件夹的问题
  • 修复了交叉编译问题,支持生成不同架构的Linux二进制文件
  • 性能优化和bug修复

v1.1.0

  • 新增搜索功能,支持按网址名称搜索
  • 手机端适配优化
  • 性能优化和bug修复

v1.0.0

  • 初始版本发布
  • 基础文件夹和书签管理功能
  • 拖拽排序支持
  • 批量操作功能
  • 网页元数据获取
  • 响应式设计,适配不同屏幕尺寸
  • 现代化美观界面
  • 支持内网HTTPS站点访问

安全说明

数据安全

  • 数据存储在本地SQLite数据库文件中,不会上传到云端
  • 支持定期备份数据库文件
  • 建议将数据文件存储在安全位置

网络安全

  • 仅通过本地HTTP服务器访问,不暴露公网
  • 支持内网HTTPS站点访问
  • 无第三方依赖,减少安全风险

浏览器兼容性

  • ✅ Chrome 80+
  • ✅ Firefox 75+
  • ✅ Safari 13+
  • ✅ Edge 80+

性能优化

  • 本地SQLite数据库,查询速度快
  • 前端采用Vue.js 3,渲染性能优秀
  • 支持大量书签和文件夹的高效管理
  • 拖拽操作流畅,响应迅速

备份和恢复

备份数据

  1. 关闭应用程序
  2. 复制data.db文件到安全位置
  3. 完成备份

恢复数据

  1. 关闭应用程序
  2. 将备份的data.db文件复制到应用程序目录
  3. 启动应用程序
  4. 数据将自动恢复

未来计划

  • 支持标签功能
  • 支持快捷键操作
  • 支持书签预览功能
  • 支持云同步功能
  • 支持更多浏览器的书签导入导出
  • 支持更高级的搜索功能
  • 支持书签分组和智能分类
  • 支持自定义主题和样式

支持和反馈

如果您在使用过程中遇到问题或有任何建议,欢迎通过以下方式反馈:

  • 创建Issue:在GitHub仓库提交Issue
  • 邮件反馈:发送邮件到[[email protected]]
  • 提交Pull Request:贡献代码或改进

致谢

感谢所有为本项目做出贡献的开发者和用户!

关于作者

一个热爱技术的开发者,致力于创建简单易用的工具,提高工作效率。

About

网址收藏夹功能,包含飞牛应用,dockder:techfunway/bookmarks

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors