三分钟从零部署 Laravel 应用到阿里云 ECS
本文介绍使用阿里云云效将 Laravel 应用部署到阿里云ECS
PHP+阿里云ECS最佳实践文档
本文档会帮助您在云效创建一个 PHP Laravel 的代码库,并部署到阿里云 ECS 服务器。
创建企业
首次进入云效会提示创建企业,自动跳转到创建企业页面,也可以直接访问 https://rdc.aliyun.com/company/create
创建流水线
进入流水线列表页面
立即创建后,进入到 云效 首页,鼠标移动到顶部导航 研发,在下拉菜单里点击 流水线
进入到流水线列表页,也可以直接访问链接 https://rdc.aliyun.com/ec/pipelines
进入新建流水线页面
点击 新建流水线 按钮,进入新建流水线页面,也可以直接访问链接 [https://rdc.aliyun.com/ec/pipelines/new]
选择编程语言 PHP 和模板 PHP测试、构建、部署到ECS
点击 下一步,进入代码源配置
配置代码源
新建代码库
点击 新建代码库,出现新建代码库对话框
在下拉列表选择具体新建仓库的所属分组 和 仓库名称,配置可见等级等
如果代码仓库配置提示 没有组,可以点击下方提示 创建组,直接创建新代码分组仓库
点击下一步,进入代码模板选择,可以使用云效Laravel代码模板,直接在阿里云Code创建新代码仓库(目前暂时只支持阿里云Code)。选择变成语言 PHP 和 代码模板 Laravel 5.8
点击 确认 开始自动创建代码仓库
大约15秒,完成后自动关闭新建代码库对话框,代码源信息自动填入到表单里
使用已有代码
也可以使用已有代码,需要注意的是部署脚本的配置,在主机部署的时候的逻辑是 云效 调用执行环境上的 部署配置,部署配置脚本 将调用执行 部署命令脚本 完成部署。
在代码库配置阶段主要关注 部署命令脚本,在云效的代码模板里,部署脚本命名为 deploy.sh,位于代码目录的根路径下,也可以放置在代码目录的其他位置。
以下是 部署命令脚本 的样例:
#!/bin/bash
PROG_NAME=$0
ACTION=$1
ONLINE_OFFLINE_WAIT_TIME=6 # 实例上下线的等待时间
APP_START_TIMEOUT=25 # 等待应用启动的时间
APP_PORT=80 # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT} # 应用健康检查URL
HEALTH_CHECK_FILE_DIR=/var/app/status # 脚本会在这个目录下生成nginx-status文件
APP_HOME=/var/app/${APP_NAME} # 从package.tgz中解压出来的文件放到这个目录下
# 创建出相关目录
mkdir -p ${HEALTH_CHECK_FILE_DIR}
mkdir -p ${APP_HOME}
usage() {
echo "Usage: $PROG_NAME {start|stop|online|offline|restart}"
exit 2
}
online() {
# 挂回SLB
touch -m $HEALTH_CHECK_FILE_DIR/nginx-status || exit 1
echo "wait app online in ${ONLINE_OFFLINE_WAIT_TIME} seconds..."
sleep ${ONLINE_OFFLINE_WAIT_TIME}
}
offline() {
# 摘除SLB
rm -f $HEALTH_CHECK_FILE_DIR/nginx-status || exit 1
echo "wait app offline in ${ONLINE_OFFLINE_WAIT_TIME} seconds..."
sleep ${ONLINE_OFFLINE_WAIT_TIME}
}
health_check() {
exptime=0
echo "checking ${HEALTH_CHECK_URL}"
while true
do
status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL}`
if [ x$status_code != x200 ];then
sleep 1
((exptime++))
echo -n -e "\rWait app to pass health check: $exptime..."
else
break
fi
if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
echo 'app start failed'
exit 1
fi
done
echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
echo 'Start application'
# 覆盖nginx配置文件和laravel应用配置
# NGINX_CONF=/etc/nginx/sites-available/${APP_NAME}
# mv ${NGINX_CONF} ${NGINX_CONF}.bak
# sed "s/@@APP_HOME@@/${APP_HOME//\//\\/}/g" ${APP_HOME}/manifest/conf/nginx > ${NGINX_CONF}
# ln -snf ${NGINX_CONF} /etc/nginx/sites-enabled/default
# cp ${APP_HOME}/manifest/env ${APP_HOME}/.env
cd ${APP_HOME}
composer install --no-dev
php artisan optimize
php artisan key:generate
php artisan config:cache
php artisan up
chmod -R 775 storage
chown -R www-data:www-data ${APP_HOME}
service php7.3-fpm start
service nginx start
}
stop_application() {
cd ${APP_HOME}
php artisan down
service php7.3-fpm stop
service nginx stop
}
start() {
start_application
health_check
online
}
stop() {
offline
stop_application
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
online)
online
;;
offline)
offline
;;
restart)
stop
start
;;
*)
usage
;;
esac
在配置好代码源之后,点击下一步填写基本信息
点击创建,这个时候已经完成了创建,但是在第一次创建的时候可能会遇到部分流水线组件配置未完成(下图红色提示)
点击未完成的红色卡片,在右侧拉出的菜单里完成信息录入
配置环境
部署配置
在主机部署的组件里需要配置环境信息
点击 新建环境,出现新建环境对话框
环境里的 部署配置脚本 是用来调用刚才代码里的 部署命令脚本,当然也可以直接在这里执行部署命令
以下是 部署配置脚本 的样例:
set -e;
export APP_NAME=php-demo;
if [ -f "/var/app/${APP_NAME}/deploy.sh" ]; then /var/app/${APP_NAME}/deploy.sh stop; fi;
mkdir -p /var/app/${APP_NAME};
tar xf /root/package.tgz -o -C /var/app/${APP_NAME};
chmod +x /var/app/${APP_NAME}/deploy.sh;
/var/app/${APP_NAME}/deploy.sh start
机器配置
点击新建环境对话框里 机器配置,进入机器配置表单
可以把 已有导入到企业的机器 从左侧表格移动到右侧表格,关联到当前环境
点击 确认,返回流水线编辑页面
点击 运行, 开始运行流水线,至此就完成了PHP应用部署到ECS流水线的创建
当流水线运行完成后,一个PHP应用就部署到了ECS上
点击 打开发布单,可以看到部署详情
通过浏览器访问Laravel,完成
本作品采用《CC 协议》,转载必须注明作者和本文链接
优秀
怕是重新定义三分钟哦
感谢分享,正好想学一下
你们都是这么部署的吗?
@tq0fqeu 你好,方便描述清楚:
php构建上传到仓库
这一步吗?因为部署时,需要用到制品
,不是特别懂