升级到Laravel8及PHP8.0小记
环境:
- Ubuntu16.04 64bit
- PHP 7.2.34-21+ubuntu16.04.1+deb.sury.org+1 (cli) (built: May 1 2021 11:52:36) ( NTS )
- nginx 1.16.1
- mysql Ver 14.14 Distrib 5.7.33, for Linux (x86_64) using EditLine wrapper
- …
1. 安装PHP8
apt-get install -y php8.0-bcmath php8.0-cli php8.0-curl php8.0-fpm php8.0-gd php8.0-mbstring php8.0-mysql php8.0-opcache php8.0-pgsql php8.0-readline php8.0-xml php8.0-zip php8.0-sqlite3 php8.0-redis
2. 设置默认PHP版本为7.2
由于有其他项目仍在使用 Laravel5.x/6.x 以及 PHP7.2,修改默认 PHP 版本为 7.2 以兼容之。
sudo update-alternatives --set php /usr/bin/php7.2
sudo update-alternatives --set phar /usr/bin/phar7.2
sudo update-alternatives --set phar.phar /usr/bin/phar.phar7.2
sudo update-alternatives --set phpize /usr/bin/phpize7.2
sudo update-alternatives --set php-config /usr/bin/php-config7.2
主要是 php,其他失败了也不要紧。
3. 升级 composer 到 2.*
性能提升不小,更新它
composer self-update
4. 升级 nodejs 到 v14.x
貌似一夜之间大家都升级了。。。
参考 官方文档
curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs
5. 部署 Laravel8 项目 (larabbs8)
需要考虑的地方有 nginx conf, cron job, supervisor conf, deployer 部署脚本等。
5.1 nginx conf 指定PHP版本
sites-enabled 里的 conf,之前是:
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
修改为:
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
5.2 deployer 部署脚本指定 php 及 composer 版本
参考 stackoverflow,在 require 'recipe/laravel.php';
下方增加:
set('bin/php', function () {
return '/usr/bin/php8.0';
});
set('bin/composer', function () {
return '/usr/bin/php8.0 /usr/local/bin/composer';
});
5.3 cron job 指定 PHP 版本
* * * * * php8.0 /var/www/larabbs8-deployer/current/artisan schedule:run >> /dev/null 2>&1
5.4 supervisor conf 指定 PHP 版本
[program:bbs8]
process_name=%(program_name)s
command=php8.0 /var/www/larabbs8-deployer/current/artisan horizon
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/larabbs8-deployer/shared/storage/logs/horizon.log
6. Laravel 升级笔记
6.1 使用 propaganistas/laravel-phone
验证手机号码
- 安装
composer require propaganistas/laravel-phone
Request
验证规则'phone' => 'required|phone:CN,mobile',
-
添加翻译
依赖
overtrue/laravel-lang
,在翻译文件resources/lang/zh-CN/validation.php
内新增:'phone' => ':attribute 格式不正确。'
Controller
规范号码格式// 格式化手机号 去除 +86 去除空格 $phone = ltrim(phone($request->phone, 'CN', 'E164'), '+86');
6.2 php artisan storage:link
结果
The [/home/vagrant/code/shop8/public/storage] link has been connected to [/home/vagrant/code/shop8/storage/app/public].
The links have been created.
6.3 新版本可以配置 faker_local
为 zh_CN
假数据生成比较好看,不过支持的内容很少。
6.4 Paginator
启用 bootstrap
编辑 app/Providers/AppServiceProvider.php
的 boot
方法:
\Illuminate\Pagination\Paginator::useBootstrap();
6.5 app/Exceptions/Handler.php
内容变化
拷贝一份新版的替换即可。