joomla-projects/virtualisation

一个基于XML的Docker环境生成器,主要用于自动化测试。

dev-master 2019-09-01 12:25 UTC

This package is not auto-updated.

Last update: 2024-09-15 22:49:22 UTC


README

Joomla! 虚拟化工具根据XML设置定义生成docker-compose.yml文件,主要用于自动化测试,但不限于。它基于GreenCape/build

此存储库还包含一组 Dockerfile。一旦它们不再频繁更改,镜像将在DockerHub上可用。

安装

Joomla! 虚拟化工具仍在开发中。一旦它完全可用,它将通过Composer提供安装。

请确保使用最新版本的dockerdocker-compose。例如,从Ubuntu 16.04的标准仓库中获取的版本已经过时。按照Docker Community Edition (CE)Docker Compose的官方说明获取最新版本。

使用

use Joomla\Virtualisation\DockerComposeGenerator;

$generator = new DockerComposeGenerator('tests/servers');
$generator->write('dockyard/docker-compose.yml');

其中 'tests/servers' 是包含XML设置配置的目录,而 'dockyard' 是在环境中定义的docker构建目录(参见下一节中的环境 / host / dockyard)。

定义测试环境

在您的tests目录下创建一个新的servers目录。它将包含以下XML文件以描述服务器配置。

数据库

数据库凭据应位于tests/servers目录中名为database.xml的文件中。

<database>
    <mysql version="latest" name="joomla_test" user="sqladmin" password="sqladmin" rootPassword="root"/>
    <postgresql version="latest" name="joomla_test" user="sqladmin" password="sqladmin"/>
</database>
MySQL

定义MySQL(兼容)数据库服务器的版本和凭据。

  • version - 要使用的MySQL版本。支持从MySQL 5.5以来的所有次要版本。默认为'latest'。
  • name - 数据库的名称。
  • user - 数据库用户的名称。
  • password - 数据库用户的密码。
  • rootPassword - 数据库root密码。
PostgreSQL

定义PostgreSQL数据库服务器的版本和凭据。

  • version - 要使用的PostgreSQL版本。支持从PostgreSQL 9.2以来的所有次要版本。默认为'latest'。
  • name - 数据库的名称。
  • user - 数据库用户的名称。
  • password - 数据库用户的密码。

环境

<environment name="env-name">
    <host dockyard="shipyard"/>
    <joomla version="3" sampleData="data"/>
    <database driver="mysql" name="joomla3" prefix="j3m_"/>
    <server type="nginx" offset="UTC" tld="dev"/>
    <php version="5.4"/>
    <cache enabled="0" time="15" handler="file"/>
    <debug system="1" language="1"/>
    <meta description="Test installation" keywords="" showVersion="0" showTitle="1" showAuthor="1"/>
    <sef enabled="0" rewrite="0" suffix="0" unicode="0"/>
    <feeds limit="10" email="author"/>
    <session lifetime="15" handler="database"/>
</environment>
  • name - 此环境的名称。对于默认环境,它始终为default

所有测试服务器共有的设置保存在名为default的环境中,并存储在default.xml中。一个典型的环境定义将只包含服务器、Joomla和数据库元素。

主机

定义docker主机设置。

  • dockyard - 此设置确定生成的卷(文件系统)所在的目录。
  • port - 代理期望监听的端口。
joomla

定义Joomla版本和示例数据。

  • version - 此设置确定要在此环境中安装的Joomla版本。它可以是从1.0.0以来的任何Joomla版本。版本可以是完全限定的,例如,3.4.2,也可以使用3.4、3、latest、master、staging或任何其他分支名称。
  • sampleData - 如果有,要安装的样本数据。必须存在名为 sample_<value>.sql 的文件,且该文件与所选的 Joomla 版本和数据库驱动程序相匹配。
数据库

数据库服务器的域名由所选驱动程序决定。相应的容器将自动与 Joomla 安装关联。

  • driver - 这决定了此 Joomla 安装所使用的数据库类型。目前支持 mysql、mysqli、pdomysql 和 postgresql。
  • name - 包含 Joomla 网站数据表的数据库的名称。
  • prefix - 应用到此 Joomla 安装使用的数据库表名称的前缀。对于 Joomla v1.5.x 和 v1.6.x,默认为“jos”,如果另一个 Joomla 网站需要与同一个数据库共享,则可以通过设置此第二个站点使用不同的前缀来保持数据库表分开 - 例如,“jos2”。对于 Joomla v1.7.x,通过使用随机生成的字母代码和下划线作为前缀可以实现相同的结果 - 例如,“vduea_”。
服务器

定义服务器设置。

  • type - 要使用的引擎。有效值是 nginx 和 apache。
  • offset - 时区。
  • tld - URL 的顶级域名。
PHP

定义 PHP 版本。

  • version - 要使用的 PHP 版本。支持自 PHP 5.4 以来所有的次要版本。默认为 'latest'。
缓存

定义 Joomla! 缓存设置。这些值将写入到 configuration.php 文件中。

  • enabled - 此设置控制是否启用站点缓存。启用后,网页将在缓存存储中保留一段时间,并在需要时从缓存中检索,而不是每次都重新创建。
  • handler - 此设置定义了管理缓存存储的机制。
  • time - 此参数定义了在更新为当前版本之前,网页在缓存存储中保留的最大时间。默认为 15 分钟。
调试

定义 Joomla! 调试设置。这些值将写入到 configuration.php 文件中。

  • system - 如果设置为“1”,Joomla 将在每一页的正常网页区域下方添加调试信息。这些信息将包括各种诊断信息,包括生成页面所使用的完整数据库查询。默认设置是“否”。调试功能呈现的诊断信息的组合和格式可以通过编辑调试 - 系统 插件的参数(扩展 > 插件管理器)进行更改。
  • language - 如果设置为“1”,Joomla 将激活旨在帮助调试 Joomla 网站的翻译功能。这包括将语言翻译信息添加到页面调试信息中(需要将系统也设置为“1”),以及显示在网页本身中的翻译内容标记。有关更多信息,请参阅调试翻译。
元数据

定义 Joomla! 元数据设置。这些值将写入到 configuration.php 文件中。

  • description - 这里添加的文本将出现在网页标题中作为“描述”元数据条目。
  • keywords - 这里添加的单词和短语(用逗号分隔)将作为“关键词”元数据条目出现在网页标题中。
  • showVersion - 是否在元数据中暴露 Joomla 版本。
  • showTitle - (仅在 Joomla v1.6.x 及以后版本中存在。)将站点名称附加到每个网页标题的 title 标签中。Joomla v1.6.x 引入了此功能作为选项,可以选择在页面标题之前包含站点名称文本(例如,站点名称 - 页面名称)或省略它。在 Joomla v1.7.x 中,选项还包括在页面名称之后(例如,页面名称 - 站点名称)以及之前插入站点名称。
  • showAuthor - 当此参数设置为“1”时,当适用时将在页面标题中添加“作者”元数据条目,使用内容项目的作者名称作为元数据文本。
SEF

定义了Joomla!的SEO设置。这些值将被写入到configuration.php文件中。

  • enabled - Joomla的内部URL表示通常很长,也难以被人类和搜索引擎蜘蛛理解。这是一个页面显示内容项内部URL的典型示例:www.example.com/index.php?option=com_content&view=article&id=22&Itemid=437。如果此选项设置为“1”,则URL将被修改为更短且更有意义的格式:www.example.com/index.php/getting-started。URL中的标识文本(在本例中为“getting_started”)来自为每个分类、内容项和菜单项设置的别名文本。

  • rewrite - 当此参数设置为“1”时,Joomla将使用Apache服务器的mod_rewrite功能来消除URL中的index.php部分。因此,当此功能运行时,上述“搜索引擎友好”的URL将变为:www.example.com/getting-started

    注意:此参数默认设置为“0”。除非网站服务器使用Apache软件,否则不应将其设置为“1”。htaccess.txt文件将自动重命名为.htaccess

  • suffix - 当设置为“1”时,Joomla将在大多数网站URL的末尾添加.html,从而模拟基于文件的静态Web内容。上述URL将变为:www.example.com/index.php/getting-started.htmlwww.example.com/getting-started.html

  • unicode - (仅在Joomla v1.6.x及以后版本中存在。)当保存编辑内容时,以前的设置尝试将任何别名文本转换为相应的拉丁字符。当设置为“1”时,Joomla将保留别名文本中的任何非拉丁字符不变。更改此参数不会使别名回溯更改,它只是更改未来内容编辑和创建时自动生成别名的行为。

feed

定义了Joomla!的feed设置。这些值将被写入到configuration.php文件中。

  • limit - 在网站上设置的任何RSS新闻源中显示的内容项数量。默认设置为10,但除非网站非常活跃,否则较小的数字可能更好。
  • email - 由Joomla“Syndicate feeds”(Joomla v1.5.x中的“Syndication”)网站模块从网站内容生成的Atom和RSS新闻源可能包括作者身份的一部分电子邮件地址。此参数确定该电子邮件地址的来源:“author”设置将使用网站内容作者的电子邮件地址,“site”将使用在“服务器”选项卡下设置的“From email”地址,用于网站自动生成的电子邮件。
session

定义了Joomla!的会话设置。这些值将被写入到configuration.php文件中。

  • lifetime - 此参数确定用户在非活动状态下多久自动注销。默认设置为15分钟,但在开发网站上可能有必要暂时延长此参数以避免反复登录。
  • handler - 从同一用户的下一个页面请求中,选择用于在页面请求之间保持会话信息的机制。选项是“database”(默认)和“none”。前者将会将会话信息作为网站Joomla数据库表中的条目存储,后者使用PHP内置的会话处理机制。

示例

最新的Joomla!2.5在Apache上与MySQLi和示例数据

<environment name="j25-mysqli">
    <joomla version="2.5" sampleData="data"/>
    <server type="apache"/>
    <database driver="mysqli" name="joomla25" prefix="j2m_"/>
</environment>

最新的Joomla!3在Nginx上与PostgreSQL,无示例数据

<environment name="j3-postgresql">
    <joomla version="3"/>
    <server type="nginx"/>
    <database driver="postgresql" prefix="j3p_"/>
</environment>

贡献

欢迎PR。如果您遇到任何错误或问题,请使用问题跟踪器

要贡献代码或错误修复,请克隆此仓库,添加您的更改,并针对develop分支发起拉取请求。

运行测试

在命令行中,进入

$ phpunit

项目根目录。

主要测试在dockyard目录中创建一个完整的设置,可以用来探索各种可能性。要调用它,运行

$ phpunit tests/DockerComposeGeneratorTest

此步骤已在下面的composer build便捷命令中包含。

容器测试

对于Apache和PHP-FPM容器,该项目提供自己的镜像(参见src/Service/docker)。为了确保这些镜像具有所需的特性,专门在tests-container中创建了一个测试套件。它们被从其他测试中分离出来,因为每个容器和PHP版本的运行需要1-2分钟。

这些测试确保对于每个支持的PHP版本

  • 容器成功构建
  • 和FPM或Apache处理器以及CLI
    • 都有请求的PHP版本
    • 已启用合适的Xdebug版本
    • 使用catchmail代替sendmail
    • 支持OpenSSL
    • 支持MysqlI和MySQL的PDO驱动程序
    • 支持PostgreSQL和PostgreSQL的PDO驱动程序

要运行这些测试,请在命令行中输入

$ phpunit tests-container

便捷命令

提供了一些composer脚本,以使生活更加轻松。它们从项目的根目录运行,并让您无需像docker-compose要求的那样切换到dockyard目录。

在干净环境中运行测试

$ composer test

在删除dockyard内容后,使用--testdox选项运行PHPUnit。

设置虚拟网络

$ composer build

运行主要测试并构建所有Docker镜像。创建此网络:Docker Network

启动虚拟网络

$composer start

在运行测试后,在后台启动容器。

停止虚拟网络

$ composer stop

停止所有正在运行的容器。

拆除虚拟网络

$ composer clean

删除容器和dockyard内容。如果需要,容器将自动停止。