visay / dockertypo3
Docker Compose结构,用于快速启动TYPO3 CMS项目
Requires
- typo3/cms: *
This package is not auto-updated.
Last update: 2024-09-13 14:42:24 UTC
README
DockerTYPO3创建必要的Docker容器(web服务器、数据库、php、邮件、redis、elasticsearch、couchdb)以运行您的TYPO3 CMS项目。该包提供了一个包装脚本vendor/bin/dockertypo3,它简化了Docker的处理并完成了所有必要的配置。
我们创建此包是为了使TYPO3 CMS项目的开发更容易,并创建一个简单可重用的包,该包易于维护并适用于标准项目。
随着该包已在多个项目中得到应用,开发将继续进行。欢迎贡献和反馈。
安装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兼容。请随意尝试并告诉我如果您不能等待。
将dockertypo3安装到您的发行版中
在您的composer中添加visay/dockertypo3作为开发依赖项,强烈推荐使用最新的稳定版本。
示例:
composer require --dev visay/dockertypo3 2.1.*
注意:
DockerTYPO3使用80端口进行Web访问,因此您需要确保您的宿主机器没有使用该端口的任何软件。通常这发生在您在宿主机器上安装了apache或nginx的情况下,因此您可以使用以下命令停止它:
sudo service apache2 stop
sudo service nginx stop
运行dockertypo3
vendor/bin/dockertypo3 up -d
该命令将回显您可以通过它访问项目的URL。然后将主机名添加到/etc/hosts,并将IP设置为您的docker主机(Linux的默认值为0.0.0.0)。您还可以使用任何子域(例如*.hostname),它将指向同一服务器。您需要做的是将确切的子域名添加到您的/etc/hosts。参数-d将使其在后台运行,直到您运行
vendor/bin/dockertypo3 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'] = 'root';
$GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'root';
$GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'dockertypo3';
此外,请注意还有一个第二个数据库dockertypo3_test可用于您的测试环境。测试环境URL为test.hostname,并且此主机名也应添加到您的/etc/hosts中。
检查状态
vendor/bin/dockertypo3 ps
这将显示正在运行的容器。数据容器可能处于非活动状态以执行其工作。
技巧与窍门
使用不同的TYPO3_CONTEXT
TYPO3_CONTEXT=Production vendor/bin/dockertypo3 up -d
DockerTYPO3还根据您正在运行的当前上下文设置了一个子上下文用于测试。在上面的例子中,它将是Production/Testing。无论如何,您只能使用vendor/bin/dockertypo3命令的父上下文。因此,当需要为测试上下文执行命令时,您需要首先进入app容器,然后调用以上下文变量为前缀的命令。
TYPO3_CONTEXT=Production vendor/bin/dockertypo3 up -d
vendor/bin/dockertypo3 run app /bin/bash
TYPO3_CONTEXT=Production/Testing <YOUR COMMAND>
从您的宿主机配置远程调试到容器
DockerTYPO3默认安装了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/dockertypo3 run SERVICE /bin/bash
当前SERVICE可以是app、web、data、db、redis、elasticsearch或couchdb。
在app容器内访问项目URL
当前Docker不支持双向链接,您不能从app容器访问web容器。但在某些情况下,您可能需要这种连接。例如,在没有selenium的behat测试中,您需要在Testing上下文中运行测试时,需要您的站点的URL在app容器内部。
DockerTYPO3在启动所有容器后添加了额外的脚本,以获取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/dockertypo3 run app vendor/bin/behat -c Path/To/Your/Package/Tests/Behaviour/behat.yml
从Docker主机访问容器内的数据库
虽然您可以轻松使用vendor/bin/dockertypo3 run db /bin/bash登录到db容器的shell并执行mysql命令,但在某些情况下,您可能希望直接从主机运行mysql命令而不必首先登录到db容器。其中一个最好的用例是,例如,使用MySQL Workbench工具访问容器内的数据库。为了能够做到这一点,我们将容器内的数据库端口(即3306)映射到主机的3307端口。
访问CouchDB
从您的主机机器,您可以通过web界面或命令行访问couchdb
Web: http://0.0.0.0:5984/_utils/
Cli: curl -X GET http://0.0.0.0:5984/_all_dbs
从您的app容器内部,您也可以通过命令行访问couchdb
vendor/bin/dockertypo3 run app /bin/bash
curl -X GET http://couchdb:5984/_all_dbs
连接到正在运行的服务
运行vendor/bin/dockertypo3 ps并复制您想要连接的容器的名称。
运行docker exec -it <containername> /bin/bash使用您刚刚复制的名称。这样您就可以在运行中的容器中工作,而不是创建一个新的容器。
检查容器中的开放端口
vendor/bin/dockertypo3 run SERVICE netstat --listen
