shel / dockerflow
Docker Compose 结构,快速启动 Flow Framework 或 Neos CMS 项目
Requires
- neos/flow: *
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
这将显示正在运行的容器。data
容器可以不活跃以执行其工作。
技巧与窍门
使用不同的 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
运行 flow 命令
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当前可以是app
、web
、data
、db
、redis
、elasticsearch
或couchdb
。
在app
容器内部访问项目URL
由于当前Docker不支持双向链接,您不能从app容器访问web容器。但在某些情况下,您可能需要这种连接。例如,在没有selenium的behat测试中,您需要在Testing
上下文中访问您网站的url,而运行测试需要在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
,然后可以运行behat测试,而无需连接到外部的selenium服务器
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
端口。
运行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