新主机上必须重生成app_key,直接复制旧.env会导致decryptexception或用户登出;应执行php artisan key:generate生成新密钥,并同步更新db_host、db_port、app_env等配置,清空配置缓存后生效。

新主机上必须重生成 APP_KEY
直接复制旧项目的 .env 文件过去,不改 APP_KEY 就跑,大概率触发 DecryptException 或用户全部登出。Laravel 用它加密 Cookie、remember_token、队列载荷等——密钥变了,旧数据就不可逆失效。
正确做法是:在新主机项目根目录下执行
php artisan key:generate
这会写入新的 APP_KEY=base64:... 行。别手写、别复制旧值、别用 --force 覆盖已有密钥(除非你已同步迁移所有加密数据,现实中几乎不做)。
DB_HOST 和 DB_PORT 很可能要改
本地开发常用 localhost,但新主机上 MySQL 可能是 Docker 容器、远程 RDS、或监听 127.0.0.1:3307。填错就会报 SQLSTATE[HY000] [2002] Connection refused 或 [1045] Access denied。
-
DB_HOST填127.0.0.1而不是localhost,避免 PHP MySQL 扩展走 Unix socket 导致权限/路径错乱 -
DB_PORT别默认留空,Docker 映射常为3307或3308,得跟实际服务端口对齐 -
DB_DATABASE名字含短横线(如my-app)没问题,但确保该库已在 MySQL 中手动创建好——Laravel 不自动建库
改完 .env 后缓存必须清,且不能只清一次
配置不会自动生效。Laravel 启动时把 .env 值读进内存并缓存到 bootstrap/cache/config.php。你改了文件,但旧缓存还在用。
开发环境执行:
php artisan config:clear
生产环境还得额外处理 OPcache(如果启用):
sudo systemctl reload php8.2-fpm # 或对应 PHP-FPM 版本
注意:php artisan config:cache 不是“刷新”,它是把当前内存里的配置打包成静态文件——如果缓存没清,它只是把旧配置再缓存一遍。
APP_ENV 和 APP_DEBUG 要按新环境设对
新主机如果是线上服务器,APP_ENV 必须是 production,否则 Laravel 可能跳过某些安全限制或日志行为;APP_DEBUG=true 绝对不能留在生产环境,否则异常页面会暴露完整路径、环境变量、SQL 查询。
关键几行应类似:
APP_ENV=production<br>APP_DEBUG=false<br>APP_URL=https://yourdomain.com
另外,APP_URL 必须带协议和域名,不能是 http://localhost——否则生成的密码重置链接、邮件中的 URL 全是错的。
最易被忽略的是:Nginx 的 SCRIPT_FILENAME 和 try_files 配置没同步,导致路由 404;还有 storage 和 bootstrap/cache 目录权限没设成 www-data 可写,结果日志写不进、缓存生成失败、甚至首页都 500。这些不归 .env 管,但一并出问题时,人容易反复检查配置文件而漏掉底层权限。











