24、从源代码构建PHP应用程序指南

从源代码构建PHP应用程序指南

1. 引言

在容器化应用开发中,OpenShift提供了强大的功能来构建和部署应用程序。本文将详细介绍如何在OpenShift中使用Source-to-Image(S2I)策略从源代码构建PHP应用程序,包括环境搭建、S2I过程、构建简单PHP应用以及理解构建过程等内容。

2. 技术环境准备

2.1 环境选择

可以使用Minishift、 oc cluster up 或基于Ansible的标准生产就绪部署等OpenShift安装和开发环境,本文重点介绍 oc cluster up 方法。

2.2 虚拟实验室部署

可以使用以下Vagrantfile来部署虚拟实验室:

Vagrant.configure(2) do |config|
  config.vm.define "openshift" do |conf|
    conf.vm.box = "centos/7"
    conf.vm.network "private_network", ip: "172.24.0.11"
    conf.vm.hostname = 'openshift.example.com'
    conf.vm.network "forwarded_port", guest: 80, host: 980
    conf.vm.network "forwarded_port", guest: 443, host: 9443
    conf.vm.network "forwarded_port", guest: 8080, host: 8080
    conf.vm.network "forwarded_port", guest: 8443, host: 8443
    conf.vm.provider "virtualbox" do |v|
      v.memory = 4096
      v.cpus = 2
    end
    conf.vm.provision "shell", inline: $lab_main
  end
$lab_main = <<SCRIPT
cat <<EOF >> /etc/hosts
172.24.0.11 openshift.example.com openshift
172.24.0.12 storage.example.com storage nfs
EOF
systemctl disable firewalld
systemctl stop firewalld
yum update -y
yum install -y epel-release git
yum install -y docker
cat << EOF >/etc/docker/daemon.json
{
   "insecure-registries": [
     "172.30.0.0/16"
   ]
}
EOF
systemctl start docker
systemctl enable docker
yum -y install centos-release-openshift-origin39
yum -y install origin-clients
oc cluster up
SCRIPT

部署环境的步骤如下:
1. 运行 vagrant up 命令部署虚拟机。
2. 运行 vagrant ssh 连接到虚拟机。
3. 以开发者身份登录以执行非特权操作:

$ oc login -u developer

在登录过程中,可能会遇到服务器证书由未知机构签名的提示,可选择绕过证书检查。输入用户名 developer 和任意密码完成登录。

3. PHP S2I介绍

3.1 S2I概述

OpenShift支持PHP及其他多种运行时的S2I构建。S2I过程通过将应用程序的源代码与基础构建器镜像相结合,生成可直接运行的镜像。构建器是一种特殊的镜像,能够处理特定编程语言或框架的应用程序安装和配置。例如,PHP构建器只能处理PHP源代码,默认不支持Java。OpenShift的内置构建器已经覆盖了大多数常用的编程语言,如Python、Ruby、Java和Node.js等。

3.2 S2I过程步骤

S2I过程包含以下步骤:
1. 确定正确的基础构建器镜像 :该过程依赖于复杂的启发式方法,主要是查找特定的文件和文件扩展名,如Ruby on Rails的 Gemfile 或Python的 requirements.txt 。用户也可以从CLI覆盖构建器镜像所确定的运行时环境。
2. 创建指向应用程序源代码仓库和构建器镜像的ImageStream的BuildConfig
3. 从构建器镜像启动构建Pod
4. 下载应用程序的源代码
5. 使用 tar 实用程序将脚本和应用程序的源代码流式传输到支持的构建器镜像容器中
6. 运行组装脚本(构建器镜像提供的脚本优先级最高)
7. 将最终镜像保存到内部注册表
8. 创建支持应用程序所需的资源 :包括但不限于DeploymentConfig、Service和Pod等。

3.3 环境变量配置

PHP构建器支持使用多个环境变量来更改默认的PHP配置,每个特定构建器的相关信息可在其网页上查看。

3.4 启动构建

可以使用 oc new-app 命令启动构建过程,该命令将存储库URL或本地路径作为参数,同时创建所有必需的OpenShift实体以支持S2I构建和应用程序部署。默认情况下会创建以下OpenShift实体:
| 类型 | 名称 | 描述 |
| ---- | ---- | ---- |
| Pod | <应用程序名称>-<构建序号>-build | 构建应用程序的构建器Pod,生成应用程序镜像并可能生成一些用于后续构建的工件 |
| Pod | <名称>-<构建序号>- | 构建过程生成的应用程序Pod |
| Service | <名称> | 应用程序服务 |
| 复制控制器 | <名称>-<构建序号> | 应用程序复制控制器,默认维护一个副本 |
| 部署配置 | <名称> | 包含如何部署应用程序的所有信息的部署配置 |
| 镜像流 | <名称> | 构建的镜像的路径 |
| 构建配置 | <名称> | 包含如何构建应用程序的所有必需信息的构建配置 |
| 构建 | <名称>-<构建序号> | 特定的构建,可以多次运行 |

OpenShift不会自动创建路由,如果需要将应用程序暴露给外部,需要运行 oc expose svc <名称> 命令创建路由。

3.5 S2I流程示意图

graph LR
    A[确定基础构建器镜像] --> B[创建BuildConfig]
    B --> C[启动构建Pod]
    C --> D[下载源代码]
    D --> E[流式传输代码到容器]
    E --> F[运行组装脚本]
    F --> G[保存最终镜像]
    G --> H[创建支持资源]

4. 构建简单PHP应用程序

4.1 应用程序代码

第一个S2I实验将使用一个非常简单的PHP应用程序,该应用程序使用标准的PHP函数 phpinfo() 显示PHP配置。它由一个单独的 index.php 文件组成,内容如下:

<?php
phpinfo();
?>

该应用程序的代码存储在GitHub仓库 https://github.com/neoncyrex/phpinfo.git 中。

4.2 创建项目

首先,为新实验创建一个单独的项目:

$ oc new-project phpinfo

4.3 克隆仓库

克隆仓库到本地,以便进行更改:

$ git clone https://github.com/neoncyrex/phpinfo.git

4.4 启动构建和部署

使用 oc new-app 命令启动构建和应用程序部署过程:

$ oc new-app phpinfo

该命令会执行以下操作:
1. 使用 phpinfo 作为应用程序源代码的路径。
2. 自动检测编程语言为PHP。
3. 启动构建过程。
4. 创建多个OpenShift资源。

4.5 查看构建状态

构建过程需要一些时间,在第一阶段,可以看到名称中包含 -build 的容器,该容器从PHP构建器镜像部署,负责构建操作:

$ oc get pod

一段时间后,应用程序将可用,应用程序的Pod应处于 Running 状态:

$ oc get pod

4.6 访问应用程序

使用 oc get svc 命令获取应用程序的服务IP,然后使用 curl 命令访问应用程序:

$ oc get svc
$ curl -s http://<服务IP>:8080 | head -n 10

4.7 查看构建摘要

可以使用 oc status oc status -v 命令显示构建过程的摘要:

$ oc status -v

该命令还可以包含一些有用的故障排除信息。另外,还可以使用 oc logs 命令显示具有低级详细信息的构建日志:

$ oc logs bc/phpinfo

5. 理解PHP构建过程

5.1 查看所有实体

可以使用以下命令显示OpenShift为支持构建和部署创建的所有API资源:

$ oc get all

输出结果如下:
| 名称 | 类型 | 来源 | 最新版本 | 状态 | 启动时间 | 持续时间 |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| buildconfigs/phpinfo | Source | Git@master | 1 | | | |
| builds/phpinfo-1 | Source | Git@638030d | | Complete | About an hour ago | 34s |
| imagestreams/phpinfo | | 172.30.1.1:5000/phpinfo/phpinfo | latest | | About an hour ago | |
| deploymentconfigs/phpinfo | | | 1 | 1 | 1 | config,image(phpinfo:latest) |
| po/phpinfo-1-build | | | | 0/1 | Completed | 0 | 1h |
| po/phpinfo-1-h9xt5 | | | | 1/1 | Running | 0 | 1h |
| rc/phpinfo-1 | | | 1 | 1 | 1 | | 1h |
| svc/phpinfo | | 172.30.54.195 | | 8080/TCP,8443/TCP | 1h | |

大部分实体(如Pod、Service、复制控制器和部署配置)在之前的操作中已经比较熟悉。S2I构建策略还使用了以下额外的实体:BuildConfig、Build和ImageStream。

5.2 查看BuildConfig配置

BuildConfig包含了构建应用程序所需的所有信息,可以使用以下命令查看其配置:

$ oc get bc phpinfo -o yaml

输出的配置中,以下字段尤为重要:
- spec.source.git :应用程序源代码的仓库URL。
- spec.strategy.sourceStrategy :包含将使用哪个构建器的信息。

在本例中,OpenShift使用了 openshift 命名空间中 php:7.0 镜像流的内置构建器。以下是其部分配置示例:

apiVersion: v1
kind: BuildConfig
...
spec:
  source:
    git:
      ref: master
      uri: https://github.com/neoncyrex/phpinfo.git
    type: Git
  strategy:
    sourceStrategy:
      from:
        kind: ImageStreamTag
        name: php:7.0
        namespace: openshift
    type: Source
  successfulBuildsHistoryLimit: 5
  triggers:
  - github:
      secret: 5qFv8z-J1me1Mj7Q27rY
    type: GitHub
  - generic:
      secret: -g6nTMasd6TRCMxBvKWz
    type: Generic
  - type: ConfigChange
  - imageChange:
      lastTriggeredImageID: centos/php-70-centos7@sha256:eb2631e76762e7c489561488ac1eee966bf55601b6ab31d4fbf60315d99dc740
    type: ImageChange
status:
  lastVersion: 1

5.3 查看ImageStream配置

可以使用以下命令查看构建器镜像所在的ImageStream配置:

$ oc get is php -o yaml -n openshift

部分配置如下:

apiVersion: v1
kind: ImageStream
...
spec:
  lookupPolicy:
    local: false
  tags: 
  - annotations:
      openshift.io/display-name: PHP 7.0
      openshift.io/provider-display-name: Red Hat, Inc.
      sampleRepo: https://github.com/openshift/cakephp-ex.git
      supports: php:7.0,php
      tags: builder,php
      version: "7.0"
    from:
      kind: DockerImage
      name: centos/php-70-centos7:latest
...

用于构建应用程序的PHP构建器镜像为 centos/php-70-centos7:latest

5.4 构建过程流程图

graph LR
    A[确定仓库URL和构建器信息] --> B[下载源代码]
    B --> C[使用构建器镜像构建]
    C --> D[运行组装脚本]
    D --> E[保存最终镜像到内部注册表]
    E --> F[创建支持资源]

6. 启动新构建

6.1 查看可用的BuildConfig

如果应用程序的源代码发生了更新,可以使用 oc start-build 命令触发重建过程。首先,需要查看所有可用的BuildConfig:

$ oc get bc

输出结果可能如下:
| 名称 | 类型 | 来源 | 最新版本 |
| ---- | ---- | ---- | ---- |
| phpinfo | Source | Git@master | 1 |

6.2 启动新构建

使用以下命令启动新构建:

$ oc start-build phpinfo

启动新构建后,可以使用 oc get pod 命令查看构建状态:

$ oc get pod

在构建完成后,应用程序将被重新部署。可以再次使用 oc get pod 命令确认应用程序的Pod处于 Running 状态。

6.3 查看最新构建版本

使用以下命令查看最新的构建版本:

$ oc get bc

输出结果可能如下:
| 名称 | 类型 | 来源 | 最新版本 |
| ---- | ---- | ---- | ---- |
| phpinfo | Source | Git@master | 2 |

6.4 查看所有构建记录

OpenShift会保留所有构建的记录,使用以下命令可以查看:

$ oc get build

输出结果示例:
| 名称 | 类型 | 来源 | 状态 | 启动时间 | 持续时间 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| phpinfo-1 | Source | Git@638030d | Complete | 2 hours ago | 34s |
| phpinfo-2 | Source | Git@638030d | Complete | About a minute ago | 7s |

6.5 清理环境

使用以下代码可以清理环境,为下一个实验做准备:

$ oc delete all --all
$ oc delete project phpinfo
$ oc project myproject

7. 总结

通过本文的介绍,我们了解了在OpenShift中使用S2I策略从源代码构建PHP应用程序的详细过程,包括环境搭建、S2I过程、构建简单PHP应用、理解构建过程以及启动新构建等内容。掌握这些知识可以帮助我们更高效地在OpenShift平台上开发和部署PHP应用程序。在实际应用中,可以根据具体需求对构建过程进行定制和优化,以满足不同的业务场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值