FileBrowser QuantumDocker构建:多环境Docker镜像制作

FileBrowser QuantumDocker构建:多环境Docker镜像制作

【免费下载链接】filebrowser 📂 Web File Browser 【免费下载链接】filebrowser 项目地址: 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镜像:

mermaid

核心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. 多阶段构建优势

mermaid

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

环境配置对比表

环境类型镜像文件主要特性适用场景体积估算
标准生产DockerfileFFmpeg支持, 完整功能生产环境部署~180MB
轻量级Dockerfile.slim核心功能, 无FFmpeg资源受限环境~50MB
无认证测试Dockerfile.playwright-noauth无用户认证功能测试~300MB
OIDC测试Dockerfile.playwright-oidcOIDC集成单点登录测试~300MB
代理认证Dockerfile.playwright-proxy代理认证企业环境测试~300MB
文件分享Dockerfile.playwright-sharing分享功能分享功能测试~300MB
通用测试Dockerfile.playwright-general完整测试环境综合测试~300MB

最佳实践总结

  1. 环境隔离:为不同使用场景创建专用镜像,避免配置冲突
  2. 版本控制:通过构建参数注入版本信息,便于追踪和回滚
  3. 安全优化:使用非root用户运行,减少权限风险
  4. 体积控制:采用多阶段构建和UPX压缩,优化镜像大小
  5. 缓存利用:合理组织Dockerfile指令顺序,最大化构建缓存

【免费下载链接】filebrowser 📂 Web File Browser 【免费下载链接】filebrowser 项目地址: https://gitcode.com/GitHub_Trending/fileb/filebrowser

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值