feat: no-nginx frontend, host nginx config, configurable ports

- Frontend: remove nginx, use serve for static files
- Frontend: add Projects/Milestones/Notifications pages
- Frontend: fix auth endpoint to match backend (/auth/token)
- docker-compose: configurable ports via env vars, reduce frontend resources
- Add nginx-host.conf.example for host-level reverse proxy
- Add .env.example
- Update README with deployment architecture
This commit is contained in:
zhi
2026-03-06 13:06:27 +00:00
parent e315259db8
commit f34538e3b0
5 changed files with 97 additions and 33 deletions

15
.env.example Normal file
View File

@@ -0,0 +1,15 @@
# MySQL
MYSQL_ROOT_PASSWORD=harborforge_root
MYSQL_DATABASE=harborforge
MYSQL_USER=harborforge
MYSQL_PASSWORD=harborforge_pass
MYSQL_PORT=3306
# Backend
SECRET_KEY=change_me_in_production
LOG_LEVEL=INFO
BACKEND_PORT=8000
# Frontend
FRONTEND_PORT=3000
VITE_API_BASE=/api

View File

@@ -7,9 +7,10 @@ Agent/人类协同任务管理平台
```
HarborForge/
├── HarborForge.Backend/ # 后端 (FastAPI + MySQL)
├── HarborForge.Frontend/ # 前端 (React) - 规划中
├── HarborForge.Cli/ # CLI 工具 - 规划中
── docker-compose.yml # 部署配置
├── HarborForge.Frontend/ # 前端 (React + Vite)
├── docker-compose.yml # Docker 部署配置
── nginx-host.conf.example # 宿主机 nginx 配置示例
└── .env.example # 环境变量模板
```
## 快速开始
@@ -20,13 +21,45 @@ git clone https://git.hangman-lab.top/zhi/HarborForge.git
cd HarborForge
git submodule update --init --recursive
# 启动服务
# 配置环境变量
cp .env.example .env
# 启动服务
docker compose up -d
```
## 部署架构
```
宿主机 nginx (80/443)
├── / → frontend (Docker, port 3000)
└── /api/ → backend (Docker, port 8000)
```
前端 Docker 容器不包含 nginx使用轻量的 `serve` 提供静态文件。
API 代理由宿主机 nginx 统一处理。
### 宿主机 nginx 配置
参考 `nginx-host.conf.example`,复制到 `/etc/nginx/sites-available/` 并修改域名。
## 子模块
- [HarborForge.Backend](https://git.hangman-lab.top/zhi/HarborForge.Backend) - 后端 API
- [HarborForge.Frontend](https://git.hangman-lab.top/zhi/HarborForge.Frontend) - 前端 (规划中)
- [HarborForge.Cli](https://git.hangman-lab.top/zhi/HarborForge.Cli) - CLI 工具 (规划中)
- [HarborForge.Backend](https://git.hangman-lab.top/zhi/HarborForge.Backend) - FastAPI 后端 API
- [HarborForge.Frontend](https://git.hangman-lab.top/zhi/HarborForge.Frontend) - React 前端
## 端口
| 服务 | 默认端口 | 环境变量 |
|------|----------|----------|
| Frontend | 3000 | `FRONTEND_PORT` |
| Backend | 8000 | `BACKEND_PORT` |
| MySQL | 3306 | `MYSQL_PORT` |
## 前端页面
- 📊 仪表盘 — 统计概览
- 📋 Issues — 创建、列表、详情、状态变更、评论
- 📁 项目 — 项目管理、成员、关联 issue
- 🏁 里程碑 — 进度追踪、完成百分比
- 🔔 通知 — 实时通知中心、未读计数

View File

@@ -1,4 +1,5 @@
version: '3.8'
services:
mysql:
image: mysql:8.0
@@ -12,14 +13,9 @@ services:
volumes:
- mysql_data:/var/lib/mysql
ports:
- 3306:3306
- "${MYSQL_PORT:-3306}:3306"
healthcheck:
test:
- CMD
- mysqladmin
- ping
- -h
- localhost
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
@@ -28,6 +24,7 @@ services:
limits:
cpus: '0.5'
memory: 512M
backend:
build:
context: ./HarborForge.Backend
@@ -39,53 +36,46 @@ services:
SECRET_KEY: ${SECRET_KEY:-change_me_in_production}
LOG_LEVEL: ${LOG_LEVEL:-INFO}
ports:
- 8000:8000
- "${BACKEND_PORT:-8000}:8000"
depends_on:
mysql:
condition: service_healthy
volumes:
- ./HarborForge.Backend:/app
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
healthcheck:
test:
- CMD
- curl
- -f
- http://localhost:8000/health
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
frontend:
build:
context: ./HarborForge.Frontend
dockerfile: Dockerfile
args:
VITE_API_BASE: ${VITE_API_BASE:-/api}
container_name: harborforge-frontend
restart: unless-stopped
ports:
- 3000:3000
- "${FRONTEND_PORT:-3000}:3000"
depends_on:
backend:
condition: service_healthy
deploy:
resources:
limits:
cpus: '0.5'
memory: 256M
cpus: '0.25'
memory: 128M
healthcheck:
test:
- CMD
- wget
- -q
- --spider
- http://localhost:3000
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000"]
interval: 30s
timeout: 10s
retries: 3
volumes:
mysql_data:
driver: local

26
nginx-host.conf.example Normal file
View File

@@ -0,0 +1,26 @@
# 宿主机 nginx 配置示例
# 复制到 /etc/nginx/sites-available/ 并 symlink 到 sites-enabled/
# 修改 server_name 为实际域名
server {
listen 80;
server_name harborforge.example.com;
# 前端
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# API 代理
location /api/ {
proxy_pass http://127.0.0.1:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}