feat: 新增 Docker 部署支持、Swoole/Octane 集成及相关优化
- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境) - 集成 Laravel Octane (Swoole) 提升性能 - 新增健康检查、监控脚本及部署文档 - 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch) - 优化文档转换、预览服务及队列任务 - 添加 CreateAdminUser 命令与路由健康检查接口 - 新增 Swoole 队列兼容性测试套件 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
134
Dockerfile
Normal file
134
Dockerfile
Normal file
@@ -0,0 +1,134 @@
|
||||
# 多阶段构建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 \
|
||||
# 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"]
|
||||
Reference in New Issue
Block a user