Files
KnowledgeBase/Dockerfile

139 lines
3.9 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 多阶段构建Dockerfile - Laravel知识库系统 (Swoole版本)
# 确保构建为linux/amd64架构
# ================================
# 基础阶段 - 安装系统依赖
# ================================
FROM php:8.2-cli-alpine AS base
# 设置工作目录
WORKDIR /var/www/html
# 安装系统依赖
RUN apk add --no-cache \
# 基础工具
curl \
git \
unzip \
zip \
# PHP扩展依赖
libpng-dev \
libjpeg-turbo-dev \
freetype-dev \
libzip-dev \
icu-dev \
oniguruma-dev \
# Pandoc文档转换工具
pandoc \
# LibreOffice用于生成高保真PDF预览Noto CJK用于中文字体渲染
libreoffice \
font-noto-cjk \
ttf-dejavu \
# Node.js和npm (使用较小的版本)
nodejs \
npm \
# 进程管理
supervisor
# 配置和安装PHP扩展
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) \
pdo_mysql \
mysqli \
zip \
gd \
intl \
mbstring \
opcache \
bcmath \
exif \
pcntl
# 安装Redis和Swoole扩展
RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS linux-headers \
&& pecl install redis-6.0.2 swoole-5.1.1 \
&& docker-php-ext-enable redis swoole \
&& apk del .build-deps
# 安装Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# ================================
# 构建阶段 - 安装依赖和构建资源
# ================================
FROM base AS builder
# 复制composer文件
COPY composer.json composer.lock ./
# 复制源代码需要artisan文件
COPY . .
# 安装PHP依赖生产环境
RUN composer install --no-dev --optimize-autoloader --no-interaction --no-progress
# 复制package.json文件
COPY package.json package-lock.json ./
# 安装NPM依赖包括开发依赖用于构建
RUN npm ci
# 构建前端资源
RUN npm run build
# 设置Laravel缓存和优化
RUN php artisan config:cache \
&& php artisan route:cache \
&& php artisan view:cache
# ================================
# 生产阶段 - 最终镜像
# ================================
FROM base AS production
# 确保www-data用户存在Alpine中可能已存在
RUN if ! getent group www-data > /dev/null 2>&1; then \
addgroup -g 82 -S www-data; \
fi \
&& if ! getent passwd www-data > /dev/null 2>&1; then \
adduser -u 82 -D -S -G www-data www-data; \
fi
# 复制PHP配置仅保留基础PHP配置移除PHP-FPM配置
COPY docker/php/php.ini /usr/local/etc/php/php.ini
# 复制Supervisor配置更新为Swoole版本
COPY docker/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# 复制健康检查脚本
COPY docker/queue-health-check.sh /usr/local/bin/queue-health-check.sh
COPY docker/swoole-health-check.sh /usr/local/bin/swoole-health-check.sh
RUN chmod +x /usr/local/bin/queue-health-check.sh \
&& chmod +x /usr/local/bin/swoole-health-check.sh
# 从构建阶段复制应用文件
COPY --from=builder --chown=www-data:www-data /var/www/html /var/www/html
# 创建必要的目录并设置权限
RUN mkdir -p /var/www/html/storage/logs \
&& mkdir -p /var/www/html/storage/framework/cache \
&& mkdir -p /var/www/html/storage/framework/sessions \
&& mkdir -p /var/www/html/storage/framework/views \
&& mkdir -p /var/www/html/bootstrap/cache \
&& mkdir -p /var/log/supervisor \
&& mkdir -p /var/log \
&& chown -R www-data:www-data /var/www/html/storage \
&& chown -R www-data:www-data /var/www/html/bootstrap/cache \
&& chmod -R 775 /var/www/html/storage \
&& chmod -R 775 /var/www/html/bootstrap/cache
# 暴露Swoole端口
EXPOSE 8000
# 健康检查 - 使用Swoole健康检查脚本
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD /usr/local/bin/swoole-health-check.sh || exit 1
# 使用supervisor启动多个服务
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]