必须用PHP 8.2+、显式指定^11.0版本、禁用SELinux或正确设置上下文,否则php artisan serve启动失败或页面500报错;Amazon Linux 2023默认PHP为8.1,需启用EPEL/CRB仓库并安装remi-8.2模块,补全mbstring、intl等扩展,强制指定Laravel版本创建项目,并配置SELinux上下文以避免storage目录写入拒绝。

必须用 PHP 8.2+、显式指定 ^11.0 版本、禁用 SELinux 或正确设置上下文,否则 php artisan serve 启动失败或页面 500 报错。
PHP 8.2+ 和扩展缺一不可
Amazon Linux 2023 默认仓库中 php 包是 8.1,不满足 Laravel 11 最低要求。直接运行 php -v 很可能显示 8.1.x,此时 composer create-project laravel/laravel:^11.0 会卡在依赖解析或后续报 Class 'XmlWriter' not found 类错误。
- 先启用 EPEL 和 CRB 仓库:
sudo dnf install epel-release -y && sudo dnf config-manager --set-enabled crb - 安装 PHP 8.2:
sudo dnf module install php:remi-8.2(AL2023 官方推荐路径,非dnf install php) - 确认扩展已加载:
php -m | grep -E 'mbstring|openssl|pdo|tokenizer|xml|ctype|json|intl',缺intl就补装php-intl - 检查
php --ini输出的配置文件路径,确保没被多个php.ini覆盖
Composer 创建项目必须锁版本
AL2023 的 composer 默认源慢且不稳定,composer create-project laravel/laravel 不加约束会拉到 dev 分支或 v12 pre 版,与本地 PHP 8.2 不兼容,导致 artisan 命令直接 fatal error。
- 提前设国内镜像(腾讯云最稳):
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 创建时强制指定版本:
composer create-project laravel/laravel:^11.0 myapp --prefer-dist - 进项目后立刻验证:
grep '"laravel/framework":' composer.json应输出"laravel/framework": "^11.0" - 若卡在
Installing dependencies,加内存限制重试:COMPOSER_MEMORY_LIMIT=-1 composer create-project laravel/laravel:^11.0 myapp
Apache + SELinux 权限组合最容易出 403/500
AL2023 默认启用 SELinux,而 Laravel 的 storage 和 bootstrap/cache 目录需要写权限。仅改 chmod 或 chown 不够,Apache 进程仍被 SELinux 拒绝访问,日志里会看到 avc: denied。
- 临时验证是否 SELinux 导致:运行
sudo setenforce 0,再试访问;若恢复正常,说明就是它 - 生产环境别关 SELinux,改上下文:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/myapp/(storage|bootstrap/cache)(/.*)?",然后sudo restorecon -Rv /var/www/html/myapp/ - Apache 配置必须指向
public/目录,且开启mod_rewrite:sudo a2enmod rewrite(如果用 Apache 2.4+) -
DocumentRoot设为/var/www/html/myapp/public,并在该目录下确认有.htaccess(Laravel 自带)
php artisan serve 在 AL2023 上跑不通?换 systemd 管理
php artisan serve 是开发用命令,AL2023 的防火墙(firewalld)默认不放行 8000 端口,且进程无法后台驻留。直接执行后 SSH 断开,服务就停了——这不是 Laravel 问题,是 AL2023 的运行模型不匹配。
- 别依赖
artisan serve上线,改用 Apache 或 Nginx 反代 - 若真要后台跑 CLI 服务,用 systemd 写 unit 文件:
/etc/systemd/system/laravel-worker.service,Type=simple+ExecStart=/usr/bin/php /var/www/html/myapp/artisan queue:work - 注意
WorkingDirectory和User=apache必须设对,否则storage写入失败 - 启动前运行
php artisan config:clear && php artisan cache:clear,避免缓存残留导致密钥或配置读错
最常被跳过的其实是 APP_KEY 生成和 .env 文件所有权——哪怕 cp .env.example .env 后忘了 php artisan key:generate,所有加密、session、缓存都会瘫痪,但错误页只显示模糊的 500,日志里才见 No application encryption key has been specified。


















