You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Virtualmin上通过Git部署Laravel项目(含权限配置)

分步解决Virtualmin下Git部署Laravel的问题

我来一步步帮你搞定这个Git部署Laravel的问题——毕竟Virtualmin的用户权限体系确实容易踩坑,结合你的场景,咱们从权限修复、钩子优化到Laravel配置全流程梳理:

第一步:修复post-receive钩子的基础问题

你当前的钩子脚本有格式和逻辑上的小问题,先调整脚本内容:

  1. 登录服务器,打开钩子文件:
    nano /home/fantasy/public_html/git/fantasy-website.git/hooks/post-receive
    
  2. 替换为以下规范写法(避免路径歧义,增加容错逻辑):
    #!/bin/bash
    # 定义核心路径变量
    WORK_DIR="/home/fantasy/public_html/website"
    GIT_DIR="/home/fantasy/public_html/git/fantasy-website.git"
    
    # 确保部署目录存在,避免首次推送报错
    if [ ! -d "$WORK_DIR" ]; then
        mkdir -p "$WORK_DIR"
        chown fantasy:fantasy "$WORK_DIR"
    fi
    
    # 执行Git代码 checkout
    git --work-tree="$WORK_DIR" --git-dir="$GIT_DIR" checkout -f
    
    # 给Laravel必要目录设置可写权限(Web服务器需要访问)
    chmod -R 775 "$WORK_DIR/storage" "$WORK_DIR/bootstrap/cache"
    chown -R fantasy:www-data "$WORK_DIR/storage" "$WORK_DIR/bootstrap/cache"
    
  3. 保存退出后,重新赋予执行权限,同时确保钩子文件归属正确:
    chmod +x /home/fantasy/public_html/git/fantasy-website.git/hooks/post-receive
    chown fantasy:fantasy /home/fantasy/public_html/git/fantasy-website.git/hooks/post-receive
    

第二步:确认Git仓库和目标目录的权限归属

Virtualmin的用户权限是隔离的,必须确保所有相关目录都属于fantasy用户:

  1. 检查Git仓库目录权限:
    ls -ld /home/fantasy/public_html/git/fantasy-website.git
    
    输出应显示所有者为fantasy fantasy,如果不是,执行:
    chown -R fantasy:fantasy /home/fantasy/public_html/git/fantasy-website.git
    
  2. 检查部署目录权限:
    ls -ld /home/fantasy/public_html/website
    
    同样确保所有者为fantasy fantasy,如果目录未创建,执行:
    mkdir -p /home/fantasy/public_html/website
    chown fantasy:fantasy /home/fantasy/public_html/website
    chmod 755 /home/fantasy/public_html/website
    

第三步:配置Virtualmin网站根目录指向Laravel的public文件夹

你希望index.php对外可访问,需要把Virtualmin的网站根目录设置为Laravel项目的public目录:

  1. 登录Virtualmin面板,找到fantasy用户对应的网站
  2. 进入Server Configuration > Website Options
  3. 在Document root字段,修改为:/home/fantasy/public_html/website/public
  4. 点击Save保存,Virtualmin会自动重启Apache生效

第四步:完善Laravel部署的核心步骤(可选但必要)

只checkout代码还不够,Laravel需要依赖安装和配置缓存才能正常运行,你可以把这些步骤加入post-receive钩子:

  1. 回到钩子文件,添加以下内容(确保服务器已安装Composer):
    # 安装/更新Composer依赖(生产环境跳过dev包)
    cd "$WORK_DIR"
    composer install --no-dev --optimize-autoloader
    
    # 首次部署复制环境配置文件
    if [ ! -f "$WORK_DIR/.env" ]; then
        cp "$WORK_DIR/.env.example" "$WORK_DIR/.env"
        # 生成Laravel应用密钥
        php artisan key:generate
    fi
    
    # 缓存配置、路由和视图,提升性能
    php artisan config:cache
    php artisan route:cache
    php artisan view:cache
    
  2. 保存退出后,再次确认钩子有执行权限

第五步:测试部署流程

现在从本地重新推送代码,验证整个流程:

  1. 在本地项目目录执行:
    git push origin main
    
  2. 登录服务器,检查/home/fantasy/public_html/website目录是否有最新代码
  3. 访问你的域名,确认Laravel网站是否正常加载

常见问题排查

  • 如果钩子不执行:手动运行钩子看报错信息:
    cd /home/fantasy/public_html/git/fantasy-website.git/hooks
    ./post-receive
    
    根据报错排查(比如缺少Composer、路径权限不足)
  • 如果Laravel显示权限错误:再次确认storage和bootstrap/cache目录的所有者是fantasy:www-data,权限为775
  • 如果网站403错误:检查Virtualmin的Document Root是否正确,以及public目录权限为755

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 14:07:52