初始提交:浏览器首页 MyHomePage 全栈项目

# 项目概述
个人浏览器首页导航应用,支持书签分类管理、搜索引擎快捷搜索、
必应每日壁纸轮播、前后端分离部署,适配 1Panel 服务器(Docker 模式)。

# 技术栈
- 前端:Vue 3 + TypeScript + Vite + Pinia + Capacitor(Android 打包)
- 后端:.NET 8 + SqlSugar(多数据库) + SQLite/MySQL + Swashbuckle
- 部署:1Panel 应用商店自定义应用(Docker Compose 模式)

# 项目结构
- backend/    .NET 8 API 后端(8 个 Controller + 15 个 Service)
- frontend/   Vue 3 前端(19 个组件 + 9 个 API 模块 + 5 个 Store)
- docker/     Docker 部署文件(后端镜像 + Nginx 反代)
- docs/       部署手册(1Panel 实战版)
- scripts/    E2E 测试脚本

# 已实现功能
- 书签管理:增删改查 + 树形分类 + 拖拽排序 + 主色自适应
- 搜索引擎:8 个内置引擎 + 自定义引擎 + favicon 自动抓取
- 必应壁纸:每日轮播 + 多分辨率自动选择 + 1.6MP 质量优先
- 全局设置:主题/行为/数据/工具 4 分类 + 跨设备同步
- 文件上传:图标/书签/通用(容器持久化 + 跨域 URL 拼接)
- 同步:基于变更日志的设备间数据同步
- 跨域部署:前后端分离 + runtime config.json 无需重新编译

# 进度记录
- 已完成 P0~P52 共 53 个开发节点(详细见 说明文档.md)
- 当前版本:v1.0 部署就绪

# 部署文档
- README.md:项目说明 + 快速开始
- 说明文档.md:完整开发进度(中文)
- docs/DEPLOY.md:1Panel 部署手册(Docker 模式)
This commit is contained in:
2026-07-05 05:09:56 +08:00
commit 68be41e7a2
129 changed files with 15900 additions and 0 deletions
+78
View File
@@ -0,0 +1,78 @@
# 完整 Docker Compose 部署:MySQL + 后端(内嵌前端 + Nginx 反代可选)
# 使用方法:docker compose up -d
# 完整部署手册:docs/DEPLOY.md
services:
mysql:
image: mysql:8.0
container_name: myhomepage-mysql
restart: always # 开机自启(生产用 always,不用 unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpw}
MYSQL_DATABASE: myhomepage
MYSQL_USER: myhomepage
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-myhomepagepw}
TZ: Asia/Shanghai # 时区
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=+08:00
volumes:
- mysql-data:/var/lib/mysql
# 不暴露 3306 到宿主机(默认安全);如需远程连接改为 "127.0.0.1:3306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-u", "myhomepage", "-p${MYSQL_PASSWORD:-myhomepagepw}"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s # 首次启动给 30s 宽限
logging: # P47:日志轮转(单文件 10M / 保留 3 份)
driver: json-file
options:
max-size: "10m"
max-file: "3"
backend:
build:
context: .
dockerfile: docker/backend.Dockerfile
image: myhomepage-backend:latest # 显式打 tag,方便回滚
container_name: myhomepage-backend
restart: always
depends_on:
mysql:
condition: service_healthy
environment:
# === 数据库 ===
Database__Provider: MySql
Database__ConnectionString: "Server=mysql;Port=3306;Database=myhomepage;Uid=myhomepage;Pwd=${MYSQL_PASSWORD:-myhomepagepw};CharSet=utf8mb4;SslMode=None;AllowPublicKeyRetrieval=true;"
# === 上传 ===
Upload__Path: /app/Uploads
Upload__BaseUrl: /uploads
Upload__MaxSizeBytes: 10485760 # 10MB
# === CORS(生产域名按需加) ===
Cors__Origins__0: "http://localhost"
Cors__Origins__1: "http://localhost:8080"
# Cors__Origins__2: "https://yourdomain.com" # ← 改成你的域名
# === 日志级别 ===
Logging__LogLevel__Default: Information
Logging__LogLevel__Microsoft.AspNetCore: Warning
Logging__LogLevel__SqlSugar: Information
# === 时区 ===
TZ: Asia/Shanghai
volumes:
- uploads-data:/app/Uploads # 上传文件持久化
ports:
- "8080:8080" # 直连模式(用 Nginx 反代时改 "127.0.0.1:8080:8080"
healthcheck: # P47:后端健康检查(K8s / 监控依赖)
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 60s # 首次启动给 60s(编译 + 建表 + 种子)
logging: # P47:日志轮转
driver: json-file
options:
max-size: "10m"
max-file: "5"
volumes:
mysql-data:
uploads-data: