Linux服务器上Laravel如何实现自动化运维
导读:Linux服务器上 Laravel 自动化运维落地方案 一 自动化部署流水线 基础准备 服务器具备:Linux、Nginx/Apache、PHP-FPM、Git、Composer、数据库(如 MySQL/PostgreSQL)。 配...
Linux服务器上 Laravel 自动化运维落地方案
一 自动化部署流水线
-
基础准备
- 服务器具备:Linux、Nginx/Apache、PHP-FPM、Git、Composer、数据库(如 MySQL/PostgreSQL)。
- 配置 SSH 免密登录:本地生成密钥并将公钥加入服务器的 ~/.ssh/authorized_keys,便于无交互拉取代码与执行远程命令。
- Web 服务指向 Laravel 的 public 目录,Nginx 典型配置包含:root 指向 /path/to/laravel/public;location 使用 try_files $uri $uri/ /index.php?$query_string;PHP 处理使用 fastcgi_pass(如 unix:/var/run/php/php8.1-fpm.sock 或 127.0.0.1:9000)。
-
零停机部署脚本示例(支持回滚)
- 目录约定:/var/www/laravel/current(软链)、/var/www/laravel/releases/{ timestamp} 、/var/www/laravel/shared/storage
- 核心流程:拉取代码 → 安装依赖 → 创建/更新软链 → 发布 .env 与 storage → 权限修复 → 迁移与优化 → 重启 FPM(避免重启 Nginx)
deploy.sh
#!/usr/bin/env bash set -e APP_DIR="/var/www/laravel" REPO_URL="git@github.com:org/repo.git" BRANCH="${ 1:-main} " TIME=$(date +%Y%m%d%H%M%S) RELEASE="$APP_DIR/releases/$TIME" CURRENT="$APP_DIR/current" SHARED="$APP_DIR/shared" ARTISAN="$RELEASE/artisan" # 1) 拉取代码 git clone --depth 1 --branch "$BRANCH" "$REPO_URL" "$RELEASE" # 2) 安装依赖 cd "$RELEASE" composer install --no-interaction --prefer-dist --optimize-autoloader # 3) 共享文件与目录 mkdir -p "$SHARED/storage/app/public" "$SHARED/storage/framework/cache" \ "$SHARED/storage/framework/sessions" "$SHARED/storage/framework/views" "$SHARED/log" rm -rf "$RELEASE/storage" ln -nfs "$SHARED/storage" "$RELEASE/storage" ln -nfs "$SHARED/.env" "$RELEASE/.env" # 4) 权限(按实际用户/组调整) chown -R www-data:www-data "$RELEASE" find "$RELEASE" -type f -exec chmod 644 { } \; find "$RELEASE" -type d -exec chmod 755 { } \; chmod -R 775 "$RELEASE/storage" "$RELEASE/bootstrap/cache" # 5) 切换版本 ln -nfs "$RELEASE" "$CURRENT" # 6) 数据库与缓存 php "$ARTISAN" migrate --force php "$ARTISAN" config:cache php "$ARTISAN" route:cache php "$ARTISAN" view:cache php "$ARTISAN" storage:link # 7) 重启 PHP-FPM(避免重启 Nginx) systemctl reload php-fpm || systemctl restart php-fpm echo "Deployed $TIME -> $CURRENT"- 回滚示例:ln -nfs “$APP_DIR/releases/< 上一版本时间戳> ” “$CURRENT” & & systemctl reload php-fpm。
-
CI/CD 与 Webhook
- GitHub Actions 示例(推送到 main 分支触发):
name: Deploy on: push: branches: [ main ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.1' - name: Install deps run: composer install --no-interaction --prefer-dist --optimize-autoloader - name: Deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${ { secrets.HOST } } username: ${ { secrets.USER } } key: ${ { secrets.SSH_KEY } } script: | cd /var/www/laravel & & bash deploy.sh ${ { github.ref_name } } - 轻量替代:在仓库配置 Webhook,服务器用极简服务(如 webhook)接收 push 事件并调用 deploy.sh。
- GitHub Actions 示例(推送到 main 分支触发):
-
平台化运维
- 使用 Laravel Forge 管理服务器与站点,支持一键创建服务器、基于 SSH/Git 的部署、监控与备份,适合团队少运维负担、快速交付。
二 定时任务与队列的自动化
-
任务调度(Laravel Scheduler)
- 在服务器添加单一 Cron 入口(每分钟触发调度器,由 Laravel 判断执行哪些任务):
* * * * * cd /var/www/laravel/current & & php artisan schedule:run > > /dev/null 2> & 1 - 在 app/Console/Kernel.php 定义计划任务:
protected function schedule(Schedule $schedule) { $schedule-> command('emails:send --force')-> daily(); $schedule-> job(new Heartbeat)-> everyFiveMinutes(); $schedule-> exec('node /home/forge/script.js')-> daily(); } - 可按需设置时区、工作日、特定时间窗等约束,便于精细化运行窗口。
- 在服务器添加单一 Cron 入口(每分钟触发调度器,由 Laravel 判断执行哪些任务):
-
队列工作进程(异步任务)
- 配置 Supervisor 守护队列进程(示例):
[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/laravel/current/artisan queue:work --queue=default --tries=3 --sleep=3 autostart=true autorestart=true user=www-data numprocs=2 redirect_stderr=true stdout_logfile=/var/www/laravel/worker.log - 发布/回滚后,建议重启队列以加载新代码:supervisorctl restart laravel-worker:*。
- 配置 Supervisor 守护队列进程(示例):
三 安全与可观测性要点
- 安全加固
- 使用 非 root 部署用户(如 www-data),通过 sudo 精细化授权;.env 与 storage 放在 共享目录,代码目录不可写;严格限制 .env 与 storage 的访问权限;对外仅暴露 public 目录;定期更新系统、PHP、Composer 与依赖包,修补漏洞。
- 日志与监控
- 统一收集 Nginx access/error、PHP-FPM 慢日志、Laravel 应用日志 与 队列日志;为关键业务设置 监控与告警(如队列积压、异常率、磁盘/内存阈值);定期审计部署记录与回滚历史,确保可追溯。
四 一键清单与常见坑
- 一键清单
- 准备服务器与 SSH 免密、配置 Nginx → public、安装 PHP-FPM/Composer/Git。
- 建立部署用户与目录结构(releases/current/shared),准备 deploy.sh 与 回滚 流程。
- 配置 GitHub Actions/GitLab CI 或 Webhook 触发部署;在服务器添加 Scheduler Cron 与 Supervisor 守护队列。
- 接入 日志与监控/告警,制定备份与回滚预案。
- 常见坑与规避
- 直接修改 current 目录导致回滚困难 → 使用 时间戳 releases + 软链 管理版本。
- 忘记执行 storage:link 或 .env 未共享 → 部署脚本中显式处理共享资源。
- 权限错误导致写入失败 → 统一 www-data 与目录权限策略。
- 生产环境误开启 APP_DEBUG=true → 部署脚本或 CI 中强制为 false。
- 队列堆积或进程异常 → 使用 Supervisor 自动拉起并设置合理并发与重试。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux服务器上Laravel如何实现自动化运维
本文地址: https://pptw.com/jishu/786958.html
