fix(stack): 开发模式移除VOLUME消除runtime遮蔽,run.sh权限与su写法修复

- docker-dev/docker-dev-sync 删除 4 行 VOLUME:匿名卷会遮蔽整目录 bind mount 的宿主 runtime(已实证:宿主看不到容器日志)
- run.sh 统一四目录 777 + umask + 正确 su 写法(-s /bin/sh,www-data 为 nologin)
- serve/full/author 生产模式 VOLUME 保留作 docker run -v 兜底
This commit is contained in:
augushong
2026-09-09 14:45:21 +00:00
parent 553047025c
commit e5cbb48bcc
7 changed files with 18 additions and 21 deletions

View File

@@ -29,8 +29,9 @@ echo "参数为:$@"
# TODO:增加自动批量运行并阻塞的脚本,比如:group default ,会调用auto.sh的default的部分,最终阻塞,auth.sh的default部分,可能会运行一系列的命令,比如清空缓存,踢人下线,重置密码 # TODO:增加自动批量运行并阻塞的脚本,比如:group default ,会调用auto.sh的default的部分,最终阻塞,auth.sh的default部分,可能会运行一系列的命令,比如清空缓存,踢人下线,重置密码
if [ "$1" = "server" ] || [ "$1" = "" ]; then if [ "$1" = "server" ] || [ "$1" = "" ]; then
# 运行定时任务 TODO:以指定用户运行 # 运行定时任务(以 www-data 运行;www-data 是 nologin 账户,必须 -s /bin/sh 覆盖 shell,用户名放最后)
su - www-data -c "nohup php /var/www/html/think timer --local --quiet &" # 注意不要写成 su -www-data(会被解析为 -w 选项导致以 root 运行)或 su - www-data(nologin 直接报错)
su -s /bin/sh -c "nohup php /var/www/html/think timer --local --quiet &" www-data
# 运行nginx # 运行nginx
service nginx start service nginx start
# 运行php-fpm # 运行php-fpm

View File

@@ -84,10 +84,8 @@ COPY source/stack/docker-dev-sync/source/docker/zzz-xdebug.ini /usr/local/etc/ph
# Create source mount point (host code staging area) # Create source mount point (host code staging area)
RUN mkdir -p /var/www/source RUN mkdir -p /var/www/source
VOLUME /var/www/html/runtime # 同步模式:代码 rsync 到容器本地,runtime 由 run.sh 启动时 chmod 777 重建,
VOLUME /var/www/html/public/storage # sync.sh 已排除 runtime;匿名卷在容器重建后并不延续,故不声明 VOLUME
VOLUME /var/www/html/public/build
VOLUME /var/www/html/storage
# Expose Nginx port # Expose Nginx port
EXPOSE 8000 EXPOSE 8000

View File

@@ -67,8 +67,8 @@ mkdir -p /var/www/html/runtime/nginx && chmod 777 /var/www/html/runtime/nginx
echo "参数为:$@" echo "参数为:$@"
if [ "$1" = "server" ] || [ "$1" = "" ]; then if [ "$1" = "server" ] || [ "$1" = "" ]; then
# Run timer (background) # Run timer (background, as www-data; nologin account requires -s /bin/sh with username last)
su -www-data -c "nohup php /var/www/html/think timer --local --quiet &" su -s /bin/sh -c "nohup php /var/www/html/think timer --local --quiet &" www-data
# Run nginx # Run nginx
service nginx start service nginx start
# Run php-fpm (foreground, keeps container alive) # Run php-fpm (foreground, keeps container alive)

View File

@@ -84,13 +84,8 @@ RUN echo 'auto_prepend_file = /opt/xhprof/xhprof-bootstrap.php' > /usr/local/etc
COPY source/stack/docker-dev/source/docker/zzz-dev.ini /usr/local/etc/php/conf.d/zzz-dev.ini COPY source/stack/docker-dev/source/docker/zzz-dev.ini /usr/local/etc/php/conf.d/zzz-dev.ini
COPY source/stack/docker-dev/source/docker/zzz-xdebug.ini /usr/local/etc/php/conf.d/zzz-xdebug.ini COPY source/stack/docker-dev/source/docker/zzz-xdebug.ini /usr/local/etc/php/conf.d/zzz-xdebug.ini
VOLUME /var/www/html/runtime # 开发模式整目录 bind mount:子路径 VOLUME 匿名卷会遮蔽宿主 runtime 等目录,
VOLUME /var/www/html/public/storage # 权限与持久化由 run.sh 启动时 chmod 777 + 宿主目录直接承担,故不声明 VOLUME
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 Nginx port
EXPOSE 8000 EXPOSE 8000

View File

@@ -47,8 +47,9 @@ echo "参数为:$@"
# TODO:增加自动批量运行并阻塞的脚本,比如:group default ,会调用auto.sh的default的部分,最终阻塞,auth.sh的default部分,可能会运行一系列的命令,比如清空缓存,踢人下线,重置密码 # TODO:增加自动批量运行并阻塞的脚本,比如:group default ,会调用auto.sh的default的部分,最终阻塞,auth.sh的default部分,可能会运行一系列的命令,比如清空缓存,踢人下线,重置密码
if [ "$1" = "server" ] || [ "$1" = "" ]; then if [ "$1" = "server" ] || [ "$1" = "" ]; then
# 运行定时任务 TODO:以指定用户运行 # 运行定时任务(以 www-data 运行;www-data 是 nologin 账户,必须 -s /bin/sh 覆盖 shell,用户名放最后)
su -www-data -c "nohup php /var/www/html/think timer --local --quiet &" # 注意不要写成 su -www-data(会被解析为 -w 选项导致以 root 运行)或 su - www-data(nologin 直接报错)
su -s /bin/sh -c "nohup php /var/www/html/think timer --local --quiet &" www-data
# 运行nginx # 运行nginx
service nginx start service nginx start
# 运行php-fpm # 运行php-fpm

View File

@@ -36,8 +36,9 @@ echo "参数为:$@"
# TODO:增加自动批量运行并阻塞的脚本,比如:group default ,会调用auto.sh的default的部分,最终阻塞,auth.sh的default部分,可能会运行一系列的命令,比如清空缓存,踢人下线,重置密码 # TODO:增加自动批量运行并阻塞的脚本,比如:group default ,会调用auto.sh的default的部分,最终阻塞,auth.sh的default部分,可能会运行一系列的命令,比如清空缓存,踢人下线,重置密码
if [ "$1" = "server" ] || [ "$1" = "" ]; then if [ "$1" = "server" ] || [ "$1" = "" ]; then
# 运行定时任务 TODO:以指定用户运行 # 运行定时任务(以 www-data 运行;www-data 是 nologin 账户,必须 -s /bin/sh 覆盖 shell,用户名放最后)
su - www-data -c "nohup php /var/www/html/think timer --local --quiet &" # 注意不要写成 su -www-data(会被解析为 -w 选项导致以 root 运行)或 su - www-data(nologin 直接报错)
su -s /bin/sh -c "nohup php /var/www/html/think timer --local --quiet &" www-data
# 运行nginx # 运行nginx
service nginx start service nginx start
# 运行php-fpm # 运行php-fpm

View File

@@ -36,8 +36,9 @@ echo "参数为:$@"
# TODO:增加自动批量运行并阻塞的脚本,比如:group default ,会调用auto.sh的default的部分,最终阻塞,auth.sh的default部分,可能会运行一系列的命令,比如清空缓存,踢人下线,重置密码 # TODO:增加自动批量运行并阻塞的脚本,比如:group default ,会调用auto.sh的default的部分,最终阻塞,auth.sh的default部分,可能会运行一系列的命令,比如清空缓存,踢人下线,重置密码
if [ "$1" = "server" ] || [ "$1" = "" ]; then if [ "$1" = "server" ] || [ "$1" = "" ]; then
# 运行定时任务 TODO:以指定用户运行 # 运行定时任务(以 www-data 运行;www-data 是 nologin 账户,必须 -s /bin/sh 覆盖 shell,用户名放最后)
su - www-data -c "nohup php /var/www/html/think timer --local --quiet &" # 注意不要写成 su -www-data(会被解析为 -w 选项导致以 root 运行)或 su - www-data(nologin 直接报错)
su -s /bin/sh -c "nohup php /var/www/html/think timer --local --quiet &" www-data
# 运行nginx # 运行nginx
service nginx start service nginx start
# 运行php-fpm # 运行php-fpm