docker仓库安利-devilbox非常好用的php开发环境

NewImage

先上一张最后的仪表盘的截图

一、准备篇

当前环境依赖于docker ,不知道docker是什么的先了解一下docker,网络上有docker 的安装教程

本次教程所用的环境是mac os + docker for Mac

1.首先得知道本次主角的git地址 https://github.com/cytopia/devilbox

Mac的安装  打开终端  首先得有git   没有的同学先

brew install git
#获取Devilbox
$ git clone https://github.com/cytopia/devilbox
#创建docker-compose环境文件
$ cd devilbox
$ cp env-example .env
#编辑您的配置
$ vim .env

这样当完成配置文件的编辑之后

执行 docker-compse up 来启动配置里的所有服务

当然 你也可以只启动部分服务

docker-compse up httpd php mysql

这样就可以只启用Apache php和MySQL了

关于多站点管理

因为docker与本地文件建立了链接   在devilbox目录下的data目录下的www目录下

可以新建自己的项目文件夹

在里面在项目文件夹下建立  在.env文件配置的根目录文件夹

如果是laravel或者thinkphp的项目可以设置成public

然后在本地的host文件中添加文件夹名.loc  指向127.0.0.1 就可以通过文件夹名.loc   来访问你的项目了

 

 file

NewImage

最后附上.env的配置说明

.env文件

所有docker-compose配置都在.env文件中完成,该文件只定义了docker-compose.yml评估的键值对。

如果这个文件不为您Devilbox的git目录的根目录中,然后复制env-example 到.env最初与理智的默认值创建它。

注意

使用浏览器搜索功能快速查找所需的变量名称。

重要

任何更改都.env需要重新启动Devilbox。

      •  

核心设置

DEBUG_COMPOSE_ENTRYPOINT

此变量控制服务启动期间的docker-compose日志详细程度。设置为1详细输出时,显示已执行的命令。设置为0仅显示警告和错误时。

名称 允许的值 默认值
DEBUG_COMPOSE_ENTRYPOINT 0 要么 1 1

 

DOCKER_LOGS

此变量控制日志的输出。日志可以转到文件并./log/在Devilbox git目录下可用,也可以转发到Docker日志,然后发送到stdout和stderr。

名称 允许的值 默认值
DOCKER_LOGS 1 要么 0 0

DOCKER_LOGS设置为1,输出将转到Docker日志,否则如果设置为 0日志输出将转到文件下./log/

./log/目录本身将包含子目录形式<service>-<version> 随后将容纳所有可用的日志文件。

注意

在启动Devilbox之前,日志目录不存在,并且只会为您启用的服务版本创建.env

日志目录结构如下所示:

host> cd path/to/devilbox
host> tree log

log/
├── nginx-stable/
│   ├── nginx-stable/
│   ├── defaultlocalhost-access.log
│   ├── defaultlocalhost-error.log
│   ├── <project-name>-access.log    # Each project has its own access log
│   ├── <project-name>-error.log     # Each project has its own error log
├── mariadb-10.1/
│   ├── error.log
│   ├── query.log
│   ├── slow.log
├── php-fpm-7.1/
│   ├── php-fpm.access
│   ├── php-fpm.error

如果要读取发送到Docker日志的日志,可以通过以下命令执行此操作:

host> cd path/to/devilbox
host> docker-compose logs

如果要连续观察日志输出(例如),则需要附加 到命令。tail -f-f

host> cd path/to/devilbox
host> docker-compose logs -f

当您只想为单个服务显示日志时,您还可以附加服务名称(可以使用或不使用-f):

host> cd path/to/devilbox
host> docker-compose logs php -f

重要

目前,这仅适用于PHP-FPM和HTTPD Docker容器。MySQL将始终将其日志输出到文件,所有其他官方Docker容器始终输出到Docker日志。

DEVILBOX_PATH

这指定了Devilbox git目录的相对或绝对路径,并将用作所有Docker安装路径的前缀。

  • 相对路径:相对于devilbox git目录(必须以.)开头
  • 绝对路径:完整路径(必须以/)开头

您希望更改此变量的唯一原因是,当您使用MacOS并因性能问题将项目文件重定位到NFS卷时。

警告

删除已停止的容器
每当您更改此值时,您必须停止Devilbox并通过删除已停止的容器 。docker-compose rm
名称 允许的值 默认值
DEVILBOX_PATH 有效路径 .

 

LOCAL_LISTEN_ADDR

此变量指定主机计算机侦听已公开容器端口的IP地址。如果将此变量保留为空,则所有公开的端口都将绑定到主机操作系统上的所有网络接口,这也是默认行为。如果您只希望将公开的容器端口绑定到特定的IP地址(例如 127.0.0.1),则可以在此处添加此IP地址,但请注意,在这种情况下,您必须添加尾随冒号(:)。

名称 允许的值 默认值
LOCAL_LISTEN_ADDR IP地址

例子:

含义
127.0.0.1: 只暴露主机操作系统上的端口127.0.0.1。请注意尾随:
192.168.0.1: 只暴露主机操作系统上的端口192.168.0.1。请注意尾随:
0.0.0.0: 监听所有主机接口/ IP地址
  监听所有主机接口/ IP地址

注意

使用时,必须将此变量保留为空,以便在虚拟机的外部接口上提供公开的端口。Docker Toolbox

 

TLD_SUFFIX

此变量控制所有项目域后缀。

名称 允许的值 默认值
TLD_SUFFIX 字母数字字符串 loc

您的项目域是从项目目录名称和TLD_SUFFIX。公式如下:http://<project-dir>.<TLD_SUFFIX>

您甚至可以使用官方tld并让您的名称服务器指向内部LAN ID,以使该项目对您公司LAN中的每个人都可见。

它看起来怎么样?

项目目录 TLD_SUFFIX 项目网址
my-test loc http://my-test.loc
example loc http://example.loc
www.test loc http://www.test.loc
     
     
     

警告

不要dev用作域名后缀(我知道,这很诱人)。它已经由 Google(ICANN) 注册 ,他们宣传HSTS标头 ,使您的浏览器将每个http请求重定向到https。

另请参阅: Chrome和Firefox现在通过预加载的HSTS强制.dev域到HTTPS

警告

不要localhost用作域名后缀。有一个RFC草案,以确保所有localhost请求,包括其子域应重定向到系统环回接口。Docker已经发布了一个阻止localhost在MacOS上使用的提交。

另请参阅: RFC草案:localhost 和 Docker发行说明:17.12.0-ce-mac46

警告

不要使用官网域结尾,例如.com.org.net等,如果你这样做,所有的域名解析到任何.com地址(例如:google.com)将被解析为Devilbox的PHP服务器的IP地址。

捆绑的DNS服务器在给定的TLD_SUFFIX上执行全能,并将其下面的所有内容解析为PHP容器。

 

EXTRA_HOSTS

此变量允许您从Devilbox网络外部的主机添加其他DNS条目,例如在主机操作系统,LAN或Internet上运行的主机。

名称 允许的值 默认值
EXTRA_HOSTS 逗号分隔的主机映射

添加主机可以通过两种方式完成:

  1. 添加IP地址的DNS条目
  2. 为主机名/ CNAME添加DNS条目,该条目将映射到它将解析的任何IP地址

添加额外主机的一般结构如下所示

# Single host
EXTRA_HOSTS='hostname=1.1.1.1'
EXTRA_HOSTS='hostname=CNAME'

# Multiple hosts
EXTRA_HOSTS='hostname1=1.1.1.1,hostname2=2.2.2.2'
EXTRA_HOSTS='hostname1=CNAME1,hostname2=CNAME2'
  • 左侧表示主机可用的名称
  • 右侧表示新名称将解析为的IP地址
  • 如果右侧是CNAME本身,它将首先解析为IP地址,然后左侧将解析为该IP地址。

添加额外主机的几个示例:

# 1. One entry:
# The following extra host 'loc' is added and will always point to 192.168.0.7.
# When reverse resolving '192.168.0.7' it will answer with 'tld'.
EXTRA_HOSTS='loc=192.168.0.7'

# 2. One entry:
# The following extra host 'my.host.loc' is added and will always point to 192.168.0.9.
# When reverse resolving '192.168.0.9' it will answer with 'my.host'.
EXTRA_HOSTS='my.host.loc=192.168.0.9'

# 3. Two entries:
# The following extra host 'tld' is added and will always point to 192.168.0.1.
# When reverse resolving '192.168.0.1' it will answer with 'tld'.
# A second extra host 'example.org' is added and always redirects to 192.168.0.2
# When reverse resolving '192.168.0.2' it will answer with 'example.org'.
EXTRA_HOSTS='tld=192.168.0.1,example.org=192.168.0.2'

# 4. Using CNAME's for resolving:
# The following extra host 'my.host' is added and will always point to whatever
# IP example.org resolves to.
# When reverse resolving '192.168.0.1' it will answer with 'my.host'.
EXTRA_HOSTS='my.host=example.org'

也可以看看

这类似于 Docker Compose 的功能:extra_hosts添加外部链接。

也可以看看

连接到外部主机

 

NEW_UID

此设置控制Devilbox的核心概念之一。它克服了Docker容器和主机操作系统之间同步文件和目录权限的问题。

您应该将此值设置为您实际使用的主机操作系统用户的用户ID。你如何找到你的用户名?

host> id -u
1000

在大多数情况下(在Linux和MacOS上),1000如果您是系统中的第一个也是唯一一个用户,那么它也可能是不同的值。

名称 允许的值 默认值
NEW_UID 有效的uid 1000

然后,Devilbox自己的容器将在启动期间获取此值,并将其内部用户ID更改为指定的值。然后,PHP-FPM,Apache和Nginx等服务将使用此uid对文件进行读写操作,因此挂载的所有文件都将具有本地用户的权限,之后您无需修复权限。

也可以看看

同步容器权限
阅读有关尝试在主机系统和正在运行的Docker容器之间实现同步权限的一般问题的更多信息。

 

NEW_GID

这相当于组的用户ID和地址相同的概念。请参阅NEW_UID

你怎么知道你的组ID?

host> id -g
1000

在大多数情况下(在Linux和MacOS上),1000如果您是系统中的第一个也是唯一一个用户,那么它也可能是不同的值。

名称 允许的值 默认值
NEW_GID 有效的gid 1000

也可以看看

同步容器权限
阅读有关尝试在主机系统和正在运行的Docker容器之间实现同步权限的一般问题的更多信息。

 

TIMEZONE

此变量控制Devilbox自己的容器的系统和服务时区。这对于保持PHP和数据库时区同步特别有用。

名称 允许的值 默认值
TIMEZONE 有效时区 Europe/Berlin

查看Wikipedia以获取有效时区列表: Wikipedia:数据库时区列表

注意

最好不要假设特定时区并将所有值存储在UTC中(例如MySQL中的时间类型)。

内联网设置

DNS_CHECK_TIMEOUT

Devilbox内部网验证每个项目是否都有相应的DNS记录(官方DNS记录,来自其自己的自动DNS或/etc/hosts条目)。通过这样做,它基于查询DNS记录<project-dir>.<TLD_SUFFIX>。如果它不存在,查询本身可能需要一段时间,内部网页将在此期间无响应。为了避免漫长的等待时间,您可以设置DNS查询超时(以秒为单位),在此之后查询应该停止并报告为不成功。默认值是1秒,对于所有用例都应该是相当明智的。

名称 允许的值 默认值
DNS_CHECK_TIMEOUT 整数 1

 

DEVILBOX_UI_SSL_CN

通过https它访问Devilbox内部网时,将使用自动创建的SSL证书。每个SSL证书都需要一个有效的公用名,该公用名必须与虚拟主机名匹配。

此设置允许您通过什么指定的名称您正在访问的Devilbox内部网。默认值为localhost,但如果您已创建自己的别名,则必须相应地更改此值。另请注意,可能有多个值,必须用逗号分隔。在*.开头添加星号()时,表示它将为该主机名创建通配符证书。

名称 允许的值 默认值
DEVILBOX_UI_SSL_CN 以逗号分隔的CN列表 localhost,*.localhost,devilbox,*.devilbox

示例

  • DEVILBOX_UI_SSL_CN=localhost
  • DEVILBOX_UI_SSL_CN=localhost,*.localhost
  • DEVILBOX_UI_SSL_CN=localhost,*.localhost,devilbox,*.devilbox
  • DEVILBOX_UI_SSL_CN=intranet.example.com

也可以看看

设置有效的HTTPS

 

DEVILBOX_UI_PROTECT

通过将此变量设置为1,Devilbox Intranet将受密码保护。如果您在LAN上共享正在运行的Devilbox实例,但不希望每个人都可以访问Intranet本身,只是对您实际提供的项目有用,这可能很有用。

名称 允许的值 默认值
DEVILBOX_UI_PROTECT 0 要么 1 0

注意

还要注意下一个env var,它将控制登录的密码: DEVILBOX_UI_PASSWORD

 

DEVILBOX_UI_PASSWORD

当devilbox Intranet受密码保护时DEVILBOX_UI_PROTECT,这是受保护的实际密码。

名称 允许的值 默认值
DEVILBOX_UI_PASSWORD 任何字符串 password

 

DEVILBOX_UI_ENABLE

如果您想完全禁用Devilbox Intranet,例如在生产时运行它,您需要将此变量设置为0

通过禁用Intranet,Web服务器将只删除默认虚拟主机并将所有基于IP的请求重定向到第一个可用的虚拟主机,这将是按字母顺序排序其名称时的第一个项目。

名称 允许的值 默认值
DEVILBOX_UI_ENABLE 0 要么 1 1

Docker图像版本

以下设置反映了Devilbox的主要目标之一:能够运行所有容器版本的任意组合。

注意

对这些设置的任何更改都需要重新启动devilbox。

 

PHP_SERVER

此变量选择要启动的所需PHP-FPM版本。

名称 允许的值 默认值
PHP_SERVER php-fpm-5.2 php-fpm-5.3 php-fpm-5.4 php-fpm-5.5 php-fpm-5.6 php-fpm-7.0 php-fpm-7.1 php-fpm-7.2 php-fpm-7.3 php-fpm-7.1

重要

PHP 5.2可以使用,但它不受官方支持。Devilbox Intranet不适用于此版本,因为PHP 5.2不支持名称空间。此外,PHP 5.2仅适用于Apache 2.4,Nginx stable和Nginx主线。它不适用于Apache 2.2。 使用风险由您自己承担。

所有值都已在.env文件中可用,只需要进行注释或取消注释。如果取消注释多个值,则最后一个未注释的变量优先于:

.ENV 
host> grep PHP_SERVER .env

#PHP_SERVER=php-fpm-5.2
#PHP_SERVER=php-fpm-5.3
#PHP_SERVER=php-fpm-5.4
#PHP_SERVER=php-fpm-5.5
#PHP_SERVER=php-fpm-5.6
#PHP_SERVER=php-fpm-7.0
PHP_SERVER=php-fpm-7.1
#PHP_SERVER=php-fpm-7.2
#PHP_SERVER=php-fpm-7.3

 

HTTPD_SERVER

此变量选择要启动的所需Web服务器版本。

名称 允许的值 默认值
HTTPD_SERVER apache-2.2 apache-2.4 nginx-stable nginx-mainline nginx-stable

所有值都已在.env文件中可用,只需要进行注释或取消注释。如果取消注释多个值,则最后一个未注释的变量优先于:

.ENV 
host> grep HTTPD_SERVER .env

#HTTPD_SERVER=apache-2.2
#HTTPD_SERVER=apache-2.4
HTTPD_SERVER=nginx-stable
#HTTPD_SERVER=nginx-mainline

 

MYSQL_SERVER

此变量选择要启动的所需MySQL服务器版本。

名称 允许的值 默认值
MYSQL_SERVER mysql-5.5 mysql-5.6 mariadb-10.2 percona-5.7 还有很多 mariadb-10.1

所有值都已在.env文件中可用,只需要进行注释或取消注释。如果取消注释多个值,则最后一个未注释的变量优先于:

.ENV 
host> grep MYSQL_SERVER .env

#MYSQL_SERVER=mysql-5.5
#MYSQL_SERVER=mysql-5.6
#MYSQL_SERVER=mysql-5.7
#MYSQL_SERVER=mysql-8.0
#MYSQL_SERVER=mariadb-5.5
#MYSQL_SERVER=mariadb-10.0
MYSQL_SERVER=mariadb-10.1
#MYSQL_SERVER=mariadb-10.2
#MYSQL_SERVER=mariadb-10.3
#MYSQL_SERVER=percona-5.5
#MYSQL_SERVER=percona-5.6
#MYSQL_SERVER=percona-5.7

 

PGSQL_SERVER

此变量选择要启动的所需PostgreSQL服务器版本。

名称 允许的值 默认值
PGSQL_SERVER 9.1 9.2 9.3 9.4 还有很多 9.6

所有值都已在.env文件中可用,只需要进行注释或取消注释。如果取消注释多个值,则最后一个未注释的变量优先于:

.ENV 
host> grep PGSQL_SERVER .env

#PGSQL_SERVER=9.1
#PGSQL_SERVER=9.2
#PGSQL_SERVER=9.3
#PGSQL_SERVER=9.4
#PGSQL_SERVER=9.5
PGSQL_SERVER=9.6
#PGSQL_SERVER=10.0

注意

这是可能已经有其他标签可用的官方PostgreSQL服务器,请查看他们的官方网站以获取更多版本。 PostgreSQL的

 

REDIS_SERVER

此变量选择要启动的所需Redis服务器版本。

名称 允许的值 默认值
REDIS_SERVER 2.8 3.0 3.2 4.0 还有很多 4.0

所有值都已在.env文件中可用,只需要进行注释或取消注释。如果取消注释多个值,则最后一个未注释的变量优先于:

.ENV 
host> grep REDIS_SERVER .env

#REDIS_SERVER=2.8
#REDIS_SERVER=3.0
#REDIS_SERVER=3.2
REDIS_SERVER=4.0

注意

这是可能已经有其他标签可用的官方Redis服务器,请查看其官方网站以获取更多版本。 Redis的

 

MEMCD_SERVER

此变量选择要启动的所需Memcached服务器版本。

名称 允许的值 默认值
MEMCD_SERVER 1.4.21 1.4.22 1.4.23 1.4.24 还有很多 1.5.2

所有值都已在.env文件中可用,只需要进行注释或取消注释。如果取消注释多个值,则最后一个未注释的变量优先于:

.ENV 
host> grep MEMCD_SERVER .env

#MEMCD_SERVER=1.4.21
#MEMCD_SERVER=1.4.22
#MEMCD_SERVER=1.4.23
#MEMCD_SERVER=1.4.24
#MEMCD_SERVER=1.4.25
#MEMCD_SERVER=1.4.26
#MEMCD_SERVER=1.4.27
#MEMCD_SERVER=1.4.28
#MEMCD_SERVER=1.4.29
#MEMCD_SERVER=1.4.30
#MEMCD_SERVER=1.4.31
#MEMCD_SERVER=1.4.32
#MEMCD_SERVER=1.4.33
#MEMCD_SERVER=1.4.34
#MEMCD_SERVER=1.4.35
#MEMCD_SERVER=1.4.36
#MEMCD_SERVER=1.4.37
#MEMCD_SERVER=1.4.38
#MEMCD_SERVER=1.4.39
#MEMCD_SERVER=1.5.0
#MEMCD_SERVER=1.5.1
MEMCD_SERVER=1.5.2
#MEMCD_SERVER=latest

注意

这是可能已有其他标签的官方Memcached服务器,请查看其官方网站以获取更多版本。Memcached的

 

MONGO_SERVER

此变量选择要启动的所需MongoDB服务器版本。

名称 允许的值 默认值
MONGO_SERVER 2.8 3.0 3.2 3.4 还有很多 3.4

所有值都已在.env文件中可用,只需要进行注释或取消注释。如果取消注释多个值,则最后一个未注释的变量优先于:

.ENV 
host> grep MONGO_SERVER .env

#MONGO_SERVER=2.8
#MONGO_SERVER=3.0
#MONGO_SERVER=3.2
MONGO_SERVER=3.4
#MONGO_SERVER=3.5

注意

这是官方MongoDB服务器,可能已经有其他标签可用,请查看其官方网站以获取更多版本。MongoDB的

 

Docker主机安装

Docker主机安装是主机操作系统上的目录路径,将安装到正在运行的Docker容器中。这使数据在重新启动时保持不变,并让它们在双方都可用:您的主机操作系统以及容器内部。

这也使您可以选择在主机操作系统上编辑数据,例如使用您喜欢的IDE /编辑器以及容器内部,使用捆绑的工具,例如下载库composer等。

能够双方都这样做,无需在主机上安装任何开发工具(IDE或编辑器除外),并将所有内容完全封装到容器本身。

 

 

MOUNT_OPTIONS

此变量允许您向所有已安装的目录添加自定义安装选项/标志。最初只能rwro应用于挂载点,但您可以在启动Devilbox之前扩展它。

名称 允许的值 默认值
MOUNT_OPTIONS 有效的挂载选项

如果您在启用了SELinux的Linux上,则需要将此值设置,z为修改SELinux标签,以便在多个容器之间共享安装。

也可以看看

  • Docker:配置绑定传播 
  • Docker:配置selinux标签 
  • Stackoverflow:什么是z标志 

重要

添加自定义安装选项时,请确保以前导开头,,因为这些选项预先添加到现有选项中。

MOUNT_OPTIONS=,z
MOUNT_OPTIONS=,cached

 

HOST_PATH_HTTPD_DATADIR

这是数据目录的绝对或相对路径(相对于Devilbox git目录)。

也可以看看

数据目录

默认情况下,您的所有网站/项目都将存储在该目录中。但是,如果要将数据与Devilbox git目录分开,请将路径更改为要在主机上存储所有项目的位置。

  • 相对路径:相对于devilbox git目录(必须以.)开头
  • 绝对路径:完整路径(必须以/)开头
名称 允许的值 默认值
HOST_PATH_HTTPD_DATADIR 有效路径 ./data/www
/home/myuser/workspace/web/例如,如果要将所有项目移动到,只需将其设置为:

.ENV 
HOST_PATH_HTTPD_DATADIR=/home/myuser/workspace/web

映射

无论您分配什么路径,在PHP和Web服务器容器内,您的数据目录始终是/shared/httpd/

警告

不要在项目目录中创建任何超出数据目录的符号链接。此目录之外的任何内容都未安装到容器中。

警告

删除已停止的容器
每当您更改此值时,您必须停止Devilbox并通过删除已停止的容器 。docker-compose rm

 

HOST_PATH_MYSQL_DATADIR

这是MySQL数据目录的绝对或相对路径(相对于Devilbox git目录)。

  • 相对路径:相对于devilbox git目录(必须以.)开头
  • 绝对路径:完整路径(必须以/)开头
名称 允许的值 默认值
HOST_PATH_MYSQL_DATADIR 有效路径 ./data/mysql

每个MySQL,MariaDB或PerconaDB版本都有自己的子目录,因此当第一次运行MySQL 5.5然后启动MySQL 5.6时,您将拥有一个具有不同数据的不同数据库。

将每个版本彼此分开可确保您不会意外地从较低版本升级到较高版本,这可能是不可逆的。(MySQL会将某些较旧的数据文件自动升级到更新版本,但此过程不一定会以相反的方式工作,并可能导致失败)。

目录结构如下所示:

host> ls -l ./data/mysql/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 mariadb-10.0/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 mariadb-10.1/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 mariadb-10.2/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 mariadb-10.3/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 mysql-5.5/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 mysql-5.6/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 mysql-5.7/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 mysql-8.0/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 percona-5.5/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 percona-5.6/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 percona-5.7/

警告

删除已停止的容器
每当您更改此值时,您必须停止Devilbox并通过删除已停止的容器 。docker-compose rm

 

HOST_PATH_PGSQL_DATADIR

这是PostgreSQL数据目录的绝对或相对路径(相对于Devilbox git目录)。

  • 相对路径:相对于devilbox git目录(必须以.)开头
  • 绝对路径:完整路径(必须以/)开头
名称 允许的值 默认值
HOST_PATH_PGSQL_DATADIR 有效路径 ./data/pgsql

每个PostgreSQL版本都有自己的子目录,因此当第一次运行PostgreSQL 9.1然后启动PostgreSQL 10.0时,您将拥有一个具有不同数据的不同数据库。

将每个版本彼此分开可确保您不会意外地从较低版本升级到较高版本,这可能是不可逆的。

目录结构如下所示:

host> ls -l ./data/pgsql/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 9.1/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 9.2/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 9.3/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 9.4/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 9.5/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 9.6/

警告

删除已停止的容器
每当您更改此值时,您必须停止Devilbox并通过删除已停止的容器 。docker-compose rm

 

HOST_PATH_MONGO_DATADIR

这是MongoDB数据目录的绝对或相对路径(相对于Devilbox git目录)。

  • 相对路径:相对于devilbox git目录(必须以.)开头
  • 绝对路径:完整路径(必须以/)开头
名称 允许的值 默认值
HOST_PATH_MONGO_DATADIR 有效路径 ./data/mongo

每个MongoDB版本都有自己的子目录,因此当第一次运行MongoDB 2.8然后启动MongoDB 3.5时,您将拥有一个具有不同数据的不同数据库。

将每个版本彼此分开可确保您不会意外地从较低版本升级到较高版本,这可能是不可逆的。

目录结构如下所示:

host> ls -l ./data/mongo/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 2.8/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 3.0/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 3.2/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 3.4/
drwxrwxr-x 6 48 48 4096 Jun 21 08:47 3.5/

警告

删除已停止的容器
每当您更改此值时,您必须停止Devilbox并通过删除已停止的容器 。docker-compose rm

Docker主机端口

下面所有描述的主机端口都是Docker容器在主机操作系统上公开的端口。默认情况下,每个端口都将公开给主机操作系统的所有接口或IP地址。这可以通过LOCAL_LISTEN_ADDR控制。 如何在Linux和MacOS上列出已使用的端口

打开终端并键入以下内容:

host> netstat -an | grep 'LISTEN\s'
tcp        0      0 127.0.0.1:53585    0.0.0.0:*     LISTEN
tcp        0      0 127.0.0.1:37715    0.0.0.0:*     LISTEN
tcp        0      0 127.0.0.1:58555    0.0.0.0:*     LISTEN
tcp        0      0 127.0.0.1:48573    0.0.0.0:*     LISTEN
tcp        0      0 127.0.0.1:34591    0.0.0.0:*     LISTEN
tcp        0      0 127.0.0.1:8000     0.0.0.0:*     LISTEN

如何在Windows上列出已使用的端口

打开命令提示符并键入以下内容:

C:\WINDOWS\system32> netstat -an
Proto  Local Address       Foreign Address      State
TCP    0.0.0.0:80          0.0.0.0:0            LISTENING
TCP    0.0.0.0:145         0.0.0.0:0            LISTENING
TCP    0.0.0.0:445         0.0.0.0:0            LISTENING
TCP    0.0.0.0:1875        0.0.0.0:0            LISTENING

警告

Docker Toolbox和Devilbox
使用Docker Toobox时,请确保将端口暴露给所有接口。请参见LOCAL_LISTEN_ADDR

警告

在设置端口之前,请确保其他服务尚未在主机操作系统上使用它们。

 

HOST_PORT_HTTPD

为Web服务器公开的端口(Apache或Nginx)。这通常是80.如果主机操作系统上已经使用了80,则将其设置为其他内容。

名称 允许的值 默认值
HOST_PORT_HTTPD 1 – 65535 80

 

HOST_PORT_HTTPD_SSL

为Web服务器(Apache或Nginx)公开HTTPS(SSL)请求的端口。这通常是443.如果您的主机操作系统上已经使用了443,请将其设置为其他内容。

名称 允许的值 默认值
HOST_PORT_HTTPD_SSL 1 – 65535 443

HOST_PORT_MYSQL

为MySQL服务器公开的端口(MySQL,MariaDB或PerconaDB)。这通常是3306.如果您的主机操作系统上已经使用了3306,请将其设置为其他内容。

名称 允许的值 默认值
HOST_PORT_MYSQL 1 – 65535 3306

HOST_PORT_PGSQL

为PostgreSQL服务器公开的端口。这通常是5432.如果您的主机操作系统上已经使用了5432,请将其设置为其他内容。

名称 允许的值 默认值
HOST_PORT_PGSQL 1 – 65535 5432

HOST_PORT_REDIS

要为Redis服务器公开的端口。这通常是6379.如果您的主机操作系统上已经使用了6379,请将其设置为其他内容。

名称 允许的值 默认值
HOST_PORT_REDIS 1 – 65535 5432

HOST_PORT_MEMCD

要为Memcached服务器公开的端口。这通常是11211.如果您的主机操作系统上已经使用了11211,请将其设置为其他内容。

名称 允许的值 默认值
HOST_PORT_MEMCD 1 – 65535 11211

HOST_PORT_MONGO

要为MongoDB服务器公开的端口。这通常是27017.如果主机操作系统上已经使用27017,请将其设置为其他内容。

名称 允许的值 默认值
HOST_PORT_MONGO 1 – 65535 27017

 

HOST_PORT_BIND

为BIND DNS服务器公开的端口。这通常是53。如果53已在主机操作系统上使用,请将其设置为其他内容。

名称 允许的值 默认值
HOST_PORT_BIND 1 – 65535 1053

警告

您可能已经注意到,默认情况下BIND未设置为其默认端口53,而是设置为1053。这是因为某些操作系统已在端口53上运行本地DNS解析程序,这将导致此BIND服务器启动时出现故障。

53当您想要使用Auto-DNSDevilbox的feautre 时,您只需要将BIND设置为端口。执行此操作时,请仔细阅读本文:设置自动DNS

容器设置

PHP

 

PHP_MODULES_ENABLE

在逗号分隔列表中启用任何非标准PHP模块。

名称 允许的值 默认值
PHP_MODULES_ENABLE 逗号分隔的模块名称列表

注意

目前只能ioncube启用。

例:

.ENV 
# Enable ionCube
PHP_MODULES_ENABLE=ioncube

 

PHP_MODULES_DISABLE

禁用逗号分隔列表中的任何PHP模块。

名称 允许的值 默认值
PHP_MODULES_DISABLE 逗号分隔的模块名称列表 rdkafka,swoole

例:

.ENV 
# Disable Xdebug, Imagick and Swoole
PHP_MODULES_DISABLE=xdebug,imagick,swoole

自定义变量

PHP容器本身不提供任何变量,但是您可以将任何键值对变量添加到.env文件中,该变量将自动可用于已启动的PHP容器,因此可用于任何PHP项目。

如果您的应用程序需要一个变量来确定它是在开发或生产下运行,例如:APPLICATION_ENV,您只需将其添加到.env文件中:

.ENV 
host> grep APPLICATION_ENV .env

APPLICATION_ENV=development

在您的php应用程序/文件中,您可以通过以下getenv函数访问此变量:

index.php文件
<?php
// Example use of getenv()
echo getenv('APPLICATION_ENV');
?>

然后输出development

注意

根据需要添加任意数量的自定义环境变量。

也可以看看

添加自定义环境变量

Web服务器

 

HTTPD_DOCROOT_DIR

此变量指定Web服务器将为其提供文件的每个项目目录中的目录名称。

HOST_PATH_HTTPD_DATADIR和项目目录一起,HTTPD_DOCROOT_DIR 将构建虚拟主机文档根目录的最终位置。

名称 允许的值 默认值
HTTPD_DOCROOT_DIR 有效的目录名称 htdocs

例1

  • devilbox git目录位置: /home/user-1/repo/devilbox
  • HOST_PATH_HTTPD_DATADIR 🙁 ./data/www相对)
  • 项目目录: my-first-project
  • HTTPD_DOCROOT_DIR: htdocs

然后,Web服务器将为其提供文件的位置为my-first-project/home/user-1/repo/devilbox/data/www/my-first-project/htdocs

例2

  • devilbox git目录位置: /home/user-1/repo/devilbox
  • HOST_PATH_HTTPD_DATADIR 🙁 /home/user-1/www绝对)
  • 项目目录: my-first-project
  • HTTPD_DOCROOT_DIR: htdocs

然后,Web服务器将为其提供文件的位置为my-first-project/home/user-1/www/my-first-project/htdocs 目录结构:默认

我们来看看目录是如何构建的:

# Project directory
host> ls -l data/www/my-first-project/
total 4
drwxr-xr-x 2 cytopia cytopia 4096 Mar 12 23:05 htdocs/

# htdocs directory inside your project directory
host> ls -l data/www/my-first-project/htdocs
total 4
-rw-r--r-- 1 cytopia cytopia 87 Mar 12 23:05 index.php

通过调用您的proect网址,index.php将提供该文件。

目录结构:嵌套符号链接

大多数情况下,您将克隆或以其他方式下载PHP框架,在大多数情况下,嵌套的某个地方都有自己的www目录。如何将其链接到htdocs目录?

我们来看看目录是如何构建的:

# Project directory
host> ls -l data/www/my-first-project/
total 4
drwxr-xr-x 2 cytopia cytopia 4096 Mar 12 23:05 cakephp/
lrwxrwxrwx 1 cytopia cytopia   15 Mar 17 09:36 htdocs -> cakephp/webroot/

# htdocs directory inside your project directory
host> ls -l data/www/my-first-project/htdocs
total 4
-rw-r--r-- 1 cytopia cytopia 87 Mar 12 23:05 index.php

正如您所看到的,Web服务器仍然能够从该htdocs位置为文件提供服务,但这次,htdocs它本身是一个符号链接,指向实际框架目录中更深,更嵌套的位置。

 

HTTPD_TEMPLATE_DIR

此变量指定目录名称(位于项目目录中,位于HTTPD_DOCROOT_DIR目录旁边),您可以在其中保存自定义Web服务器配置文件。

每个虚拟主机(代表一个项目)都可以完全根据自己的需求进行定制,而与其他虚拟主机无关。

默认情况下,此目录不存在,您需要创建它。此外,您还必须使用三个基于yaml的模板文件之一填充它。

名称 允许的值 默认值
HTTPD_TEMPLATE_DIR 有效的目录名称 .devilbox

让我们来看一个名为的虚构项目目录my-first-project

# Project directory
host> ls -l data/www/my-first-project/
total 4
drwxr-xr-x 2 cytopia cytopia 4096 Mar 12 23:05 htdocs/

在您的项目目录中,您将需要创建另一个.devilbox默认调用的目录 。如果将HTTPD_TEMPLATE_DIR变量更改为其他变量,则必须按照为该变量选择的任何名称创建目录。

# Project directory
host> cd data/www/my-first-project/
host> mkdir .devilbox
host> ls -l
total 4
drwxr-xr-x 2 cytopia cytopia 4096 Mar 12 23:05 .devilbox/
drwxr-xr-x 2 cytopia cytopia 4096 Mar 12 23:05 htdocs/

现在您需要将vhost-gen模板复制到.devilbox目录中。这些模板位于Devilbox git目录下cfg/vhost-gen/

通过将这些文件复制到项目模板目录中,不会发生任何变化,这些是创建虚拟主机的默认模板,就像它们不存在一样。

# Navigate into the devilbox directory
host> cd path/to/devilbox

# Copy templates to your project directory
host> cp cfg/vhost-gen/*.yml data/www/my-first-project/.devilbox/

我们来看看目录是如何构建的:

# Project directory
host> ls -l data/www/my-first-project/
total 4
drwxr-xr-x 2 cytopia cytopia 4096 Mar 12 23:05 .devilbox/
drwxr-xr-x 2 cytopia cytopia 4096 Mar 12 23:05 htdocs/

# template directory inside your project directory
host> ls -l data/www/my-first-project/htdocs/.devilbox
total 4
-rw-r--r-- 1 cytopia cytopia 87 Mar 12 23:05 apache22.yml
-rw-r--r-- 1 cytopia cytopia 87 Mar 12 23:05 apache24.yml
-rw-r--r-- 1 cytopia cytopia 87 Mar 12 23:05 nginx.yml

这三个文件apache22.ymlapache24.ymlnginx.yml让您添加重写规则,改写目录索引,甚至改变服务器名称或添加到其他资产位置的自定义您的Web服务器的虚拟主机的任何东西。

也可以看看

整个过程基于一个名为 vhost-gen 的项目。适用于Apache 2.2,Apache 2.4和任何Nginx版本的虚拟主机生成器。

也可以看看

自定义您的虚拟主机
如果您想了解更多如何根据自己的需要实际自定义每个虚拟主机,请阅读以下内容:
  • vhost-gen:虚拟主机模板
  • vhost-gen:全局自定义所有虚拟主机
  • vhost-gen:自定义特定的虚拟主机
  • vhost-gen:示例:添加子域

 

HTTPD_TIMEOUT_TO_PHP_FPM

此变量指定Web服务器应退出与PHP-FPM的未应答连接的秒数。

确保此值高于PHP max_execution_time,否则PHP脚本仍然可以运行,Web服务器将在获得PHP答案之前删除连接。

如果HTTPD_TIMEOUT_TO_PHP_FPM小于,max_execution_time并且脚本运行时间超过max_execution_time,则会在浏览器中显示:504 Gateway timeout

如果HTTPD_TIMEOUT_TO_PHP_FPM大于max_execution_time且脚本运行时间超过max_execution_time,则会在浏览器中收到正确的PHP错误消息。

名称 允许的值 默认值
HTTPD_TIMEOUT_TO_PHP_FPM 正整数 180

MySQL的

 

MYSQL_ROOT_PASSWORD

如果您是第一次启动MySQL容器,它将使用此指定的密码设置MySQL本身。如果您确实将root密码更改为其他密码,请确保也相应地设置它.env,否则devilbox将无法连接到MySQL并且无法在捆绑的Intranet内显示信息。

名称 允许的值 默认值
MYSQL_ROOT_PASSWORD 任何字符串 空(没有密码)

警告

保持此变量与实际的MySQL root密码同步。

MYSQL_GENERAL_LOG

此变量控制MySQL服务器(MySQL,MariaDB和PerconaDB)的日志记录行为。由于Devilbox旨在用于开发,因此默认情况下会启用此功能。

名称 允许的值 默认值
MYSQL_GENERAL_LOG 0 要么 1 0
MySQL文档:

“一般查询日志是mysqld正在做什么的一般记录。当客户端连接或断开连接时,服务器会将信息写入此日志,并记录从客户端收到的每个SQL语句。当您怀疑客户端中存在错误并想要确切知道客户端发送给mysqld的内容时,通用查询日志非常有用。“

– MySQL查询日志文档

PostgreSQL的

PGSQL_ROOT_USER

如果您是第一次启动PostgreSQL容器,它将使用指定的用户名和密码设置PostgreSQL本身。如果您确实将root用户名或密码更改为其他内容,请确保在.“`v中相应地设置它,“否则devilbox将无法连接到PostgreSQL并且无法在捆绑内部显示信息内联网。

名称 允许的值 默认值
PGSQL_ROOT_USER 按字母顺序排列 postgres

警告

保持此变量与实际的PostgreSQL用户名同步。

PGSQL_ROOT_PASSWORD

如果您是第一次启动PostgreSQL容器,它将使用指定的用户名和密码设置PostgreSQL本身。如果您确实将root用户名或密码更改为其他内容,请确保在.“`v中相应地设置它,“否则devilbox将无法连接到PostgreSQL并且无法在捆绑内部显示信息内联网。

名称 允许的值 默认值
PGSQL_ROOT_PASSWORD 任何字符串 空(没有密码)

警告

保持此变量与实际的PostgreSQL密码同步。

 

Redis的

REDIS_ARGS

此选项允许您向Redis添加额外的启动参数。这可能包括为Redis添加密码保护或增加其详细程度。

名称 允许的值 默认值
REDIS_ARGS 有效的redis-server启动参数
示例:添加密码保护
REDIS_ARGS=--requirepass my-redis-root-password

重要

不要引用密码,也不要在密码中使用空格。

 

示例:增加详细程度
REDIS_ARGS=--loglevel verbose
示例:组合选项
REDIS_ARGS=--loglevel verbose --requirepass my-redis-root-password

绑定

BIND_DNS_RESOLVER

此变量包含以逗号分隔的DNS服务器IP地址列表。默认使用Google的DNS服务器,因为它们非常快。

名称 允许的值 默认值
BIND_DNS_RESOLVER 逗号分隔的IP地址列表 8.8.8.8,8.8.4.4

恶魔盒在内部使用自己的DNS服务器(您的主机也可以将其用于自动DNS),以便解析由其定义的自定义项目域TLD_SUFFIX。为了能够从Container内到达互联网,必须有某种上游DNS服务器来请求查询。

一些例子:

BIND_DNS_RESOLVER='8.8.8.8'
BIND_DNS_RESOLVER='8.8.8.8,192.168.0.10'

注意

如果您不信任Google DNS服务器,请将其设置为其他内容。如果LAN中已有DNS服务器,并且还希望自定义DNS(如果有)在容器内可用,请将值设置为其IP地址。

 

BIND_DNSSEC_VALIDATE

此变量控制DNS服务器的DNSSEC验证。默认情况下,它已关闭。

名称 允许的值 默认值
BIND_DNSSEC_VALIDATE noautoyes no
  • yes – 已启用DNSSEC验证,但必须手动配置信任锚。实际上不会进行验证。
  • no – 禁用DNSSEC验证,递归服务器将以“老式”方式执行不安全的DNS查找,直到您手动配置至少一个可信密钥。
  • auto – 启用DNSSEC验证,并使用DNS根区域的默认信任锚(作为BIND的一部分)。

BIND_LOG_DNS

此变量控制是否应在Docker日志输出中显示DNS查询。默认情况下,不显示DNS查询。

名称 允许的值 默认值
BIND_LOG_DNS 1 要么 0 0

如果启用,则显示所有DNS查询。这对调试很有用。

BIND_TTL_TIME

此变量以秒为单位控制DNS TTL。如果为空或被删除,它将回退到理智的默认值。

名称 允许的值 默认值
BIND_TTL_TIME 整数

也可以看看

  • BIND TTL 
  • BIND SOA 

BIND_REFRESH_TIME

此变量以秒为单位控制DNS刷新时间。如果为空或被删除,它将回退到理智的默认值。

名称 允许的值 默认值
BIND_REFRESH_TIME 整数

也可以看看

BIND SOA 

BIND_RETRY_TIME

此变量以秒为单位控制DNS重试时间。如果为空或被删除,它将回退到理智的默认值。

名称 允许的值 默认值
BIND_RETRY_TIME 整数

也可以看看

BIND SOA 

BIND_EXPIRY_TIME

此变量以秒为单位控制DNS到期时间。如果为空或被删除,它将回退到理智的默认值。

名称 允许的值 默认值
BIND_EXPIRY_TIME 整数

也可以看看

BIND SOA 

BIND_MAX_CACHE_TIME

此变量以秒为单位控制DNS最大高速缓存时间。如果为空或被删除,它将回退到理智的默认值。

名称 允许的值 默认值
BIND_MAX_CACHE_TIME 整数

留下一个评论吧

电子邮件地址不会被公开。 必填项已用*标注