温馨提示×

Debian上Laravel如何做队列

小樊
37
2026-10-08 04:11:27
栏目: 智能运维

在 Debian 上运行 Laravel 队列,通常包含 安装环境 → 配置队列 → 启动 Worker → 后台常驻 → 监控 几个步骤。下面按实战流程说明。


一、前置条件(Debian)

1. 安装 PHP 及扩展

sudo apt update
sudo apt install php php-cli php-mbstring php-xml php-curl php-zip php-mysql php-bcmath

2. 安装 Composer

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

3. 安装 Laravel(已有项目可跳过)

composer create-project laravel/laravel example-app
cd example-app

二、配置 Laravel 队列

1. 修改 .env

常用队列驱动:

  • database(最简单,适合 Debian 单机)
  • redis(推荐,性能好)

使用 database

QUEUE_CONNECTION=database

使用 redis

QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

2. 创建数据库队列表(database 驱动)

php artisan queue:table
php artisan migrate

3. 创建队列任务

php artisan make:job SendEmail

编辑 app/Jobs/SendEmail.php:

public function handle()
{
    // 队列逻辑
}

调用:

SendEmail::dispatch($user);

三、启动队列 Worker(关键)

手动运行(测试用)

php artisan queue:work

⚠️ 关闭终端即停止,不适合生产。


四、Debian 生产环境推荐方案

方案 1:Supervisor(最常用 ✅)

1. 安装 Supervisor

sudo apt install supervisor

2. 创建配置

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

示例:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/example-app/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/example-app/storage/logs/worker.log

3. 启动

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

方案 2:Systemd(Debian 原生)

sudo nano /etc/systemd/system/laravel-queue.service
[Unit]
Description=Laravel Queue Worker
After=network.target

[Service]
User=www-data
WorkingDirectory=/var/www/example-app
ExecStart=/usr/bin/php artisan queue:work
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl enable laravel-queue
sudo systemctl start laravel-queue

五、队列失败处理

失败表

php artisan queue:failed-table
php artisan migrate

查看失败任务

php artisan queue:failed

重试

php artisan queue:retry all

六、定时任务(可选)

如果用到 later() 延迟队列:

crontab -e
* * * * * cd /var/www/example-app && php artisan schedule:run >> /dev/null 2>&1

七、常见问题

  • Worker 不生效:改代码后必须重启 queue:work
  • 权限问题:确保 storage 可写
  • Redis 未安装:
sudo apt install redis-server

如果你愿意,我可以:

  • 给你一套 Debian + Redis + Supervisor 完整配置
  • 或针对 Laravel 10 / 11 单独说明
  • 或帮你写 生产级队列架构方案

直接告诉我你的 Laravel 版本和使用场景即可。

0 踩