diff --git a/source/stack/author/source/docker/run.sh b/source/stack/author/source/docker/run.sh index c7630eb..c94bee4 100644 --- a/source/stack/author/source/docker/run.sh +++ b/source/stack/author/source/docker/run.sh @@ -29,8 +29,9 @@ 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 --quiet &" + # 运行定时任务(以 www-data 运行;www-data 是 nologin 账户,必须 -s /bin/sh 覆盖 shell,用户名放最后) + # 注意不要写成 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 service nginx start # 运行php-fpm diff --git a/source/stack/docker-dev-sync/Dockerfile b/source/stack/docker-dev-sync/Dockerfile index ea4154b..f9e402d 100644 --- a/source/stack/docker-dev-sync/Dockerfile +++ b/source/stack/docker-dev-sync/Dockerfile @@ -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) 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 +# 同步模式:代码 rsync 到容器本地,runtime 由 run.sh 启动时 chmod 777 重建, +# sync.sh 已排除 runtime;匿名卷在容器重建后并不延续,故不声明 VOLUME # Expose Nginx port EXPOSE 8000 diff --git a/source/stack/docker-dev-sync/source/docker/run.sh b/source/stack/docker-dev-sync/source/docker/run.sh index 6edf195..0098153 100644 --- a/source/stack/docker-dev-sync/source/docker/run.sh +++ b/source/stack/docker-dev-sync/source/docker/run.sh @@ -67,8 +67,8 @@ mkdir -p /var/www/html/runtime/nginx && chmod 777 /var/www/html/runtime/nginx echo "参数为:$@" if [ "$1" = "server" ] || [ "$1" = "" ]; then - # Run timer (background) - su -www-data -c "nohup php /var/www/html/think timer --local --quiet &" + # Run timer (background, as www-data; nologin account requires -s /bin/sh with username last) + su -s /bin/sh -c "nohup php /var/www/html/think timer --local --quiet &" www-data # Run nginx service nginx start # Run php-fpm (foreground, keeps container alive) diff --git a/source/stack/docker-dev/Dockerfile b/source/stack/docker-dev/Dockerfile index 3afa085..c43125c 100644 --- a/source/stack/docker-dev/Dockerfile +++ b/source/stack/docker-dev/Dockerfile @@ -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-xdebug.ini /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"] +# 开发模式整目录 bind mount:子路径 VOLUME 匿名卷会遮蔽宿主 runtime 等目录, +# 权限与持久化由 run.sh 启动时 chmod 777 + 宿主目录直接承担,故不声明 VOLUME # Expose Nginx port EXPOSE 8000 diff --git a/source/stack/docker-dev/source/docker/run.sh b/source/stack/docker-dev/source/docker/run.sh index 57ba496..9b2e5bb 100644 --- a/source/stack/docker-dev/source/docker/run.sh +++ b/source/stack/docker-dev/source/docker/run.sh @@ -47,8 +47,9 @@ 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 --quiet &" + # 运行定时任务(以 www-data 运行;www-data 是 nologin 账户,必须 -s /bin/sh 覆盖 shell,用户名放最后) + # 注意不要写成 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 service nginx start # 运行php-fpm diff --git a/source/stack/docker-serve/source/docker/run.sh b/source/stack/docker-serve/source/docker/run.sh index fe2324c..2d5fc0a 100644 --- a/source/stack/docker-serve/source/docker/run.sh +++ b/source/stack/docker-serve/source/docker/run.sh @@ -36,8 +36,9 @@ 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 --quiet &" + # 运行定时任务(以 www-data 运行;www-data 是 nologin 账户,必须 -s /bin/sh 覆盖 shell,用户名放最后) + # 注意不要写成 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 service nginx start # 运行php-fpm diff --git a/source/stack/full/source/docker/run.sh b/source/stack/full/source/docker/run.sh index fe2324c..2d5fc0a 100644 --- a/source/stack/full/source/docker/run.sh +++ b/source/stack/full/source/docker/run.sh @@ -36,8 +36,9 @@ 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 --quiet &" + # 运行定时任务(以 www-data 运行;www-data 是 nologin 账户,必须 -s /bin/sh 覆盖 shell,用户名放最后) + # 注意不要写成 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 service nginx start # 运行php-fpm