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
227 changes: 227 additions & 0 deletions DOCKER_DEPLOY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
# WebStack-Go Docker 部署指南

## 概述

本项目已成功集成飞书OAuth登录功能,并支持Docker容器化部署。本文档介绍如何使用Docker部署WebStack-Go应用。

## 功能特性

- ✅ 飞书OAuth 2.0登录认证
- ✅ 首页访问控制(需要飞书登录)
- ✅ 管理后台独立认证(不受影响)
- ✅ 环境变量配置支持
- ✅ Docker容器化部署
- ✅ Kubernetes部署支持

## 快速开始

### 1. 构建Docker镜像

```bash
# 编译Linux版本二进制文件
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o ./bin/server-linux ./cmd/server

# 构建Docker镜像
docker build -f Dockerfile.simple -t webstack-go:latest .
```

### 2. 运行容器

```bash
# 使用环境变量运行
docker run -d \
--name webstack-go \
-p 8000:8000 \
-e FEISHU_APP_ID=your_app_id \
-e FEISHU_APP_SECRET=your_app_secret \
-e FEISHU_REDIRECT_URL=http://localhost:8000/api/auth/feishu/callback \
-e FEISHU_TENANT_KEY=your_tenant_key \
webstack-go:latest
```

### 3. 使用Docker Compose

```bash
# 修改docker-compose.yml中的环境变量
# 然后运行
docker-compose up -d
```

## 环境变量配置

| 变量名 | 描述 | 示例值 | 必需 |
|--------|------|--------|------|
| `FEISHU_APP_ID` | 飞书应用ID | `cli_a8723d9ef275d00e` | ✅ |
| `FEISHU_APP_SECRET` | 飞书应用密钥 | `gQwAupMXlTaI5dy47DVwLgLNuwIRTUy1` | ✅ |
| `FEISHU_REDIRECT_URL` | OAuth回调地址 | `http://localhost:8000/api/auth/feishu/callback` | ✅ |
| `FEISHU_TENANT_KEY` | 企业租户Key | `your_tenant_key` | ❌ |

## 飞书应用配置

### 1. 创建飞书应用

1. 访问 [飞书开放平台](https://open.feishu.cn/)
2. 创建企业自建应用
3. 获取 `App ID` 和 `App Secret`

### 2. 配置OAuth重定向URI

在飞书应用管理后台添加以下重定向URI:
- 开发环境:`http://localhost:8000/api/auth/feishu/callback`
- 生产环境:`https://yourdomain.com/api/auth/feishu/callback`

### 3. 配置权限

确保应用具有以下权限:
- `user:read` - 读取用户基本信息
- `user:read:email` - 读取用户邮箱

## 部署方式

### 方式1:Docker运行

```bash
# 停止现有容器
docker stop webstack-go || true
docker rm webstack-go || true

# 运行新容器
docker run -d \
--name webstack-go \
--restart unless-stopped \
-p 8000:8000 \
-v $(pwd)/storage:/app/storage \
-e FEISHU_APP_ID=your_app_id \
-e FEISHU_APP_SECRET=your_app_secret \
-e FEISHU_REDIRECT_URL=http://yourdomain.com/api/auth/feishu/callback \
-e FEISHU_TENANT_KEY=your_tenant_key \
webstack-go:latest
```

### 方式2:Docker Compose

```yaml
version: '3.8'

services:
webstack-go:
image: webstack-go:latest
container_name: webstack-go
restart: unless-stopped
ports:
- "8000:8000"
environment:
- FEISHU_APP_ID=your_app_id
- FEISHU_APP_SECRET=your_app_secret
- FEISHU_REDIRECT_URL=http://yourdomain.com/api/auth/feishu/callback
- FEISHU_TENANT_KEY=your_tenant_key
volumes:
- ./storage:/app/storage
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8000/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
```

### 方式3:Kubernetes部署

参考 `FEISHU_CONFIG.md` 文件中的Kubernetes配置示例。

## 访问应用

### 1. 首页访问

- 访问 `http://localhost:8000/`
- 自动重定向到飞书登录页面
- 完成飞书授权后返回首页

### 2. 管理后台

- 访问 `http://localhost:8000/login`
- 使用原有的管理员账号登录
- 不受飞书登录影响

### 3. API文档

- 访问 `http://localhost:8000/swagger/index.html`
- 查看完整的API文档

## 故障排除

### 1. 容器启动失败

```bash
# 查看容器日志
docker logs webstack-go

# 检查容器状态
docker ps -a | grep webstack
```

### 2. 飞书登录失败

1. 检查环境变量是否正确设置
2. 确认飞书应用配置中的重定向URI
3. 检查网络连接和防火墙设置

### 3. 权限问题

```bash
# 检查文件权限
docker exec webstack-go ls -la /app/

# 修复权限
docker exec webstack-go chmod +x /app/server
```

## 监控和维护

### 1. 健康检查

```bash
# 检查应用状态
curl http://localhost:8000/api/about

# 检查飞书登录
curl http://localhost:8000/api/auth/feishu/login
```

### 2. 日志查看

```bash
# 实时查看日志
docker logs -f webstack-go

# 查看最近100行日志
docker logs --tail 100 webstack-go
```

### 3. 数据备份

```bash
# 备份数据目录
docker cp webstack-go:/app/storage ./backup-$(date +%Y%m%d)
```

## 安全建议

1. **环境变量安全**:使用Kubernetes Secret或Docker Secret管理敏感信息
2. **网络安全**:配置适当的防火墙规则
3. **HTTPS**:生产环境建议使用HTTPS
4. **定期更新**:定期更新Docker镜像和依赖

## 更新日志

- **v1.0.0** - 集成飞书OAuth登录功能
- **v1.0.1** - 支持环境变量配置
- **v1.0.2** - 优化Docker镜像构建

## 技术支持

如有问题,请查看:
1. 项目README.md
2. 飞书开放平台文档
3. Docker官方文档
4. Kubernetes官方文档
6 changes: 6 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
ARG APP_ENV
ENV APP_ENV=${APP_ENV}

# 飞书OAuth环境变量
ENV FEISHU_APP_ID=""
ENV FEISHU_APP_SECRET=""
ENV FEISHU_REDIRECT_URL=""
ENV FEISHU_TENANT_KEY=""

WORKDIR /data/app
COPY --from=builder /data/app/bin /data/app
COPY --from=builder /data/app/web/upload /data/app/web/upload/
Expand Down
37 changes: 37 additions & 0 deletions Dockerfile.simple
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
FROM alpine:3.18

# 设置时区
RUN apk add --no-cache tzdata && \
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
apk del tzdata

# 安装必要的运行时依赖
RUN apk add --no-cache ca-certificates

# 设置工作目录
WORKDIR /app

# 复制编译好的二进制文件
COPY bin/server-linux /app/server
COPY config /app/config
COPY web /app/web

# 创建必要的目录
RUN mkdir -p /app/storage

# 设置环境变量
ENV FEISHU_APP_ID=""
ENV FEISHU_APP_SECRET=""
ENV FEISHU_REDIRECT_URL=""
ENV FEISHU_TENANT_KEY=""

# 暴露端口
EXPOSE 8000

# 设置可执行权限
RUN chmod +x /app/server

# 启动命令
ENTRYPOINT ["/app/server"]
CMD ["-conf=config/prod.yml"]
78 changes: 78 additions & 0 deletions FEISHU_CONFIG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# 飞书OAuth配置环境变量说明

## 环境变量配置

在部署时,需要设置以下环境变量:

```bash
# 飞书应用配置
FEISHU_APP_ID=your_app_id
FEISHU_APP_SECRET=your_app_secret
FEISHU_REDIRECT_URL=https://your-domain.com/api/auth/feishu/callback
FEISHU_TENANT_KEY=your_tenant_key # 可选
```

## K8s部署配置示例

### ConfigMap
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: webstack-config
data:
FEISHU_REDIRECT_URL: "https://your-domain.com/api/auth/feishu/callback"
FEISHU_TENANT_KEY: ""
```

### Secret
```yaml
apiVersion: v1
kind: Secret
metadata:
name: webstack-secrets
type: Opaque
data:
FEISHU_APP_ID: <base64-encoded-app-id>
FEISHU_APP_SECRET: <base64-encoded-app-secret>
```

### Deployment
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: webstack-go
spec:
template:
spec:
containers:
- name: webstack-go
image: webstack-go:latest
env:
- name: FEISHU_APP_ID
valueFrom:
secretKeyRef:
name: webstack-secrets
key: FEISHU_APP_ID
- name: FEISHU_APP_SECRET
valueFrom:
secretKeyRef:
name: webstack-secrets
key: FEISHU_APP_SECRET
envFrom:
- configMapRef:
name: webstack-config
```

## 本地开发

创建 `.env` 文件:
```bash
FEISHU_APP_ID=cli_a8723d9ef275d00e
FEISHU_APP_SECRET=gQwAupMXlTaI5dy47DVwLgLNuwIRTUy1
FEISHU_REDIRECT_URL=http://localhost:8000/api/auth/feishu/callback
FEISHU_TENANT_KEY=
```

然后使用 `source .env` 或 `export` 命令设置环境变量。
2 changes: 2 additions & 0 deletions cmd/server/wire/wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
userHandler "github.com/ch3nnn/webstack-go/internal/handler/user"
"github.com/ch3nnn/webstack-go/internal/server"
"github.com/ch3nnn/webstack-go/internal/service"
authService "github.com/ch3nnn/webstack-go/internal/service/auth"
categoryService "github.com/ch3nnn/webstack-go/internal/service/category"
configService "github.com/ch3nnn/webstack-go/internal/service/config"
dashboardService "github.com/ch3nnn/webstack-go/internal/service/dashboard"
Expand Down Expand Up @@ -58,6 +59,7 @@ var serviceSet = wire.NewSet(
categoryService.NewService,
configService.NewService,
dashboardService.NewService,
authService.NewService,
)

var serverSet = wire.NewSet(
Expand Down
Loading