From 28576def0a32b107c8b54fc0eb0d860b1333e0f9 Mon Sep 17 00:00:00 2001 From: augushong Date: Wed, 22 Jul 2026 01:27:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(stack):=20=E5=90=88=E5=B9=B6=20docker-dev-?= =?UTF-8?q?sync=20=E5=88=B0=20docker-dev=20=E9=85=8D=E7=BD=AE=EF=BC=8C?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=20Dockerfile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/stack/docker-dev-sync/.docker-dev.env | 66 -------------- source/stack/docker-dev-sync/Dockerfile | 86 ------------------- .../stack/docker-dev-sync/docker-compose.yaml | 59 ------------- .../docker-dev-sync/source/docker/run.sh | 62 ------------- .../docker-dev-sync/source/docker/zzz-dev.ini | 9 -- .../source/docker/zzz-xdebug.ini | 7 -- source/stack/docker-dev/.docker-dev.env | 3 + .../.dockerignore | 1 - source/stack/docker-dev/Dockerfile | 8 +- source/stack/docker-dev/docker-compose.yaml | 21 +++++ .../source/docker/sync.sh | 2 - 11 files changed, 30 insertions(+), 294 deletions(-) delete mode 100644 source/stack/docker-dev-sync/.docker-dev.env delete mode 100644 source/stack/docker-dev-sync/Dockerfile delete mode 100644 source/stack/docker-dev-sync/docker-compose.yaml delete mode 100644 source/stack/docker-dev-sync/source/docker/run.sh delete mode 100644 source/stack/docker-dev-sync/source/docker/zzz-dev.ini delete mode 100644 source/stack/docker-dev-sync/source/docker/zzz-xdebug.ini rename source/stack/{docker-dev-sync => docker-dev}/.dockerignore (77%) rename source/stack/{docker-dev-sync => docker-dev}/source/docker/sync.sh (97%) diff --git a/source/stack/docker-dev-sync/.docker-dev.env b/source/stack/docker-dev-sync/.docker-dev.env deleted file mode 100644 index 47f30d9..0000000 --- a/source/stack/docker-dev-sync/.docker-dev.env +++ /dev/null @@ -1,66 +0,0 @@ -# Docker 开发模式配置(sync 优化版) - 使用方式: 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=debug_mysql - -[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 - -# Sync polling interval (seconds) -SYNC_INTERVAL=3 diff --git a/source/stack/docker-dev-sync/Dockerfile b/source/stack/docker-dev-sync/Dockerfile deleted file mode 100644 index cafdf20..0000000 --- a/source/stack/docker-dev-sync/Dockerfile +++ /dev/null @@ -1,86 +0,0 @@ -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 and rsync (for sync mechanism) -RUN apt-get install -y nginx rsync - -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) -COPY source/docker/zzz-dev.ini /usr/local/etc/php/conf.d/zzz-dev.ini -COPY source/docker/zzz-xdebug.ini /usr/local/etc/php/conf.d/zzz-xdebug.ini - -# Create source mount point (host code staging area) -RUN mkdir -p /var/www/source - -VOLUME /var/www/html/runtime -VOLUME /var/www/html/public/storage -VOLUME /var/www/html/public/build -VOLUME /var/www/html/storage - -# Expose Nginx port -EXPOSE 8000 - -RUN chmod +x /var/www/html/source/docker/sync.sh -RUN chmod +x /var/www/html/source/docker/run.sh - -# Start Nginx and PHP-FPM -ENTRYPOINT ["/bin/bash", "/var/www/html/source/docker/run.sh"] - -CMD ["server"] diff --git a/source/stack/docker-dev-sync/docker-compose.yaml b/source/stack/docker-dev-sync/docker-compose.yaml deleted file mode 100644 index 931cbe7..0000000 --- a/source/stack/docker-dev-sync/docker-compose.yaml +++ /dev/null @@ -1,59 +0,0 @@ - -# 一般不需要配置name,默认是目录名,但是如果你的系统中有同名的目录,需要手动配置 -# name: ulthon_admin - -services: - ulthon_admin: - build: - context: . - dockerfile: Dockerfile - restart: unless-stopped - ports: - - "8000:8000" - volumes: - # Host code mounted to staging area (not the runtime directory) - # sync.sh will rsync from here to /var/www/html - - ./:/var/www/source - environment: - # Sync polling interval in seconds (default: 3) - - SYNC_INTERVAL=${SYNC_INTERVAL:-3} - 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/docker-dev-sync/source/docker/run.sh b/source/stack/docker-dev-sync/source/docker/run.sh deleted file mode 100644 index 4ccd32f..0000000 --- a/source/stack/docker-dev-sync/source/docker/run.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -# ============================================ -# run.sh - docker-dev-sync entrypoint -# ============================================ -# 1. Syncs host code from /var/www/source to /var/www/html -# 2. Configures nginx and php-fpm -# 3. Starts background sync polling -# 4. Starts application services -# ============================================ - -# ---- Step 1: Initial code sync (foreground, blocking) ---- -echo "[run] Checking source mount..." - -if [ -d "/var/www/source" ] && [ "$(ls -A /var/www/source 2>/dev/null)" ]; then - echo "[run] Source directory mounted, performing initial sync..." - /bin/bash /var/www/html/source/docker/sync.sh init - echo "[run] Initial sync finished." - - # Start background polling - /bin/bash /var/www/html/source/docker/sync.sh watch & - SYNC_PID=$! - echo "[run] Background sync polling started (PID: ${SYNC_PID}, interval: ${SYNC_INTERVAL:-3}s)." -else - echo "[run] WARNING: /var/www/source is not mounted or empty." - echo "[run] Running with build-time files only (no live sync)." -fi - -# ---- Step 2: Configure services ---- - -# Copy nginx config -cp /var/www/html/source/docker/nginx.conf /etc/nginx/sites-available/default -ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default - -# Copy php config files -cp /var/www/html/source/docker/zz-phprun.ini /usr/local/etc/php/conf.d -cp /var/www/html/source/docker/zz-phpfpm.conf /usr/local/etc/php-fpm.d - -# Dev mode: override production PHP config (Opcache, error display, Xdebug) -cp /var/www/html/source/docker/zzz-dev.ini /usr/local/etc/php/conf.d -cp /var/www/html/source/docker/zzz-xdebug.ini /usr/local/etc/php/conf.d - -# ---- Step 3: Set directory permissions ---- -mkdir -p /var/www/html/runtime && chmod -R 777 /var/www/html/runtime -mkdir -p /var/www/html/public/storage && chmod -R 777 /var/www/html/public/storage -mkdir -p /var/www/html/public/build && chmod -R 777 /var/www/html/public/build -mkdir -p /var/www/html/storage && chmod -R 777 /var/www/html/storage -mkdir -p /var/www/html/memoryspace && chown -R www-data:www-data /var/www/html/memoryspace - -# ---- Step 4: Output parameters and start services ---- -echo "参数为:$@" - -if [ "$1" = "server" ] || [ "$1" = "" ]; then - # Run timer (background) - su -www-data -c "nohup php /var/www/html/think timer --local --quiet &" - # Run nginx - service nginx start - # Run php-fpm (foreground, keeps container alive) - php-fpm -else - php "/var/www/html/""$@" -fi diff --git a/source/stack/docker-dev-sync/source/docker/zzz-dev.ini b/source/stack/docker-dev-sync/source/docker/zzz-dev.ini deleted file mode 100644 index 23d6bf1..0000000 --- a/source/stack/docker-dev-sync/source/docker/zzz-dev.ini +++ /dev/null @@ -1,9 +0,0 @@ -; Dev mode PHP config (overrides zz-phprun.ini) -opcache.enable = 1 -opcache.memory_consumption = 128 -opcache.validate_timestamps = 1 -opcache.revalidate_freq = 3 -opcache.interned_strings_buffer = 16 -opcache.max_accelerated_files = 20000 -display_errors = On -error_reporting = E_ALL diff --git a/source/stack/docker-dev-sync/source/docker/zzz-xdebug.ini b/source/stack/docker-dev-sync/source/docker/zzz-xdebug.ini deleted file mode 100644 index 040328a..0000000 --- a/source/stack/docker-dev-sync/source/docker/zzz-xdebug.ini +++ /dev/null @@ -1,7 +0,0 @@ -; Xdebug dev config -xdebug.mode = debug,develop -xdebug.start_with_request = yes -xdebug.client_host = host.docker.internal -xdebug.client_port = 9003 -xdebug.discover_client_host = true -xdebug.idekey = DOCKER_DEV diff --git a/source/stack/docker-dev/.docker-dev.env b/source/stack/docker-dev/.docker-dev.env index 169bcf4..8ef264a 100644 --- a/source/stack/docker-dev/.docker-dev.env +++ b/source/stack/docker-dev/.docker-dev.env @@ -61,3 +61,6 @@ STRICT_VIEW_JS=true MAKE_VIEW_WHILE_MISSING=false UPDATE_LEVEL=production + +# sync profile only +SYNC_INTERVAL=3 diff --git a/source/stack/docker-dev-sync/.dockerignore b/source/stack/docker-dev/.dockerignore similarity index 77% rename from source/stack/docker-dev-sync/.dockerignore rename to source/stack/docker-dev/.dockerignore index 1467d9e..3209e08 100644 --- a/source/stack/docker-dev-sync/.dockerignore +++ b/source/stack/docker-dev/.dockerignore @@ -3,5 +3,4 @@ node_modules runtime docker-dev -docker-dev-sync *.sock diff --git a/source/stack/docker-dev/Dockerfile b/source/stack/docker-dev/Dockerfile index 178d340..089e999 100644 --- a/source/stack/docker-dev/Dockerfile +++ b/source/stack/docker-dev/Dockerfile @@ -7,8 +7,8 @@ RUN rm -rf /etc/apt/sources.list.d/* \ RUN apt-get update -# Install nginx -RUN apt-get install -y nginx +# Install nginx and rsync (rsync used by sync profile) +RUN apt-get install -y nginx rsync 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/ @@ -66,6 +66,9 @@ RUN composer dump-autoload COPY source/docker/zzz-dev.ini /usr/local/etc/php/conf.d/zzz-dev.ini COPY source/docker/zzz-xdebug.ini /usr/local/etc/php/conf.d/zzz-xdebug.ini +# Create source mount point (host code staging area for sync profile) +RUN mkdir -p /var/www/source + VOLUME /var/www/html/runtime VOLUME /var/www/html/public/storage VOLUME /var/www/html/public/build @@ -78,6 +81,7 @@ VOLUME /var/www/html/storage EXPOSE 8000 RUN chmod +x /var/www/html/source/docker/run.sh +RUN chmod +x /var/www/html/source/docker/sync.sh # Start Nginx and PHP-FPM ENTRYPOINT ["/bin/bash", "/var/www/html/source/docker/run.sh"] diff --git a/source/stack/docker-dev/docker-compose.yaml b/source/stack/docker-dev/docker-compose.yaml index 06eb02b..2b39a9e 100644 --- a/source/stack/docker-dev/docker-compose.yaml +++ b/source/stack/docker-dev/docker-compose.yaml @@ -52,3 +52,24 @@ services: depends_on: mysql: condition: service_healthy + + # Sync profile: Windows I/O optimization via rsync host->container + # Enable with: COMPOSE_PROFILES=sync docker compose up -d + # Note: ulthon_admin and ulthon_admin_sync both bind port 8000, do not run together. + ulthon_admin_sync: + profiles: ["sync"] + build: + context: ../../.. + dockerfile: source/stack/docker-dev/Dockerfile + restart: unless-stopped + ports: + - "8000:8000" + volumes: + - ../../..:/var/www/source + environment: + - SYNC_INTERVAL=${SYNC_INTERVAL:-3} + extra_hosts: + - "host.docker.internal:host-gateway" + depends_on: + mysql: + condition: service_healthy diff --git a/source/stack/docker-dev-sync/source/docker/sync.sh b/source/stack/docker-dev/source/docker/sync.sh similarity index 97% rename from source/stack/docker-dev-sync/source/docker/sync.sh rename to source/stack/docker-dev/source/docker/sync.sh index 7d08798..793b53f 100644 --- a/source/stack/docker-dev-sync/source/docker/sync.sh +++ b/source/stack/docker-dev/source/docker/sync.sh @@ -28,11 +28,9 @@ build_exclude_args() { --exclude='.sisyphus' --exclude='.opencode' --exclude='.agents' - --exclude='.docker-dev-sync' --exclude='.docker-dev.env' --exclude='.docker-dev' --exclude='docker-dev' - --exclude='docker-dev-sync' --exclude='node_modules' --exclude='runtime' --exclude='.idea'