feat(stack): 新增 docker-dev 开发模式并自动清理文件
All checks were successful
build-and-deploy / 直传代码并部署到 Host15 (push) Successful in 1m13s

- 新增 docker-dev 部署模式,提供包含 nginx+php-fpm、MySQL、Redis、phpMyAdmin 和 Xdebug 的完整 Docker 开发环境
- 在 StackModeService 中重写 applyMode 方法,切换模式时自动删除目标模式中不存在的已管理文件
- 新增 .docker-dev.env 配置文件并纳入 managed_files 管理,切换模式时自动复制或删除
This commit is contained in:
augushong
2026-04-30 22:38:22 +08:00
parent db057aa90e
commit efc335e78f
10 changed files with 734 additions and 15 deletions

View File

@@ -0,0 +1,37 @@
#!/bin/bash
# 将代码中的nginx复制到nginx配置文件中
cp /var/www/html/docker/nginx.conf /etc/nginx/sites-available/default
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# 将代码中的php配置文件复制到php配置文件中
cp /var/www/html/docker/zz-phprun.ini /usr/local/etc/php/conf.d
cp /var/www/html/docker/zz-phpfpm.conf /usr/local/etc/php-fpm.d
# 设置目录权限,确保挂载卷后依然有效
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
# 运行redis
# nohup redis-server --requirepass "" &
# 输出参数
echo "参数为:$@"
# TODO增加自动批量运行并阻塞的脚本比如group default 会调用auto.sh的default的部分最终阻塞auth.sh的default部分可能会运行一系列的命令比如清空缓存踢人下线重置密码
if [ "$1" = "server" ] || [ "$1" = "" ]; then
# 运行定时任务 TODO:以指定用户运行
su - www-data -c "nohup php /var/www/html/think timer --local --quit &"
# 运行nginx
service nginx start
# 运行php-fpm
php-fpm
else
php "/var/www/html/""$@"
fi

View File

@@ -0,0 +1,6 @@
.git
.sisyphus
node_modules
runtime
docker-dev
*.sock

View File

@@ -63,20 +63,8 @@ RUN composer dump-autoload
# 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
COPY docker/zzz-dev.ini /usr/local/etc/php/conf.d/zzz-dev.ini
COPY docker/zzz-xdebug.ini /usr/local/etc/php/conf.d/zzz-xdebug.ini
VOLUME /var/www/html/runtime
VOLUME /var/www/html/public/storage

View File

@@ -0,0 +1,41 @@
#!/bin/bash
# 将代码中的nginx复制到nginx配置文件中
cp /var/www/html/docker/nginx.conf /etc/nginx/sites-available/default
ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
# 将代码中的php配置文件复制到php配置文件中
cp /var/www/html/docker/zz-phprun.ini /usr/local/etc/php/conf.d
cp /var/www/html/docker/zz-phpfpm.conf /usr/local/etc/php-fpm.d
# 开发模式覆盖生产PHP配置Opcache、错误显示、Xdebug
cp /var/www/html/docker/zzz-dev.ini /usr/local/etc/php/conf.d
cp /var/www/html/docker/zzz-xdebug.ini /usr/local/etc/php/conf.d
# 设置目录权限,确保挂载卷后依然有效
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
# 运行redis
# nohup redis-server --requirepass "" &
# 输出参数
echo "参数为:$@"
# TODO增加自动批量运行并阻塞的脚本比如group default 会调用auto.sh的default的部分最终阻塞auth.sh的default部分可能会运行一系列的命令比如清空缓存踢人下线重置密码
if [ "$1" = "server" ] || [ "$1" = "" ]; then
# 运行定时任务 TODO:以指定用户运行
su -www-data -c "nohup php /var/www/html/think timer --local --quit &"
# 运行nginx
service nginx start
# 运行php-fpm
php-fpm
else
php "/var/www/html/""$@"
fi

View File

@@ -0,0 +1,9 @@
; 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

View File

@@ -0,0 +1,7 @@
; 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

View File

@@ -4,7 +4,11 @@
"Dockerfile",
"docker-compose.yaml",
".gitea/workflows/build-and-deploy.yml",
".docker-dev.env"
".docker-dev.env",
".dockerignore",
"docker/zzz-dev.ini",
"docker/zzz-xdebug.ini",
"docker/run.sh"
],
"modes": {
"default": {