FileBrowser QuantumDocker构建:多环境Docker镜像制作
【免费下载链接】filebrowser 📂 Web File Browser 项目地址: https://gitcode.com/GitHub_Trending/fileb/filebrowser
痛点:传统文件管理器的Docker部署困境
还在为不同环境下的文件管理器部署而烦恼吗?传统的单一Docker镜像无法满足测试、生产、无认证、OIDC集成等多种场景需求。FileBrowser Quantum通过创新的多环境Docker构建体系,彻底解决了这一痛点。
通过本文,你将掌握:
- ✅ FileBrowser Quantum的多环境Docker架构设计
- ✅ 7种不同场景的Docker镜像构建方法
- ✅ 基于Docker多阶段构建的优化技巧
- ✅ 环境特定配置的管理策略
- ✅ 自动化测试与持续集成的最佳实践
FileBrowser Quantum Docker架构全景
FileBrowser Quantum采用模块化的Docker构建体系,针对不同使用场景提供了专门的Docker镜像:
核心Dockerfile解析
1. 标准生产环境镜像 (Dockerfile)
FROM gtstef/ffmpeg:8.0-decode AS ffmpeg
FROM golang:alpine AS base
ARG VERSION
ARG REVISION
WORKDIR /app
COPY ./backend ./
RUN apk update && apk add --no-cache gcc musl-dev upx
ENV CGO_ENABLED=1
ENV GOEXPERIMENT=greenteagc
RUN go build -tags mupdf,musl -ldflags="-w -s \
-X 'github.com/gtsteffaniak/filebrowser/backend/common/version.Version=${VERSION}' \
-X 'github.com/gtsteffaniak/filebrowser/backend/common/version.CommitSHA=${REVISION}'" \
-o filebrowser .
RUN upx filebrowser
FROM node:lts-slim AS nbuild
WORKDIR /app
COPY ./frontend/package.json ./
RUN npm i --maxsockets 1
COPY ./frontend/ ./
RUN npm run build-docker
FROM alpine:latest
COPY --from=ffmpeg [ "/ffmpeg", "/ffprobe", "/usr/local/bin/" ]
ENV FILEBROWSER_FFMPEG_PATH="/usr/local/bin/"
ENV FILEBROWSER_DATABASE="/home/filebrowser/data/database.db"
ENV PATH="$PATH:/home/filebrowser"
RUN apk --no-cache add ca-certificates mailcap tzdata
RUN adduser -D -s /bin/true -u 1000 filebrowser
USER filebrowser
WORKDIR /home/filebrowser
# copy config to two locations for compatibility
COPY --from=base --chown=filebrowser:1000 [ "/app/filebrowser", "/app/config.yaml", "./" ]
COPY --from=base --chown=filebrowser:1000 [ "/app/config.yaml", "./data/config.yaml" ]
COPY --from=base --chown=filebrowser:1000 [ "/app/reduce-rounded-corners.css", "./" ]
COPY --from=nbuild --chown=filebrowser:1000 [ "/app/dist/", "./http/dist/" ]
## sanity checks
RUN [ "filebrowser", "version" ]
RUN [ "ffmpeg", "-version" ]
RUN [ "ffprobe", "-version" ]
USER root
# exposing default port for auto discovery.
EXPOSE 80
ENTRYPOINT [ "./filebrowser" ]
构建特点:
- 四阶段构建:ffmpeg → Go编译 → Node构建 → 最终镜像
- 包含FFmpeg多媒体处理能力
- 使用UPX压缩二进制文件
- 版本信息注入构建过程
2. 轻量级镜像 (Dockerfile.slim)
FROM golang:alpine AS base
ARG VERSION
ARG REVISION
WORKDIR /app
COPY ./backend ./
RUN apk update && apk add upx
ENV GOEXPERIMENT=greenteagc
RUN go build -ldflags="-w -s \
-X 'github.com/gtsteffaniak/filebrowser/backend/common/version.Version=${VERSION}' \
-X 'github.com/gtsteffaniak/filebrowser/backend/common/version.CommitSHA=${REVISION}'" \
-o filebrowser .
RUN upx filebrowser
FROM node:lts-slim AS nbuild
WORKDIR /app
COPY ./frontend/package.json ./
RUN npm i --maxsockets 1
COPY ./frontend/ ./
RUN npm run build-docker
FROM alpine:latest
ENV FILEBROWSER_DATABASE="/home/filebrowser/data/database.db"
ENV PATH="$PATH:/home/filebrowser"
RUN apk --no-cache add ca-certificates mailcap tzdata
RUN adduser -D -s /bin/true -u 1000 filebrowser
USER filebrowser
WORKDIR /home/filebrowser
COPY --from=base --chown=filebrowser:1000 [ "/app/filebrowser", "./" ]
COPY --from=base --chown=filebrowser:1000 [ "/app/config.yaml", "./data/config.yaml" ]
COPY --from=base --chown=filebrowser:1000 [ "/app/reduce-rounded-corners.css", "./" ]
COPY --from=nbuild --chown=filebrowser:1000 [ "/app/dist/", "./http/dist/" ]
## sanity checks
RUN [ "filebrowser", "version" ]
USER root
# exposing default port for auto discovery.
EXPOSE 80
ENTRYPOINT [ "./filebrowser" ]
优化点:
- 移除FFmpeg依赖,减少镜像体积
- 简化构建阶段
- 保持核心功能完整
环境特定配置管理
FileBrowser Quantum通过_docker/src/目录管理不同环境的配置文件:
配置文件结构
_docker/src/
├── general/ # 通用测试环境
│ ├── backend/
│ └── frontend/
├── noauth/ # 无认证环境
│ ├── backend/
│ └── frontend/
├── oidc/ # OIDC集成环境
│ ├── backend/
│ └── frontend/
├── proxy/ # 代理认证环境
│ ├── backend/
│ └── frontend/
└── sharing/ # 文件分享环境
├── backend/
└── frontend/
通用环境配置示例 (general/backend/config.yaml)
server:
port: 80
baseURL: "/"
logging:
- levels: "info|error|debug"
sources:
- path: "../frontend/tests/playwright-files"
name: "playwright + files"
config:
defaultEnabled: true
- path: "."
name: "docker"
config:
defaultEnabled: true
frontend:
name: "Graham's Filebrowser"
disableDefaultLinks: true
externalLinks:
- text: "A playwright test"
url: "https://playwright.dev/"
title: "Playwright"
多环境构建实战
1. 构建标准生产镜像
# 构建带有版本信息的镜像
docker build -f _docker/Dockerfile \
--build-arg VERSION=2.0.0 \
--build-arg REVISION=abc123 \
-t filebrowser:latest .
2. 构建轻量级镜像
# 构建slim版本
docker build -f _docker/Dockerfile.slim \
-t filebrowser:slim .
3. 使用Docker Compose部署
# docker-compose.yaml 示例
services:
nginx-proxy-auth:
image: nginx
container_name: nginx-proxy-auth
ports:
- "80:80"
volumes:
- ./src/proxy/backend/default.conf:/etc/nginx/conf.d/default.conf
- ./src/proxy/backend/.htpasswd:/etc/nginx/conf.d/.htpasswd
filebrowser:
hostname: filebrowser
volumes:
- '../frontend:/home/frontend'
- "./src/proxy/backend/config.yaml:/home/filebrowser/config.yaml"
build:
context: ../
dockerfile: ./_docker/Dockerfile.slim
测试环境专用镜像
Playwright基础环境 (Dockerfile.playwright-base)
FROM node:22-slim
WORKDIR /app/frontend
RUN npm i @playwright/test oauth2-mock-server @types/node
RUN npx playwright install --with-deps firefox
测试镜像特点:
- 基于Node.js 22构建
- 集成Playwright测试框架
- 包含Firefox浏览器依赖
- 支持OAuth2模拟服务器
构建优化策略
1. 多阶段构建优势
2. 依赖管理优化
| 优化策略 | 实施方法 | 效果 |
|---|---|---|
| 分层缓存 | 分离package.json拷贝 | 充分利用Docker缓存 |
| 二进制压缩 | 使用UPX工具 | 减少镜像体积30% |
| 最小化基础镜像 | 使用alpine | 镜像体积<50MB |
| 依赖精简 | 按需安装系统包 | 减少安全漏洞面 |
3. 版本信息注入
通过构建参数注入版本信息:
--build-arg VERSION=${VERSION} \
--build-arg REVISION=${COMMIT_SHA}
在Go代码中通过ldflags获取:
-ldflags="-X 'github.com/gtsteffaniak/filebrowser/backend/common/version.Version=${VERSION}'"
自动化部署流程
CI/CD集成示例
#!/bin/bash
# build.sh 自动化构建脚本
set -e
# 定义版本信息
VERSION=$(git describe --tags --always)
REVISION=$(git rev-parse --short HEAD)
# 构建标准镜像
docker build -f _docker/Dockerfile \
--build-arg VERSION=$VERSION \
--build-arg REVISION=$REVISION \
-t filebrowser:latest \
-t filebrowser:$VERSION .
# 构建轻量级镜像
docker build -f _docker/Dockerfile.slim \
--build-arg VERSION=$VERSION \
--build-arg REVISION=$REVISION \
-t filebrowser:slim \
-t filebrowser:slim-$VERSION .
# 推送镜像到仓库
docker push filebrowser:latest
docker push filebrowser:$VERSION
docker push filebrowser:slim
docker push filebrowser:slim-$VERSION
环境配置对比表
| 环境类型 | 镜像文件 | 主要特性 | 适用场景 | 体积估算 |
|---|---|---|---|---|
| 标准生产 | Dockerfile | FFmpeg支持, 完整功能 | 生产环境部署 | ~180MB |
| 轻量级 | Dockerfile.slim | 核心功能, 无FFmpeg | 资源受限环境 | ~50MB |
| 无认证测试 | Dockerfile.playwright-noauth | 无用户认证 | 功能测试 | ~300MB |
| OIDC测试 | Dockerfile.playwright-oidc | OIDC集成 | 单点登录测试 | ~300MB |
| 代理认证 | Dockerfile.playwright-proxy | 代理认证 | 企业环境测试 | ~300MB |
| 文件分享 | Dockerfile.playwright-sharing | 分享功能 | 分享功能测试 | ~300MB |
| 通用测试 | Dockerfile.playwright-general | 完整测试环境 | 综合测试 | ~300MB |
最佳实践总结
- 环境隔离:为不同使用场景创建专用镜像,避免配置冲突
- 版本控制:通过构建参数注入版本信息,便于追踪和回滚
- 安全优化:使用非root用户运行,减少权限风险
- 体积控制:采用多阶段构建和UPX压缩,优化镜像大小
- 缓存利用:合理组织Dockerfile指令顺序,最大化构建缓存
【免费下载链接】filebrowser 📂 Web File Browser 项目地址: https://gitcode.com/GitHub_Trending/fileb/filebrowser
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



