fix(docker): 针对已经存在的容器或后期新建的容器权限设置更新

This commit is contained in:
2025-12-05 17:01:50 +08:00
parent 6b41e46f30
commit 8f783fd765
2 changed files with 55 additions and 15 deletions

View File

@@ -1,19 +1,59 @@
#!/bin/bash
set -e
# 确保目录所有者为www-data, 组为www-data, 权限为755
# 这是因为 PHP 进程实际运行时使用的是 Web 服务器用户(如 www-data而不是 root 用户
chown -R www-data:www-data /var/www/html
# 设置全局umask
umask 0002
# 检查并创建必要的目录
for dir in "/var/www/html/runtime" "/var/www/html/upload"; do
if [ ! -d "$dir" ]; then
echo "=== ThinkPHP Docker权限初始化 ==="
# 修复目录所有权和权限
fix_directory_permissions() {
local dir=$1
echo "修复目录权限: $dir"
# 确保目录存在
mkdir -p "$dir"
echo "创建目录: $dir"
fi
# 设置所有权
chown -R www-data:www-data "$dir"
# 设置权限
chmod -R 755 "$dir"
echo "设置权限: $dir -> 755"
chmod -R 775 "$dir"
# 设置setgid权限
chmod g+s "$dir"
# 尝试设置ACL如果支持
if command -v setfacl >/dev/null 2>&1; then
setfacl -d -m u:www-data:rwx -m u:root:rwx "$dir" 2>/dev/null || true
setfacl -Rm u:www-data:rwx "$dir" 2>/dev/null || true
fi
echo "$dir 权限设置完成"
}
# 处理所有需要权限的目录
directories=("runtime" "upload")
for dir in "${directories[@]}"; do
fix_directory_permissions "/var/www/html/$dir"
done
# 验证权限
echo "=== 权限验证 ==="
echo "当前用户: $(whoami)"
echo "当前UID: $(id -u), GID: $(id -g)"
echo "当前umask: $(umask)"
# 测试写入权限
sudo -u www-data mkdir -p /var/www/html/runtime/test_dir 2>/dev/null && \
echo "✅ runtime目录新建子目录测试通过" || \
echo "❌ runtime目录新建子目录失败"
sudo -u www-data mkdir -p /var/www/html/upload/test_dir 2>/dev/null && \
echo "✅ upload目录新建子目录测试通过" || \
echo "❌ upload目录新建子目录失败"
echo "=== 启动应用 ==="
# 执行原有的启动命令
exec "$@"

View File

@@ -7,17 +7,17 @@ loglevel=info
pidfile=/var/run/supervisord.pid
[program:chmod]
command=chown -R www-data:www-data ./runtime/ && chmod -R 755 ./runtime/ && chown -R www-data:www-data ./upload/ && chmod -R 755 ./upload/
command=/bin/bash -c "while true; do chmod -R 775 ./runtime/ ./uploads/ 2>/dev/null || true; sleep 30; done"
directory=/var/www/html
autostart=true
autorestart=false
startretries=3
startsecs=1
autorestart=true
stopasgroup=true
killasgroup=true
[program:php-fpm]
command=php-fpm
user=www-data
umask=0002
autostart=true
autorestart=true
startretries=3