sebastianhelzle/dockerflow

此包已被废弃且不再维护。作者建议使用shel/dockerflow包。

Docker Compose结构,用于快速启动Flow Framework或Neos CMS项目

安装: 39

依赖者: 0

建议者: 0

安全: 0

星星: 16

关注者: 6

分支: 9

开放问题: 5

语言:Shell

5.0.1 2018-08-20 03:57 UTC

README

DockerFlow创建必要的Docker容器(web服务器、数据库、php、邮件、redis、elasticsearch、couchdb)以运行您的Flow Framework或Neos CMS项目。该包提供在bin/dockerflow中的包装脚本,简化了对docker的处理并完成所有必要的配置。

我们创建此包是为了使Flow Framework和Neos CMS项目的开发更加容易,并创建一个简单且可重复使用的包,易于维护并适用于标准项目。

由于该包已在多个项目中重复使用,因此将继续进一步开发。欢迎贡献和反馈。

安装docker

https://docs.docker.net.cn/installation/ (tested with docker v1.9 - v17.03)

安装docker-compose

我们使用docker-compose来完成所有自动配置

https://docs.docker.net.cn/compose/install/ (tested with docker-compose v1.5 - v1.11)

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

在Mac或Windows上

该软件与docker for Mac兼容,但尚未与docker for Windows兼容。您可以随时尝试它,并在无法等待的情况下告诉我们。

将dockerflow安装到您的发行版

在您的composer中将shel/dockerflow添加为dev依赖项,强烈建议使用最新的稳定版本。

示例:

composer require --dev shel/dockerflow 5.0.*

运行dockerflow

bin/dockerflow up -d

该命令将回显您可以通过它访问项目的URL。将主机名添加到您的/etc/hosts中,并将IP设置为您的docker主机(Linux默认为0.0.0.0)或boot2docker IP。您也可以使用任何子域,例如*.hostname,它将指向同一服务器。您需要做的是将确切的子域名称添加到您的/etc/hosts中。

使用-d参数将命令在后台运行,直到您手动停止它

bin/dockerflow stop

您的Settings.yaml的默认数据库配置如下

TYPO3:
  Flow:
    persistence:
      backendOptions:
        dbname: dockerflow
        user: root
        password: root
        host: db
        driver: pdo_mysql

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

检查状态

bin/dockerflow ps

这将显示正在运行的容器。数据容器可以不活跃以执行其工作。

技巧与窍门

使用不同的FLOW_CONTEXT

FLOW_CONTEXT=Production bin/dockerflow up -d

在当前运行的上下文的基础上,Dockerflow 还为测试设置了一个子上下文。在上面的示例中,它将是 Production/Testing。无论如何,您只能使用父上下文来运行 bin/dockerflow 命令。所以当需要为测试上下文执行命令时,您需要首先进入 app 容器,然后调用以上下文变量为前缀的命令。

FLOW_CONTEXT=Production bin/dockerflow up -d
bin/dockerflow run app /bin/bash
FLOW_CONTEXT=Production/Testing ./flow doctrine:migrate

运行流程命令

bin/dockerflow run app ./flow help

FLOW_CONTEXT=Production bin/dockerflow run app ./flow flow:cache:flush --force

在容器中保留 Flow 缓存以提升性能

将此配置添加到 Flow 中的 Settings.yaml

TYPO3:
  Flow:
    utility:
      environment:
        temporaryDirectoryBase: /tmp/dockerflow/Temporary/

使用 Redis 后端优化特定缓存

对于带有标签的缓存,Neos 在大量内容下会变得缓慢。将以下内容添加到您的 Caches.yaml 以将提到的缓存存储在 Redis 中

TYPO3_TypoScript_Content:
  backend: TYPO3\Flow\Cache\Backend\RedisBackend
  backendOptions:
    hostname: 'redis'
    port: '6379'
    database: 0

Flow_Mvc_Routing_Resolve:
  backend: TYPO3\Flow\Cache\Backend\RedisBackend
  backendOptions:
    hostname: 'redis'
    port: '6379'
    database: 0

Flow_Mvc_Routing_Route:
  backend: TYPO3\Flow\Cache\Backend\RedisBackend
  backendOptions:
    hostname: 'redis'
    port: '6379'
    database: 0

使用 MailHog 测试邮件发送

将此配置添加到您的 Settings.yaml

TYPO3:
  SwiftMailer:
    transport:
      type: 'Swift_SmtpTransport'
      options:
        host: 'mail'
        port: 1025

并在浏览器中打开 MyNeosProject:8025(使用您自己的主机名)以查看您的邮件。

从您的 Flow 应用程序发送电子邮件并享受乐趣。

使用 flowpack/elasticsearch 包配置 ElasticSearch

将此配置添加到您的 Settings.yaml

Flowpack:
  ElasticSearch:
    clients:
      default:
        -
          host: elasticsearch
          port: 9200

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

DockerFlow 默认安装了 xdebug,服务器上的配置如下

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

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

在服务容器中运行 shell

bin/dockerflow run SERVICE /bin/bash

SERVICE 可以是 appwebdatadbrediselasticsearchcouchdb

app 容器内部访问项目 URL

由于当前的 Docker 不支持双向链接,您无法从 app 容器访问 web 容器。但在某些情况下,您可能需要这种连接。例如,在没有 selenium 的 behat 测试中,您需要在 Testing 上下文中运行测试,同时测试需要在 app 容器内部进行。

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

WEB_CONTAINER_IP    project-url
WEB_CONTAINER_IP    test-project-url

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

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

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

虽然您可以轻松地使用bin/dockerflow run db /bin/bash登录到db容器的shell中并执行您的MySQL命令,但在某些情况下,您可能希望直接从主机运行MySQL命令,而无需先登录到db容器。例如,最好的使用场景之一就是从MySQL Workbench工具访问容器内的数据库。为了能够做到这一点,我们将容器内的数据库端口(即3306)通过3307端口映射到您的宿主机。

Screenshot of MySQL Workbench interface

运行Flow包的功能测试

DockerFlow默认在基本镜像中安装了sqlite,以便可以直接运行功能测试。以下示例演示了如何使用一次性命令运行Flow框架包的所有功能测试。

bin/dockerflow run app /var/www/bin/phpunit -c /var/www/Build/BuildEssentials/PhpUnit/FunctionalTests.xml /var/www/Packages/Framework/TYPO3.Flow/Tests/Functional/

在设置Flow项目时,请确保使用--dev模式运行composer install,并调整您自己包的测试目录路径。

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

bin/dockerflow run app /bin/bash
curl -X GET http://couchdb:5984/_all_dbs

连接到运行中的服务

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

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

检查容器中的开放端口

bin/dockerflow run SERVICE netstat --listen

进一步阅读