把Laravel部署至BT宝塔面板,并实现阿里云 Codeup自动部署流程步骤
Laravel  /  管理员 发布于 9个月前   359
在BT宝塔面板的服务器部署我们的代码托管在阿里云Codeup上,用配套的流水线服务实现自动部署。
实现步骤:
安装 PHP 8.2
从 BT 面板的软件商店安装 PHP 8.2,这个过程很快。
Git clone 代码
首先,用 BT 面板新建一个网站,然后登录服务器,
清空 BT 面板自动生成的文件,方便 Git Clone 把整个网站代码下载到网站目录:
# 切换用户
# su -l www -s /bin/bash
# clone 项目代码到当前目录
$ git clone [email protected]:example/laravel-bt.git .
切换用户:
BT 面板的 Web 服务使用 www:www 用户和组,
所以几乎所有的操作,都用 www 用户,而非 root(我有时候觉得 chmod -R 777 有些业余?!)
清空目录:
因为需要把网站直接放到 BT 新建的目录中,先把目录清空,git clone 才能正常执行
clone 权限:
以 www 的身份新建 SSH 密码,然后添加到 Codeup,之后便有了仓库的只读权限了
安装 Laravel 网站
首先,用 Composer 安装依赖:
/www/server/php/82/bin/php /www/server/php/82/bin/composer install
不同版本 PHP 都有附带的 Composer(这是优点),但是 PHP 8 的 Composer 版本太老,
尝试运行会报告大量兼容性警告,需要自行升级
composer self-update
命令行中的 PHP/Composer 版本不一致,一个 8.2 另一个 7.4,所以后面我全部使用完整路径
安装的过程中会提示一些函数被禁用,还有缺少依赖,如函数 putenv、proc_open,扩展 fileinfo,
按照提示启用和安装即可 然后,设置好环境变量和数据库后,网站就能跑起来了:
# 编辑生产环境的环境变量
$ cp .env.example .env
$ vim .env
$ /www/server/php/82/bin/php artisan key:generate
# 迁移数据库
$ /www/server/php/82/bin/php artisan migrate
# 前端打包
$ npm ci && npm run build
添加队列进程
BT 软件商店中安装 Supervisor(进程守护管理器),然后添加队列任务:
/www/server/php/82/bin/php artisan queue:work
同样选择 www 用户
添加计划任务
su -l www -s /bin/bash -c "cd /www/wwwroot/laravel-bt.example.com && /www/server/php/82/bin/php artisan schedule:run"
BT 计划任务的执行用户是 root,所以我们需要切换到 www 用户
设置 Codeup 流水线自动部署
云效 Codeup 是阿里云的代码托管平台,云效 Flow(流水线)是仓库自动化服务,
都有免费额度,足够我们的用量。
添加一条流水线,推送之后,自动部署到 BT 面板所在的服务器:
流水线的部署脚本:
su -l www -s /bin/bash -c 'cd /www/wwwroot/laravel-bt.example.com && git pull && bash ./deploy.sh' && /etc/init.d/php-fpm-82 reload
依旧先切换到 www 用户
更新代码,部署命令比较多,我放到了单独的文件中,见下
最后重现载入 PHP FPM,类似 Forge 用的 service $FORGE_PHP_FPM reload,
区别在于我们用的是 Centos 7,而 Forge 用的是 Ubuntu
deploy.sh 的内容:
#!/usr/bin/env bash
PHP="/www/server/php/82/bin/php"
COMPOSER="/www/server/php/82/bin/composer"
$PHP $COMPOSER install --no-dev --optimize-autoloader --no-interaction
$PHP artisan migrate --force
# 重启队列,因为 artisan queue:work 常驻后台,如果不重启不会收到新代码
$PHP artisan queue:restart
npm ci && npm run build
按照 Laravel 文档推荐的方法按照 Composer 依赖,更加适合生产环境
Queue artisan queue:work
和
Schedule artisan schedule:run
不同在于队列需要保持运行,以随时处理任务,而 Schedule 是定时运行,
是一次性的,每次运行都是最新代码,所以 deploy.sh 不用管。
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号