三分钟从零部署 Laravel 应用到阿里云 ECS

本文介绍使用阿里云云效将 Laravel 应用部署到阿里云ECS

PHP+阿里云ECS最佳实践文档

本文档会帮助您在云效创建一个 PHP Laravel 的代码库,并部署到阿里云 ECS 服务器。

创建企业

首次进入云效会提示创建企业,自动跳转到创建企业页面,也可以直接访问 https://rdc.aliyun.com/company/create
三分钟从零部署 Laravel 应用到阿里云 ECS

创建流水线

进入流水线列表页面

立即创建后,进入到 云效 首页,鼠标移动到顶部导航 研发,在下拉菜单里点击 流水线
三分钟从零部署 Laravel 应用到阿里云 ECS

进入到流水线列表页,也可以直接访问链接 https://rdc.aliyun.com/ec/pipelines
三分钟从零部署 Laravel 应用到阿里云 ECS

进入新建流水线页面

点击 新建流水线 按钮,进入新建流水线页面,也可以直接访问链接 [https://rdc.aliyun.com/ec/pipelines/new]
三分钟从零部署 Laravel 应用到阿里云 ECS

选择编程语言 PHP 和模板 PHP测试、构建、部署到ECS
三分钟从零部署 Laravel 应用到阿里云 ECS

点击 下一步,进入代码源配置
三分钟从零部署 Laravel 应用到阿里云 ECS

配置代码源

新建代码库

点击 新建代码库,出现新建代码库对话框
三分钟从零部署 Laravel 应用到阿里云 ECS

在下拉列表选择具体新建仓库的所属分组 和 仓库名称,配置可见等级等
三分钟从零部署 Laravel 应用到阿里云 ECS

如果代码仓库配置提示 没有组,可以点击下方提示 创建组,直接创建新代码分组仓库
三分钟从零部署 Laravel 应用到阿里云 ECS

点击下一步,进入代码模板选择,可以使用云效Laravel代码模板,直接在阿里云Code创建新代码仓库(目前暂时只支持阿里云Code)。选择变成语言 PHP 和 代码模板 Laravel 5.8
三分钟从零部署 Laravel 应用到阿里云 ECS

点击 确认 开始自动创建代码仓库
三分钟从零部署 Laravel 应用到阿里云 ECS

大约15秒,完成后自动关闭新建代码库对话框,代码源信息自动填入到表单里
三分钟从零部署 Laravel 应用到阿里云 ECS

使用已有代码

也可以使用已有代码,需要注意的是部署脚本的配置,在主机部署的时候的逻辑是 云效 调用执行环境上的 部署配置部署配置脚本 将调用执行 部署命令脚本 完成部署。
三分钟从零部署 Laravel 应用到阿里云 ECS

在代码库配置阶段主要关注 部署命令脚本,在云效的代码模板里,部署脚本命名为 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

在配置好代码源之后,点击下一步填写基本信息
三分钟从零部署 Laravel 应用到阿里云 ECS

点击创建,这个时候已经完成了创建,但是在第一次创建的时候可能会遇到部分流水线组件配置未完成(下图红色提示)
三分钟从零部署 Laravel 应用到阿里云 ECS

点击未完成的红色卡片,在右侧拉出的菜单里完成信息录入
三分钟从零部署 Laravel 应用到阿里云 ECS

配置环境

部署配置

在主机部署的组件里需要配置环境信息
三分钟从零部署 Laravel 应用到阿里云 ECS

点击 新建环境,出现新建环境对话框
三分钟从零部署 Laravel 应用到阿里云 ECS

环境里的 部署配置脚本 是用来调用刚才代码里的 部署命令脚本,当然也可以直接在这里执行部署命令

以下是 部署配置脚本 的样例:

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

机器配置

点击新建环境对话框里 机器配置,进入机器配置表单
三分钟从零部署 Laravel 应用到阿里云 ECS

可以把 已有导入到企业的机器 从左侧表格移动到右侧表格,关联到当前环境
三分钟从零部署 Laravel 应用到阿里云 ECS

点击 确认,返回流水线编辑页面
三分钟从零部署 Laravel 应用到阿里云 ECS

点击 运行, 开始运行流水线,至此就完成了PHP应用部署到ECS流水线的创建
三分钟从零部署 Laravel 应用到阿里云 ECS

当流水线运行完成后,一个PHP应用就部署到了ECS上
三分钟从零部署 Laravel 应用到阿里云 ECS

点击 打开发布单,可以看到部署详情
三分钟从零部署 Laravel 应用到阿里云 ECS

通过浏览器访问Laravel,完成
三分钟从零部署 Laravel 应用到阿里云 ECS

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5
Toiu

优秀

4年前 评论
tq0fqeu (楼主) 4年前

怕是重新定义三分钟哦

4年前 评论

感谢分享,正好想学一下

4年前 评论

你们都是这么部署的吗?

4年前 评论

@tq0fqeu 你好,方便描述清楚:php构建上传到仓库 这一步吗?因为部署时,需要用到制品,不是特别懂

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!