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

如何用单命令启动Laravel本地开发服务器?WSL环境问题求助

简化WSL下Laravel项目启动步骤的方案

针对你需要执行多个命令才能启动项目的问题,下面提供几个实用的单命令启动方案,同时解决你用supervisor无法访问localhost:8000的可能问题:

方案一:编写Shell脚本(最快捷)

在项目根目录创建一个start.sh脚本,把所有启动命令后台运行并输出日志:

#!/bin/bash

# 确保日志目录存在
mkdir -p storage/logs

# 启动Laravel内置服务器
php artisan serve > storage/logs/serve.log 2>&1 &
echo "Laravel serve 已启动 (PID: $!)"

# 启动WebSockets服务
php artisan websockets:serve > storage/logs/websockets.log 2>&1 &
echo "WebSockets服务已启动 (PID: $!)"

# 启动队列监听
php artisan queue:listen > storage/logs/queue.log 2>&1 &
echo "队列监听已启动 (PID: $!)"

# 启动Angular开发服务器
ng s -o > storage/logs/angular.log 2>&1 &
echo "Angular服务已启动 (PID: $!)"

echo "所有服务启动完成!"

使用步骤:

  1. 给脚本添加执行权限:chmod +x start.sh
  2. 启动所有服务:./start.sh

停止服务:

如果需要停止所有相关进程,可以执行:

pkill -f "php artisan"
pkill ng

方案二:自定义Laravel Artisan命令(更贴合Laravel生态)

通过自定义Artisan命令,用PHP代码统一管理启动流程:

  1. 生成自定义命令:
php artisan make:command StartAllServices
  1. 编辑生成的app/Console/Commands/StartAllServices.php文件:
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Symfony\Component\Process\Process;

class StartAllServices extends Command
{
    protected $signature = 'start:all';
    protected $description = '一键启动Laravel服务、WebSockets、队列监听和Angular开发服务器';

    public function handle()
    {
        $this->info('正在启动Laravel开发服务器...');
        Process::fromShellCommandline('php artisan serve > storage/logs/serve.log 2>&1 &')->run();
        $this->info('Laravel服务器启动完成');

        $this->info('正在启动WebSockets服务...');
        Process::fromShellCommandline('php artisan websockets:serve > storage/logs/websockets.log 2>&1 &')->run();
        $this->info('WebSockets服务启动完成');

        $this->info('正在启动队列监听...');
        Process::fromShellCommandline('php artisan queue:listen > storage/logs/queue.log 2>&1 &')->run();
        $this->info('队列监听启动完成');

        $this->info('正在启动Angular开发服务器...');
        Process::fromShellCommandline('ng s -o > storage/logs/angular.log 2>&1 &')->run();
        $this->info('Angular服务器启动完成');

        $this->info('所有服务已正常运行!');
    }
}
  1. 启动服务:
php artisan start:all

关于Supervisor无法访问localhost:8000的排查

如果坚持用Supervisor,检查以下几点:

  1. 配置文件路径:确保command和directory用的是WSL内的绝对路径(比如/home/your-user/project,不是Windows的C:/xxx)
  2. 端口占用:在WSL内执行netstat -tulpn | grep 8000,确认端口被php artisan serve占用,且没有Windows程序占用该端口
  3. WSL端口转发:WSL2默认自动转发端口,但偶尔会失效,可重启WSL(wsl --shutdown后重新打开)或检查Windows防火墙是否拦截了8000端口
  4. 测试访问:先在WSL内执行curl localhost:8000,如果能正常返回页面,说明服务没问题,再在Windows浏览器访问;如果WSL内都访问不了,检查Supervisor的日志文件(配置里的stdout_logfile)看启动报错

示例Supervisor配置(放在/etc/supervisor/conf.d/laravel-project.conf):

[program:laravel-serve]
command=/usr/bin/php /home/your-user/project/artisan serve
directory=/home/your-user/project
autostart=true
autorestart=true
user=your-wsl-username
stdout_logfile=/home/your-user/project/storage/logs/serve.log
stderr_logfile=/home/your-user/project/storage/logs/serve-error.log

[program:laravel-websockets]
command=/usr/bin/php /home/your-user/project/artisan websockets:serve
directory=/home/your-user/project
autostart=true
autorestart=true
user=your-wsl-username
stdout_logfile=/home/your-user/project/storage/logs/websockets.log
stderr_logfile=/home/your-user/project/storage/logs/websockets-error.log

[program:laravel-queue]
command=/usr/bin/php /home/your-user/project/artisan queue:listen
directory=/home/your-user/project
autostart=true
autorestart=true
user=your-wsl-username
stdout_logfile=/home/your-user/project/storage/logs/queue.log
stderr_logfile=/home/your-user/project/storage/logs/queue-error.log

[program:angular-serve]
command=/usr/bin/npm run start -- -o
directory=/home/your-user/angular-project
autostart=true
autorestart=true
user=your-wsl-username
stdout_logfile=/home/your-user/angular-project/logs/angular.log
stderr_logfile=/home/your-user/angular-project/logs/angular-error.log

配置后执行以下命令生效:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start all

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:46:04