3 Star 2 Fork 0

khs1994-docker / php-demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Docker 化 PHP 项目最佳实践(从 docker run 到 helm install ... --tls)

完全使用 Docker 开发、部署 PHP 项目。本指南只是简单列出,具体内容请查看 文档

Create PHP Application by Composer

GitHub stars PHP from Packagist GitHub (pre-)release Build Status StyleCI

$ composer create-project --prefer-dist khs1994/example:dev-master example

$ cd example

进阶路线

  • docker run

  • docker-compose up

  • kubectl create -f filename.yaml

  • helm install ./lnmp --tls

初始化

注意本项目专用于 khs1994.com PHP 开源项目,他人使用请按以下步骤进行初始化,严禁直接使用。

  • 编辑 .khsci.php 文件中的常量

  • 执行 php .khsci.php 完成替换

准备

建立一个自己的 PHP 项目模板(即 composer 包类型为 project),里面包含了常用的文件的模板。

示例:https://github.com/khs1994-docker/php-demo

内置文件模板

  • 建议多看看几个 PHP 开源项目,看看别人的项目里都有哪些文件,作用是什么
Filename Description
.gitattributes git 打包时排除文件(例如 测试代码)
.drone.yml Drone CI 工具
.editorconfig 定义文件格式规则(例如 缩进方式)
.khsci.yml KhsCI CI 工具
.php_cs PHP 代码格式化工具
.sami.php PHP 文档生成工具
.styleci.yml Style CI PHP 代码格式化 CI 工具
.travis.yml Travis CI 工具

一、开发

环境(以下步骤缺一不可)

  • 假设系统中不包含任何 PHP 等程序(实际上为了防止 Docker 崩溃等意外情况,建议系统中仍然安装这些软件作为 PLAN B)

  • 启动 Docker CE

  • LNMP khs1994-docker/lnmp

  • 将 Docker 化的常用命令所在文件夹加入 PATH,具体请查看 这里

  • IDE PHPStorm

  • git 分支 dev

  • 使用 Docker 作为 LNMP 环境,实际上大大简化了部署,但配置开发环境需要较多步骤,同时由于 Windows、macOS 运行 Docker 效率较 Linux 差,实际在开发环境是否使用 Docker,请各位自行权衡。

1. 新建 PHP 项目

使用自己的模板项目初始化 PHP 项目并初始化 git 仓库。

$ cd lnmp/app

$ lnmp-composer create-project --prefer-dist khs1994/example:dev-master example

$ cd example

$ git init

$ git remote add origin git@url.com:username/EXAMPLE.git

$ git checkout -b dev

$ echo -e "<?php\nphpinfo();" >> index.php

2. 新增 NGINX 配置

一个 PHP 项目, 一个 网址,一个子配置文件

参考示例配置文件在 config/nginx 新建 *.conf NGINX 配置文件

3. 启动 khs1994-docker/lnmp

$ ./lnmp-docker up

# $ ./lnmp-docker restart

4. 浏览器验证

浏览器打开页面出现 php 信息

5. PHPStorm 打开 PHP 项目

注意打开的是 PHP 项目(避免文件层次过深,IDE 直接打开 PHP 项目),不是 khs1994-docker/lnmp

要配置 khs1994-docker/lnmp 建议使用另外的文本编辑器。

你可以通过设置 APP_ROOT 变量来实现 appkhs1994-docker/lnmp 并列。

6. CLI settings

由于 PHP 环境位于 Docker 中,必须进行额外的配置

PHPStorm 设置-> Languages & ... -> PHP -> CLI Interpreter -> 点击后边三个点 -> 左上角添加 -> From Docker ... -> 选择 Docker -> Image name -> 选择 khs1994/php:7.2.x-fpm-alpine -> 点击 OK 确认

点击 ok 之后跳转的页面上 Additionl -> Debugger extension-> 填写 xdebug

具体请查看 https://github.com/khs1994-docker/lnmp/issues/260#issuecomment-373964173

再点击 ok 之后跳转到了 PHPStorm 设置-> Languages & ... -> PHP -> CLI Interpreter 这个页面

配置路径对应关系

这里以 Windows 为例,其他系统同理(添加本机路径与容器路径对应关系即可)。

由于 Windows 与 Linux 路径表示方法不同,我们必须另外添加对应关系。配置容器目录与本地项目之间的对应关系。

假设本地项目目录位于 C:/Users/username/app/example 对应的容器目录位于 /app/example

点击 Path mappings 添加一个条目 C:/Users/username/app/example => /app/example

配置容器其他参数

点击 Docker container 后边三个点配置容器的参数(就像 docker run ... 命令行配置的参数一样)

  • Network mode lnmp_backend (非常重要)

  • Volume bindings -> Container path /app/PHP_PROJECT, Host path 保持不变,需要挂载其他文件再新增一个条目即可

  • 其他参数根据实际需要自行配置

7. 设置 Xdebug

请查看 https://github.com/khs1994-docker/lnmp/blob/master/docs/xdebug.md

8. 引入 Composer 依赖

容器化 PHPer 常用命令请查看 https://github.com/khs1994-docker/lnmp/blob/master/docs/command.md

$ lnmp-composer require phpunit/phpunit

9. 编写 PHP 代码

10. 编写 PHPUnit 测试代码

11. 使用 PHPUnit 测试

使用 PHPStorm

PHPStorm 设置-> Languages & ... -> PHP ->Test Frameworks -> 左上角添加 -> PHPUnit by Remote Interpreter -> 选择第五步添加的 Docker 镜像 -> 点击 OK -> PHPUnit Library -> 选择 Use Composer autoloader -> Path to script -> 点击右边刷新按钮即可自动识别,或者手动 填写 /app/PHP_PROJECT/vendor/autoload.php -> 点击 OK 确认

在测试函数名单击右键 run FunName 开始测试。

使用命令行

$ cd lnmp/app/PHP_PROJECT

# 根目录必须包含 PHPUnit 配置文件 phpunit.xml
$ lnmp-phpunit [参数]

12. 测试构建 PHP 及 NGINX 镜像

将 PHP 项目打入镜像,镜像中严禁包含配置文件

自行修改 .env docker-compose.yml 文件,保留所需的 PHP 版本,其他的注释

$ docker-compose build

13. 将项目提交到 Git

$ git add .

$ git commit -m "First"

$ git push origin dev:dev

CI/CD 服务搭建

khs1994.com CI/CD 由 khs1994-docker/ci 提供。

Drone + Gogs 暂不支持挂载本地 Volume

本例 CI/CD 由 Travis 提供。

二、测试(全自动)

1. Git 通知到 CI/CD 服务器

  • Travis CI (公共的、仅支持 GitHub CI/CD)

  • Drone (私有化 CI/CD)

  • KhsCI (开发中,专为 PHPer 设计的基于容器的 CI/CD 系统)

2. CI/CD 服务器测试

具体请搜索 Travis 学习如何使用。

三、开发、测试循环

四、在 Kubernetes 中部署生产环境 (全自动)

可以在生产环境之前加一个 预上线 环境,这里省略。

1. git 添加 tag

  • 只有添加了 tag 的代码才能部署到生产环境

  • Docker 镜像名必须包含 git tag

  • CI/CD 服务器构建并推送镜像到 Docker 仓库。

生产环境部署 khs1994-docker/lnmp-k8s

2. Docker 私有仓库通知到指定地址

3. 在 CI/CD 系统中使用 Helm 在 k8s 集群更新服务

Copyright (c) 2011-2018 khs1994, https://khs1994.com <khs1994@khs1994.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

CI/CD 自动测试部署 Docker 化 PHP 项目最佳实践示例 || $ composer create-project --prefer-dist khs1994/example example 展开 收起
PHP
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
PHP
1
https://gitee.com/khs1994-docker/php-demo.git
git@gitee.com:khs1994-docker/php-demo.git
khs1994-docker
php-demo
php-demo
master

搜索帮助