Skip to content

Commit 3d85e49

Browse files
committed
feat: 完整的用户系统和多架构Docker支持
✨ 新增功能: - 完整的用户注册、登录、管理系统 - 用户文件管理和存储配额追踪 - 管理员用户管理界面 - 多架构Docker构建支持(AMD64/ARM64) - 用户系统配置开关 🔧 技术改进: - 多阶段Docker构建优化 - 用户权限隔离和安全防护 - 实时存储统计和配额管理 - 响应式前端用户界面 - 完整的API端点分离 📦 Docker优化: - 支持多架构构建(linux/amd64, linux/arm64) - 自动构建脚本build-docker.sh - 优化的镜像大小和安全性 - 非root用户运行 - 详细的Docker使用文档 🚀 部署支持: - Docker Compose配置 - 多架构构建脚本 - 健康检查和监控 - 数据持久化配置 📚 文档: - Docker多架构构建指南 - 用户系统实现文档 - 完整的API使用说明
1 parent 3226c31 commit 3d85e49

File tree

23 files changed

+6470
-51
lines changed

23 files changed

+6470
-51
lines changed

Dockerfile

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,58 @@
1-
FROM golang:1.24-alpine AS builder
1+
# 多阶段构建:第一阶段用于编译
2+
FROM --platform=$BUILDPLATFORM golang:1.25-alpine AS builder
3+
4+
# 定义构建参数
5+
ARG TARGETOS
6+
ARG TARGETARCH
7+
ARG BUILDPLATFORM
8+
9+
# 安装构建依赖(适用于Alpine)
10+
RUN apk add --no-cache \
11+
gcc \
12+
musl-dev \
13+
sqlite-dev \
14+
git
215

316
WORKDIR /app
17+
18+
# 复制依赖文件并下载依赖
419
COPY go.mod go.sum ./
520
RUN go mod download
621

22+
# 复制源代码
723
COPY . .
8-
RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -o filecodebox .
924

25+
# 根据目标平台编译
26+
RUN CGO_ENABLED=1 \
27+
GOOS=${TARGETOS} \
28+
GOARCH=${TARGETARCH} \
29+
go build -a -installsuffix cgo -ldflags="-w -s" -o filecodebox .
30+
31+
# 第二阶段:运行时镜像
1032
FROM alpine:latest
11-
RUN apk --no-cache add ca-certificates tzdata
12-
WORKDIR /root/
1333

34+
# 安装运行时依赖
35+
RUN apk --no-cache add \
36+
ca-certificates \
37+
tzdata \
38+
sqlite
39+
40+
# 创建非root用户
41+
RUN addgroup -g 1000 app && \
42+
adduser -D -s /bin/sh -u 1000 -G app app
43+
44+
WORKDIR /app
45+
46+
# 从构建阶段复制文件
1447
COPY --from=builder /app/filecodebox .
1548
COPY --from=builder /app/themes ./themes
1649

50+
# 创建数据目录并设置权限
51+
RUN mkdir -p data && chown -R app:app /app
52+
53+
# 切换到非root用户
54+
USER app
55+
1756
EXPOSE 12345
57+
1858
CMD ["./filecodebox"]

build-docker.sh

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
#!/bin/bash
2+
3+
# FileCodeBox 多架构Docker构建脚本
4+
5+
set -e
6+
7+
# 颜色定义
8+
RED='\033[0;31m'
9+
GREEN='\033[0;32m'
10+
YELLOW='\033[1;33m'
11+
BLUE='\033[0;34m'
12+
NC='\033[0m' # No Color
13+
14+
# 函数:打印彩色输出
15+
print_status() {
16+
echo -e "${BLUE}[INFO]${NC} $1"
17+
}
18+
19+
print_success() {
20+
echo -e "${GREEN}[SUCCESS]${NC} $1"
21+
}
22+
23+
print_warning() {
24+
echo -e "${YELLOW}[WARNING]${NC} $1"
25+
}
26+
27+
print_error() {
28+
echo -e "${RED}[ERROR]${NC} $1"
29+
}
30+
31+
# 检查Docker是否安装
32+
if ! command -v docker &> /dev/null; then
33+
print_error "Docker is not installed!"
34+
exit 1
35+
fi
36+
37+
# 默认参数
38+
IMAGE_NAME="filecodebox"
39+
IMAGE_TAG="latest"
40+
PLATFORMS="linux/amd64,linux/arm64"
41+
PUSH=false
42+
BUILD_SINGLE=false
43+
TARGET_PLATFORM=""
44+
45+
# 解析命令行参数
46+
while [[ $# -gt 0 ]]; do
47+
case $1 in
48+
--name)
49+
IMAGE_NAME="$2"
50+
shift 2
51+
;;
52+
--tag)
53+
IMAGE_TAG="$2"
54+
shift 2
55+
;;
56+
--platforms)
57+
PLATFORMS="$2"
58+
shift 2
59+
;;
60+
--push)
61+
PUSH=true
62+
shift
63+
;;
64+
--single)
65+
BUILD_SINGLE=true
66+
TARGET_PLATFORM="$2"
67+
shift 2
68+
;;
69+
--help|-h)
70+
echo "FileCodeBox Docker 多架构构建脚本"
71+
echo ""
72+
echo "用法: $0 [选项]"
73+
echo ""
74+
echo "选项:"
75+
echo " --name NAME Docker镜像名称 (默认: filecodebox)"
76+
echo " --tag TAG Docker镜像标签 (默认: latest)"
77+
echo " --platforms PLATFORMS 目标平台,逗号分隔 (默认: linux/amd64,linux/arm64)"
78+
echo " --push 构建后推送到registry"
79+
echo " --single PLATFORM 构建单一平台并加载到本地"
80+
echo " --help, -h 显示此帮助信息"
81+
echo ""
82+
echo "示例:"
83+
echo " $0 # 本地多架构构建"
84+
echo " $0 --push # 构建并推送"
85+
echo " $0 --single linux/amd64 # 构建AMD64并加载到本地"
86+
echo " $0 --single linux/arm64 # 构建ARM64并加载到本地"
87+
echo " $0 --name myregistry/filecodebox --tag v1.0.0 --push"
88+
exit 0
89+
;;
90+
*)
91+
print_error "未知参数: $1"
92+
echo "使用 --help 查看帮助信息"
93+
exit 1
94+
;;
95+
esac
96+
done
97+
98+
FULL_IMAGE_NAME="${IMAGE_NAME}:${IMAGE_TAG}"
99+
100+
print_status "FileCodeBox Docker 多架构构建"
101+
print_status "镜像名称: ${FULL_IMAGE_NAME}"
102+
103+
# 检查buildx是否可用
104+
if ! docker buildx version &> /dev/null; then
105+
print_error "Docker buildx is not available!"
106+
print_status "尝试安装buildx..."
107+
docker buildx install
108+
fi
109+
110+
# 创建并使用buildx builder
111+
BUILDER_NAME="filecodebox-builder"
112+
if ! docker buildx ls | grep -q "$BUILDER_NAME"; then
113+
print_status "创建buildx builder: $BUILDER_NAME"
114+
docker buildx create --name "$BUILDER_NAME" --driver docker-container --bootstrap
115+
fi
116+
117+
print_status "使用buildx builder: $BUILDER_NAME"
118+
docker buildx use "$BUILDER_NAME"
119+
120+
# 构建参数
121+
BUILD_ARGS=""
122+
if [ "$PUSH" = true ]; then
123+
BUILD_ARGS="--push"
124+
elif [ "$BUILD_SINGLE" = true ]; then
125+
BUILD_ARGS="--load"
126+
PLATFORMS="$TARGET_PLATFORM"
127+
print_status "构建单一平台: $TARGET_PLATFORM"
128+
else
129+
BUILD_ARGS="--load"
130+
# 如果不推送,只构建当前平台
131+
CURRENT_ARCH=$(docker version --format '{{.Server.Arch}}')
132+
case $CURRENT_ARCH in
133+
amd64)
134+
PLATFORMS="linux/amd64"
135+
;;
136+
arm64)
137+
PLATFORMS="linux/arm64"
138+
;;
139+
*)
140+
print_warning "未识别的架构: $CURRENT_ARCH,使用默认平台"
141+
PLATFORMS="linux/amd64"
142+
;;
143+
esac
144+
fi
145+
146+
print_status "目标平台: $PLATFORMS"
147+
148+
# 执行构建
149+
print_status "开始构建..."
150+
docker buildx build \
151+
--platform "$PLATFORMS" \
152+
--tag "$FULL_IMAGE_NAME" \
153+
$BUILD_ARGS \
154+
.
155+
156+
if [ $? -eq 0 ]; then
157+
print_success "构建完成!"
158+
159+
if [ "$BUILD_SINGLE" = true ] || ([ "$PUSH" = false ] && [[ ! "$PLATFORMS" =~ "," ]]); then
160+
print_status "验证镜像..."
161+
if docker images | grep -q "$IMAGE_NAME.*$IMAGE_TAG"; then
162+
print_success "镜像已加载到本地Docker"
163+
164+
# 显示镜像信息
165+
print_status "镜像信息:"
166+
docker images | head -1
167+
docker images | grep "$IMAGE_NAME.*$IMAGE_TAG"
168+
169+
# 测试运行
170+
print_status "测试运行容器..."
171+
CONTAINER_ID=$(docker run -d -p 12347:12345 "$FULL_IMAGE_NAME")
172+
sleep 3
173+
174+
if docker ps | grep -q "$CONTAINER_ID"; then
175+
print_success "容器运行成功! 容器ID: $CONTAINER_ID"
176+
print_status "访问地址: http://localhost:12347"
177+
print_status "停止容器: docker stop $CONTAINER_ID"
178+
else
179+
print_error "容器启动失败"
180+
docker logs "$CONTAINER_ID"
181+
docker rm "$CONTAINER_ID"
182+
fi
183+
fi
184+
elif [ "$PUSH" = true ]; then
185+
print_success "镜像已推送到registry"
186+
fi
187+
else
188+
print_error "构建失败!"
189+
exit 1
190+
fi

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ services:
66
ports:
77
- "12345:12345"
88
volumes:
9-
- ./data:/root/data
10-
- ./themes:/root/themes
9+
- ./data:/app/data
10+
- ./themes:/app/themes
1111
environment:
1212
- GIN_MODE=release
1313
restart: unless-stopped

0 commit comments

Comments
 (0)