fostermadeco / genly
用于管理本地开发环境中的共享Docker网络的实用程序。
Requires
- php: >=7.1.3
- ext-json: *
- symfony/console: ^4.4
- symfony/filesystem: ^4.4
- symfony/process: ^4.4
- symfony/yaml: ^4.4
Requires (Dev)
- symfony/var-dumper: ^4.4
README
Genly是一个用于管理本地开发环境中共享Docker网络和其他常见服务的实用程序。它受到了Dash的很大启发。
像Rokanan一样,它是以Ursula Le Guin的一个角色命名的。
先决条件
- PHP 7.1.3
- Composer
- Docker Desktop
- 本地主机上没有运行监听80或443端口的任何服务
安装
使用Composer全局安装Genly,运行
composer global require fostermadeco/genly dev-master
Genly需要几个版本为^4.4
的Symfony组件,因为这是当前的Symfony LTS版本。
这意味着您必须升级Rokanan才能并行安装它们。运行
composer global require fostermadeco/rokanan dev-require-php7
这将安装一个具有与Genly相同要求的新版本的Rokanan。如果您在根全局项目中需要任何与^3.4冲突的Symfony组件(如Rokanan README中所述),您必须先删除它们。
功能
Genly将创建自己的Docker网络,并在初始化时创建多个常见Docker容器。这些包括,
- 一个nginx代理,以便可以通过项目特定的域名而不是localhost访问多个Web项目。
- 一个dnsmasq解析器,将*.test请求路由到nginx代理;这不会干扰/etc/hosts中的任何*.test条目。
- 一个可访问于https://mailhog.test的mailhog容器。Web容器应配置为将邮件发送到
mailhog
(服务名)。 - 一个可从网络上其他容器访问的MySQL 5.7容器,地址为
mysql57
。它也可以通过MySQL客户端如SequelPro或Querious在127.0.0.1:3307上访问。 - 一个可从网络上其他容器访问的Postgres 12容器,地址为
postgres
。它也可以通过Postgres客户端在127.0.0.1:5433上访问 — TablePlus表现良好。
为了与Genly兼容,项目应包含一个定义了web
服务和node
服务的docker-compose.yml
文件。它可以包括任何其他服务,但这些是最低要求的服务。
命令
genly init
此命令将创建genly
网络和所有上述容器。
genly init:project
此命令将创建项目中docker-compose.yml
文件中定义的任何服务。
在Docker项目中,命令应仅在容器内运行,而不是在主机机器上运行。为了使事情更加简单,genly还提供了以下两个便利命令,以确保composer
和npm
命令分别通过web
和node
服务运行。
genly composer [...]
例如,genly composer install --no-dev --no-scripts --classmap-authoritative
将会在web
容器中运行composer install --no-dev --no-scripts --classmap-authoritative
。
genly npm [...]
例如,genly npm install
将会在node
容器中运行npm install
。
如果Webpack和BrowserSync配置正确,甚至可以运行genly npm run watch
,并提供在https://sync.example.test上的实时重新加载。
示例docker-compose文件
下面是一个基本的docker-compose文件。
version: '3' services: web: image: webdevops/php-nginx:7.4 expose: - 80 working_dir: /app environment: WEB_DOCUMENT_ROOT: /app/public VIRTUAL_HOST: example.test HTTPS_METHOD: redirect volumes: - .:/app:rw,cached networks: - genly node: image: node:12 expose: - 443 working_dir: /app environment: VIRTUAL_HOST: sync.example.test volumes: - .:/app:rw,cached command: npm run watch links: - "web:example.test" networks: - genly networks: genly: external: name: genly