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:
2026-02-28 15:51:19 +08:00
parent acf549c43c
commit 3c206e9e06
90 changed files with 12731 additions and 1255 deletions

134
Dockerfile Normal file
View 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"]