From 58a9002c3ad9c1eeb346c7d964d93700ebb0914b Mon Sep 17 00:00:00 2001 From: augushong Date: Wed, 29 Apr 2026 23:35:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(stack):=20=E6=96=B0=E5=A2=9E=20docker-dev?= =?UTF-8?q?=20=E5=BC=80=E5=8F=91=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 source/stack/docker-dev/Dockerfile: 基于 full 模式 + Xdebug + 开发 PHP 配置 - 新增 source/stack/docker-dev/docker-compose.yaml: 4 服务编排 (app/mysql/redis/phpmyadmin) - 新增 source/stack/docker-dev/.docker-dev.env: 开发环境配置模板 (HOSTNAME=mysql, HOSTPORT=3306) - 更新 source/stack/stack.json: 注册 docker-dev 模式, managed_files 增加 .docker-dev.env - 更新 .gitignore: 排除 /docker-dev/ 数据目录 --- .gitignore | 1 + source/stack/docker-dev/.docker-dev.env | 63 +++++++++++++ source/stack/docker-dev/Dockerfile | 97 +++++++++++++++++++++ source/stack/docker-dev/docker-compose.yaml | 54 ++++++++++++ source/stack/stack.json | 7 +- 5 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 source/stack/docker-dev/.docker-dev.env create mode 100644 source/stack/docker-dev/Dockerfile create mode 100644 source/stack/docker-dev/docker-compose.yaml diff --git a/.gitignore b/.gitignore index e2a353c..2267969 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ extend/base/common/command/curd/migrate_output.php /source/**/.idea /source/**/.vscode .trae/documents/ +/docker-dev/ diff --git a/source/stack/docker-dev/.docker-dev.env b/source/stack/docker-dev/.docker-dev.env new file mode 100644 index 0000000..dbbc082 --- /dev/null +++ b/source/stack/docker-dev/.docker-dev.env @@ -0,0 +1,63 @@ +# Docker 开发模式配置 - 使用方式: copy .docker-dev.env .env +APP_DEBUG=true + +[APP] +DEFAULT_TIMEZONE=Asia/Shanghai +AUTO_CACHE_LOG=false +AUTO_PARSE_API=true + +[DATABASE] +MAIN=main +TYPE=mysql +HOSTNAME=mysql +DATABASE=ulthon +USERNAME=root +PASSWORD=root +HOSTPORT=3306 +CHARSET=utf8mb4 +DEBUG=true +PREFIX=ul_ +FIELDS_CACHE=false + +[LOG] +CHANNEL=file + +[LANG] +default_lang=zh-cn + +# 后台配置项组 +[ADMINSYSTEM] +# 后台地址后缀名称 +ADMIN=admin + +# 后台登录验证码开关 +CAPTCHA=false + +# 是否为演示环境 +IS_DEMO=false + +# CDN配置项组 +CDN= +EXAMPLE=true + +# 是否开启CSRF过滤 +IS_CSRF=false + +# 静态文件路径前缀 +STATIC_PATH=/static + +# OSS静态文件路径前缀 +OSS_STATIC_PREFIX=static_ulthon_admin + +# 没有节点控制的是否放行 +DEFAULT_AUTH_CHECK=false + +# 严格要求部分事件的返回数据,不符则抛出异常 +STRICT_EVENT=true + +# 严格要求每个页面都建立js文件 +STRICT_VIEW_JS=true + +MAKE_VIEW_WHILE_MISSING=false + +UPDATE_LEVEL=production diff --git a/source/stack/docker-dev/Dockerfile b/source/stack/docker-dev/Dockerfile new file mode 100644 index 0000000..33704f7 --- /dev/null +++ b/source/stack/docker-dev/Dockerfile @@ -0,0 +1,97 @@ +FROM php:8.2-fpm-bookworm + +RUN rm -rf /etc/apt/sources.list.d/* \ + && echo "deb http://mirrors.ustc.edu.cn/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list \ + && echo "deb http://mirrors.ustc.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list \ + && echo "deb http://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list + +RUN apt-get update + +# Install nginx +RUN apt-get install -y nginx + +ADD --chmod=0755 https://nexus.hl7.top:1243/repository/github-raw-proxy/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ + +# Configure proxy +RUN sed -i 's|aomedia.googlesource.com|nexus.hl7.top:1243/repository/raw-aomedia.googlesource.com|g' /usr/local/bin/install-php-extensions +RUN sed -i 's|chromium.googlesource.com|nexus.hl7.top:1243/repository/raw-chromium.googlesource.com|g' /usr/local/bin/install-php-extensions +RUN sed -i 's|https://github.com|https://nexus.hl7.top:1243/repository/github-raw-proxy|g' /usr/local/bin/install-php-extensions + +RUN install-php-extensions pdo_mysql +RUN install-php-extensions gd +RUN install-php-extensions fileinfo +RUN install-php-extensions opcache +RUN install-php-extensions redis +RUN install-php-extensions event +RUN install-php-extensions imagick +RUN install-php-extensions zip +RUN install-php-extensions pcntl +RUN install-php-extensions xdebug + +# Clean default Nginx config +RUN rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default + + +# Install other dependencies +# RUN apt-get install -y ffmpeg +# RUN apt-get install -y libreoffice +# RUN apt-get install -y redis-server +# RUN apt-get install -y git + +# Set working directory +WORKDIR /var/www/html + +# Install Composer +COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer +RUN chmod +x /usr/local/bin/composer +RUN composer config -g repos.packagist composer https://nexus.hl7.top:1243/repository/composer-proxy/ + +# Set working directory +WORKDIR /var/www/html + +# Pre-copy composer files and install dependencies (with dev packages) +COPY composer.json composer.lock /var/www/html/ +RUN composer install --no-interaction --no-scripts + +# Copy all files to working directory +COPY . /var/www/html + +# Generate autoloader (without --no-dev optimizations) +RUN composer dump-autoload + +# Internal install composer and dependencies, comment out if not needed +# RUN install-php-extensions @composer + +# Dev mode PHP config (overrides zz-phprun.ini) +RUN echo '; Dev mode PHP config (overrides zz-phprun.ini)' > /usr/local/etc/php/conf.d/zzz-dev.ini && \ + echo 'opcache.enable = 0' >> /usr/local/etc/php/conf.d/zzz-dev.ini && \ + echo 'opcache.jit_buffer_size = 0' >> /usr/local/etc/php/conf.d/zzz-dev.ini && \ + echo 'display_errors = On' >> /usr/local/etc/php/conf.d/zzz-dev.ini && \ + echo 'error_reporting = E_ALL' >> /usr/local/etc/php/conf.d/zzz-dev.ini + +# Xdebug dev config +RUN echo '; Xdebug dev config' > /usr/local/etc/php/conf.d/zzz-xdebug.ini && \ + echo 'xdebug.mode = debug,develop' >> /usr/local/etc/php/conf.d/zzz-xdebug.ini && \ + echo 'xdebug.start_with_request = trigger' >> /usr/local/etc/php/conf.d/zzz-xdebug.ini && \ + echo 'xdebug.client_host = host.docker.internal' >> /usr/local/etc/php/conf.d/zzz-xdebug.ini && \ + echo 'xdebug.client_port = 9003' >> /usr/local/etc/php/conf.d/zzz-xdebug.ini && \ + echo 'xdebug.discover_client_host = true' >> /usr/local/etc/php/conf.d/zzz-xdebug.ini && \ + echo 'xdebug.idekey = DOCKER_DEV' >> /usr/local/etc/php/conf.d/zzz-xdebug.ini + +VOLUME /var/www/html/runtime +VOLUME /var/www/html/public/storage +VOLUME /var/www/html/public/build +VOLUME /var/www/html/storage + +# Mount main directory, alternatively mount the main directory directly and remove the specific volumes above +# VOLUME ["/var/www/html"] + +# Expose Nginx port +EXPOSE 80 + +RUN chmod +x /var/www/html/docker/run.sh + +# Start Nginx and PHP-FPM +ENTRYPOINT ["/bin/bash", "/var/www/html/docker/run.sh"] + +CMD ["server"] diff --git a/source/stack/docker-dev/docker-compose.yaml b/source/stack/docker-dev/docker-compose.yaml new file mode 100644 index 0000000..7d2903f --- /dev/null +++ b/source/stack/docker-dev/docker-compose.yaml @@ -0,0 +1,54 @@ + +name: ulthon_admin + + +services: + ulthon_admin: + build: + context: . + dockerfile: Dockerfile + restart: unless-stopped + ports: + - "8800:80" + volumes: + - ./:/var/www/html + extra_hosts: + - "host.docker.internal:host-gateway" + depends_on: + mysql: + condition: service_healthy + + mysql: + image: mysql:8.0 + restart: unless-stopped + ports: + - "13306:3306" + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_DATABASE: ulthon + volumes: + - ./docker-dev/mysql:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + + redis: + image: redis:7-alpine + restart: unless-stopped + ports: + - "16379:6379" + volumes: + - ./docker-dev/redis:/data + + phpmyadmin: + image: phpmyadmin:latest + restart: unless-stopped + ports: + - "18888:80" + environment: + PMA_HOST: mysql + depends_on: + mysql: + condition: service_healthy diff --git a/source/stack/stack.json b/source/stack/stack.json index f887bcb..dcbc6db 100644 --- a/source/stack/stack.json +++ b/source/stack/stack.json @@ -3,7 +3,8 @@ "managed_files": [ "Dockerfile", "docker-compose.yaml", - ".gitea/workflows/build-and-deploy.yml" + ".gitea/workflows/build-and-deploy.yml", + ".docker-dev.env" ], "modes": { "default": { @@ -17,6 +18,10 @@ "base-build": { "description": "基础镜像 + 应用构建模式", "author_only": true + }, + "docker-dev": { + "description": "Docker 开发模式(nginx+php-fpm+MySQL+Redis+phpMyAdmin+Xdebug)", + "author_only": false } } }