lauri/dockermailer

Docker Compose结构,快速启动Mailer项目

安装: 11

依赖者: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 9

语言:Shell

3.3.0 2017-05-11 04:54 UTC

README

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

我们创建这个软件包是为了使Flow框架和Neos CMS项目的开发更加容易,并创建一个简单且可重用的软件包,该软件包易于维护,非常适合标准项目。

随着该软件包在多个项目中得到重用,开发将继续进行。欢迎贡献和反馈。

安装docker

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

安装docker-compose

我们使用docker-compose进行所有自动配置

https://docs.dockerd.com.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作为开发依赖项,强烈推荐使用最新稳定版本。

示例:

composer require --dev shel/dockerflow 3.1.*

运行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可以是appwebdatadbrediselasticsearchcouchdb

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

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

进一步阅读