lauri / dockert3kit
Docker Compose 结构,用于快速启动基于 t3kit 的 TYPO3 CMS 项目
Requires
- typo3/cms: *
This package is not auto-updated.
Last update: 2024-09-28 19:42:04 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 目前可以是 app
、web
、data
、db
或 solr
。
在 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
端口。
访问 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