Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ node_modules
dist_electron
simple-mind-map/dist
simple-mind-map/types
utools/dist
utools/dist
dist/
20 changes: 20 additions & 0 deletions build/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# 使用官方 nginx 镜像作为基础镜像
FROM nginx:alpine

# 创建应用目录
RUN mkdir -p /app

# 复制构建产物(dist 内容直接放到 /app 根目录,URL 无 dist 前缀)
# index.html 由 copy.js 已复制到项目根,其余静态资源从 dist 拷贝
COPY ./index.html /app/
COPY ./dist/. /app/
COPY ./nginx.conf /etc/nginx/nginx.conf

# 设置工作目录
WORKDIR /app

# 暴露端口
EXPOSE 80

# 启动 nginx
CMD ["nginx", "-g", "daemon off;"]
43 changes: 43 additions & 0 deletions build/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
.PHONY: build run

# 变量定义
PROJECT_NAME := mind-map
IMAGE_NAME := $(PROJECT_NAME):latest
CONTAINER_NAME := $(PROJECT_NAME)-container
WEB_DIR := ../web
BUILD_SCRIPT := ./build.sh
RUN_SCRIPT := ./run.sh
PORT ?= 1024

# 从源码构建成可执行的镜像
# 包括:清理旧产物 -> 安装依赖 -> 编译项目 -> 构建 Docker 镜像
build:
@echo "=========================================="
@echo "开始构建镜像..."
@echo "=========================================="
@echo "步骤 0/4: 清理旧构建产物..."
@rm -rf ../dist ../index.html
@echo "步骤 1/4: 安装依赖..."
@echo " 1.1: 链接本地模块 simple-mind-map..."
@cd ../simple-mind-map && yarn link 2>/dev/null || true
@cd $(WEB_DIR) && yarn link simple-mind-map 2>/dev/null || true
@echo " 1.2: 安装其他依赖..."
@cd $(WEB_DIR) && yarn install --ignore-engines
@echo "步骤 2/4: 编译项目..."
@NODE_OPTIONS=--openssl-legacy-provider bash $(BUILD_SCRIPT)
@echo "步骤 3/4: 构建 Docker 镜像..."
@docker build -t $(IMAGE_NAME) -f ./Dockerfile ..
@echo "=========================================="
@echo "构建完成!镜像名称: $(IMAGE_NAME)"
@echo "=========================================="

# 启动刚才构建的镜像(会先执行 build)
# 使用方式: make run 或 make run PORT=8080
run: build
@echo "=========================================="
@echo "启动容器..."
@echo "=========================================="
@PORT=$(PORT) bash $(RUN_SCRIPT)
@echo "=========================================="
@echo "应用已启动!访问 http://localhost:$(PORT)"
@echo "=========================================="
200 changes: 200 additions & 0 deletions build/QUICKSTART.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
# 快速开始指南

## 克隆新代码仓库后的操作

### 最简单的方式(一键启动)

```bash
# 1. 进入构建目录
cd yzq_build

# 2. 构建镜像(从源码构建成可执行的镜像)
make build

# 3. 启动容器(默认端口 80)
make run

# 或者指定端口启动
make run PORT=8080
```

## 命令说明

### 1. `make build` - 构建镜像

从源码构建成可执行的 Docker 镜像,自动执行以下步骤:

1. **安装依赖** - 在 `web/` 目录执行 `yarn install`
2. **编译项目** - 执行 `yarn build` 编译前端代码
3. **构建镜像** - 使用 nginx 将编译产物打包成 Docker 镜像

**执行时间:** 首次构建可能需要几分钟(安装依赖),后续构建会更快。

**输出:** 生成镜像 `mind-map:latest`

### 2. `make run` - 启动容器

启动刚才构建的镜像。

**默认端口:** 80

**指定端口:**
```bash
# 使用 8080 端口
make run PORT=8080

# 使用 3000 端口
make run PORT=3000
```

**说明:**
- 如果容器已存在,会自动停止并删除旧容器
- 容器名称:`mind-map-container`
- 访问地址:`http://localhost:端口号`

## 完整使用流程

### 新克隆代码后

```bash
# 1. 进入构建目录
cd yzq_build

# 2. 构建镜像(首次需要安装依赖,可能需要几分钟)
make build

# 3. 启动容器
make run

# 4. 访问应用
# 浏览器打开 http://localhost
```

### 更新代码后重新部署

```bash
cd yzq_build

# 重新构建镜像
make build

# 启动新容器(会自动停止旧容器)
make run
```

### 使用自定义端口

```bash
cd yzq_build

# 构建镜像
make build

# 使用 8080 端口启动
make run PORT=8080

# 访问 http://localhost:8080
```

## 前提条件

确保你的系统已安装:

1. **Node.js 和 Yarn**
```bash
# 检查是否安装
node --version
yarn --version

# 如果未安装 yarn
npm install -g yarn
```

2. **Docker**
```bash
# 检查是否安装
docker --version

# 如果未安装,请参考 Docker 官方文档安装
```

## 常用 Docker 命令

### 查看容器状态
```bash
docker ps -a | grep mind-map
```

### 查看容器日志
```bash
docker logs -f mind-map-container
```

### 停止容器
```bash
docker stop mind-map-container
```

### 删除容器
```bash
docker rm mind-map-container
```

### 删除镜像
```bash
docker rmi mind-map:latest
```

## 常见问题

### Q: 执行 `make build` 报错找不到 yarn?
A: 需要先安装 yarn:`npm install -g yarn`

### Q: 执行 `make build` 报错找不到 docker?
A: 需要先安装 Docker,参考 Docker 官方文档

### Q: 端口被占用怎么办?
A: 使用 `make run PORT=其他端口` 指定其他端口,例如:
```bash
make run PORT=8080
```

### Q: 如何查看容器日志?
```bash
docker logs -f mind-map-container
```

### Q: 如何进入容器查看?
```bash
docker exec -it mind-map-container sh
```

### Q: 构建失败怎么办?
- 检查网络连接(需要下载 npm 包)
- 检查磁盘空间
- 查看错误信息,通常是依赖安装问题

### Q: 容器启动失败怎么办?
- 检查镜像是否存在:`docker images | grep mind-map`
- 查看容器日志:`docker logs mind-map-container`
- 检查端口是否被占用

## 总结

**对于新克隆的代码仓库,只需要:**

```bash
cd yzq_build
make build # 构建镜像
make run # 启动容器(默认端口 80)
```

**或者指定端口:**

```bash
cd yzq_build
make build
make run PORT=8080
```

**就这么简单!** 🚀
Loading