visay/dockertypo3

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

8.7.0 2018-01-10 08:00 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可以是appwebdatadbrediselasticsearchcouchdb

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端口。

Screenshot of MySQL Workbench interface

访问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

进一步阅读