lauri/dockert3kit

Docker Compose 结构,用于快速启动基于 t3kit 的 TYPO3 CMS 项目

安装: 226

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 7

分支: 7

语言:Shell

6.1.0 2017-01-23 09:28 UTC

README

重要 使用 t3kit_docker 仓库运行 t3kit。此仓库仅提供用于它的包装器。

DockerT3kit 创建必要的 Docker 容器(web服务器、数据库、php、邮件和 solr)来运行您的基于 t3kit 的 TYPO3 CMS 项目。该软件包在 vendor/bin/dockert3kit 中提供了一个包装器脚本,它简化了 docker 的处理,并执行所有必要的配置。

我们创建此软件包是为了使 TYPO3 CMS 项目的开发更加容易,并创建一个简单可重用的软件包,它可以很容易地进行维护,并很好地服务于标准项目。该软件包专门针对 t3kit 快速入门套件。

随着软件包已在几个项目中重用,开发将继续进行。欢迎贡献和反馈。

安装 docker

https://docs.dockerd.com.cn/installation/ (tested with docker v1.9 - v1.12)

安装 docker-compose

我们使用 docker-compose 来执行所有自动配置

https://docs.dockerd.com.cn/compose/install/ (tested with docker-compose v1.5 - v1.6)

仓库包含一个 Dockerfile,每次更改后都会在 docker hub 上自动构建,并由 docker-compose 使用来构建必要的容器。

在 Mac 或 Windows 上

已经测试了与 docker for Mac 一起工作,但尚未与 docker for Windows 一起工作。请随意尝试并告知我们是否无法等待。

将 dockert3kit 安装到您的发行版中

在您的 composer 中添加 lauri/dockert3kit 作为开发依赖项。

注意

如果您正在使用 EXT:solr = 6.0.0,请使用 4.0.0 版本

示例:

composer require --dev lauri/dockert3kit '~4.0.0'

如果您正在使用 EXT:solr = 6.1.0,请使用 5.0.0 版本

示例:

composer require --dev lauri/dockert3kit '~5.0.0'

注意:

DockerT3kit 使用端口 80 进行 Web 访问,因此您需要确保您的宿主机上没有使用该端口的任何软件。通常,如果您在宿主机上安装了 apache 或 nginx,就会发生这种情况,因此您可以停止它

sudo service apache2 stop
sudo service nginx stop

运行 dockert3kit

vendor/bin/dockert3kit up -d

该命令将回显您可以使用的 URL。从版本 2.1 开始,主机名自动指向 web 容器,因此您可以直接浏览,而无需像以前那样添加到 /etc/hosts

您还可以使用任何子域,例如 *.hostname,但您需要手动将每个子域指向您的 /etc/hosts,例如:0.0.0.0 test.hostname

-d 参数将使其在后台运行,直到您运行

vendor/bin/dockert3kit stop

您的 AdditionalConfiguration.php 的默认数据库配置为

<?php

if (!defined ('TYPO3_MODE')) {
    die ('Access denied.');
}

## Database connection
$GLOBALS['TYPO3_CONF_VARS']['DB']['host'] = 'db';
$GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 't3kit1234';
$GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 't3kit';
$GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 't3kit';

请注意,还有一个用于测试环境的第二个数据库 dockertypo3_test。测试环境 URL 为 test.hostname,并且此主机名也应添加到您的 /etc/hosts 中。

检查状态

vendor/bin/dockert3kit ps

这将显示正在运行的容器。数据容器可以是非活动的以完成其工作。

技巧与窍门

使用不同的 TYPO3_CONTEXT

TYPO3_CONTEXT=Production vendor/bin/dockert3kit up -d

DockerT3kit 还为测试环境设置了基于您当前运行的上下文的子上下文。在上面的示例中,它将是 Production/Testing。无论如何,您只能使用父上下文通过 vendor/bin/dockert3kit 命令。因此,当需要为测试上下文执行命令时,您需要首先进入 app 容器,然后使用上下文变量前缀调用命令。

TYPO3_CONTEXT=Production vendor/bin/dockert3kit up -d
vendor/bin/dockert3kit run app /bin/bash
TYPO3_CONTEXT=Production/Testing <YOUR COMMAND>

从您的宿主机到容器的远程调试配置

DockerT3kit 默认在服务器上安装了以下配置的 xdebug

xdebug.remote_enable = On
xdebug.remote_host = 'dockerhost'
xdebug.remote_port = '9001'
xdebug.max_nesting_level = 500

因此,您可以通过端口 9001 从主机远程调试到容器。您需要在 IDE 中相应地配置端口。如果您使用的是 PHPStorm,以下链接可能对您配置 IDE 很有帮助。

在服务容器中运行 shell

vendor/bin/dockert3kit run SERVICE /bin/bash

SERVICE 目前可以是 appwebdatadbsolr

app 容器内访问项目 URL

目前 Docker 不支持双向连接,您无法从 app 容器访问 web 容器。但在某些情况下,您可能需要这种连接。例如,在没有 selenium 的 behat 测试中,您需要在 Testing 上下文中使用您网站的 URL,而运行测试需要在 app 容器内进行。

DockerT3kit 在启动所有容器后添加了额外的脚本,以获取 web 容器的 IP 地址并将其追加到 app 容器内的 /etc/hosts 中,如下所示

WEB_CONTAINER_IP    project-url
WEB_CONTAINER_IP    test.project-url

您需要在您的 behat.yml 中定义默认测试套件 URL,以使用 http://test.project-url,然后您可以在不连接外部 selenium 服务器的情况下运行 behat 测试。

vendor/bin/dockert3kit run app vendor/bin/behat -c Path/To/Your/Package/Tests/Behaviour/behat.yml

从 Docker 主机访问容器内的数据库

虽然您可以轻松地使用 vendor/bin/dockert3kit run db /bin/bash 登录到 db 容器的 shell 并执行您的 mysql 命令,但在某些情况下,您可能希望直接从主机运行 mysql 命令而无需首先登录到 db 容器。其中一个最佳用例,例如,是使用 MySQL Workbench 工具访问容器内的数据库。为了能够这样做,我们已经将容器内的数据库端口(3306)映射到您的主机机器上的 3307 端口。

Screenshot of MySQL Workbench interface

访问 Apache Solr 服务器

您可以从主机机器上的 Web 界面访问 Apache Solr 服务器。

Web: http://hostname:8983/solr/ -> 将 hostname 替换为项目域名

在您的 app 容器内,Apache Solr 服务器将可通过以下 URL 访问: http://solr:8983/solr/

请确保您在 solr 扩展文件 Configuration/TypoScript/Solr/constants.txt 中有以下设置

plugin.tx_solr {
  
  	solr {
  		scheme = http
  		host = solr
  		port = 8983
  		path = /solr/core_en/
  	}
  
  	search {
  		targetPage = 0
  
  		results {
  			resultsPerPage = 10
  		}
  	}
  }

连接到正在运行的服务

运行 vendor/bin/dockert3kit ps 并复制您想要连接到的容器的名称。

运行 docker exec -it <containername> /bin/bash 并使用您刚刚复制的名称。这样,您就可以在正在运行的容器中工作,而无需创建一个新的容器。

检查容器中的开放端口

vendor/bin/dockert3kit run SERVICE netstat --listen

进一步阅读