.. include:: /_includes/all.rst .. _env_file: ********* .env file ********* All docker-compose configuration is done inside the ``.env`` file which simply defines key-value pairs evaluated by docker-compose.yml. If this file does not exist at the root of your Devilbox git directory, then copy ``env-example`` to ``.env`` to initially create it with sane defaults. .. seealso:: what is the |ext_lnk_docker_compose_env| file? .. note:: Use your browsers search function to quickly find the desired variable name. .. important:: Any change of ``.env`` requires a restart of the Devilbox. **Table of Contents** .. contents:: :local: Core settings ============= DEBUG_COMPOSE_ENTRYPOINT ------------------------ This variable controls the docker-compose log verbosity during service startup. When set to ``1`` verbose output as well as executed commands are shown. When set to ``0`` only warnings and errors are shown. +------------------------------+----------------+---------------+ | Name | Allowed values | Default value | +==============================+================+===============+ | ``DEBUG_COMPOSE_ENTRYPOINT`` | ``0`` or ``1`` | ``1`` | +------------------------------+----------------+---------------+ .. _env_docker_logs: DOCKER_LOGS ----------- This variable controls the output of logs. Logs can either go to file and will be available under ``./log/`` inside the Devilbox git directory or they can be forwarded to Docker logs and will then be send to stdout and stderr. +-------------------+----------------+---------------+ | Name | Allowed values | Default value | +===================+================+===============+ | ``DOCKER_LOGS`` | ``1`` or ``0`` | ``0`` | +-------------------+----------------+---------------+ When ``DOCKER_LOGS`` is set to ``1``, output will go to Docker logs, otherwise if it is set to ``0`` the log output will go to files under ``./log/``. The ``./log/`` directory itself will contain subdirectories in the form ``-`` which will then hold all available log files. .. note:: Log directories do not exist until you start the Devilbox and will only be created for the service versions you have enabled in ``.env``. The log directory structure would look something like this: .. code-block:: bash host> cd path/to/devilbox host> tree log log/ ├── nginx-stable/ │   ├── nginx-stable/ │   ├── defaultlocalhost-access.log │   ├── defaultlocalhost-error.log │   ├── -access.log # Each project has its own access log │   ├── -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 When you want to read logs sent to Docker logs, you can do so via the following command: .. code-block:: bash :emphasize-lines: 2 host> cd path/to/devilbox host> docker-compose logs When you want to continuously watch the log output (such as ``tail -f``), you need to append ``-f`` to the command. .. code-block:: bash :emphasize-lines: 2 host> cd path/to/devilbox host> docker-compose logs -f When you only want to have logs displayed for a single service, you can also append the service name (works with or without ``-f`` as well): .. code-block:: bash :emphasize-lines: 2 host> cd path/to/devilbox host> docker-compose logs php -f .. important:: Currently this is only implemented for PHP-FPM and HTTPD Docker container. MySQL will always output its logs to file and all other official Docker container always output to Docker logs. DEVILBOX_PATH ------------- This specifies a relative or absolute path to the Devilbox git directory and will be used as a prefix for all Docker mount paths. * Relative path: relative to the devilbox git directory (Must start with ``.``) * Absolute path: Full path (Must start with ``/``) The only reason you would ever want change this variable is when you are on MacOS and relocate your project files onto an NFS volume due to performance issues. .. warning:: :ref:`remove_stopped_container` Whenever you change this value you have to stop the Devilbox and also remove the stopped container via ``docker-compose rm``. +-------------------+----------------+---------------+ | Name | Allowed values | Default value | +===================+================+===============+ | ``DEVILBOX_PATH`` | valid path | ``.`` | +-------------------+----------------+---------------+ .. _env_local_listen_addr: LOCAL_LISTEN_ADDR ----------------- This variable specifies you host computers listening IP address for exposed container ports. If you leave this variable empty, all exposed ports will be bound to all network interfaces on your host operating system, which is also the default behaviour. If you only want the exposed container ports to be bound to a specific IP address (such as ``127.0.0.1``), you can add this IP address here, but note, in this case you must add a trailing colon (``:``). +-----------------------+----------------+---------------+ | Name | Allowed values | Default value | +=======================+================+===============+ | ``LOCAL_LISTEN_ADDR`` | IP address | empty | +-----------------------+----------------+---------------+ **Examples:** +------------------+-------------------------------------------------------------------------------+ | Value | Meaning | +==================+===============================================================================+ | ``127.0.0.1:`` | only expose ports on your host os on ``127.0.0.1``. Note the trailing ``:`` | +------------------+-------------------------------------------------------------------------------+ | ``192.168.0.1:`` | only expose ports on your host os on ``192.168.0.1``. Note the trailing ``:`` | +------------------+-------------------------------------------------------------------------------+ | ``0.0.0.0:`` | listen on all host computer interfaces / IP addresses | +------------------+-------------------------------------------------------------------------------+ | | listen on all host computer interfaces / IP addresses | +------------------+-------------------------------------------------------------------------------+ .. note:: When using ``Docker Toolbox``, you must leave this variable empty, in order to have the exposed ports available on the external interface of the virtual machine. .. _env_tld_suffix: TLD_SUFFIX ---------- This variable controls all of your projects domain suffix. +----------------+------------------+---------------+ | Name | Allowed values | Default value | +================+==================+===============+ | ``TLD_SUFFIX`` | alpha-num string | ``loc`` | +----------------+------------------+---------------+ Your project domains are built together out of the project directory name and the ``TLD_SUFFIX``. The formula is like this: ``http://.``. You can even use official tld's and have your nameserver point to an internal LAN id, to make this project visible to everyone in your corporate LAN. **How does it look?** +-------------+----------------+---------------------------+ | Project dir | ``TLD_SUFFIX`` | Project URL | +=============+================+===========================+ | my-test | ``loc`` | ``http://my-test.loc`` | +-------------+----------------+---------------------------+ | example | ``loc`` | ``http://example.loc`` | +-------------+----------------+---------------------------+ | www.test | ``loc`` | ``http://www.test.loc`` | +-------------+----------------+---------------------------+ | my-test | ``local`` | ``http://my-test.local`` | +-------------+----------------+---------------------------+ | example | ``local`` | ``http://example.local`` | +-------------+----------------+---------------------------+ | www.test | ``local`` | ``http://www.test.local`` | +-------------+----------------+---------------------------+ .. warning:: Do not use ``dev`` as a domain suffix (I know, it's tempting). It has been registered by |ext_lnk_domain_dev| and they advertise the |ext_lnk_ssl_wiki_hsts| which makes your browser redirect every http request to https. **See also:** |ext_lnk_ssl_blog_chrome_dev_hsts| .. warning:: Do not use ``localhost`` as a domain suffix. There is an RFC draft to make sure all localhost requests, including their sub domains should be redirected to the systems loopback interface. Docker has already released a commit preventing the use of ``localhost`` on MacOS. **See also:** |ext_lnk_domain_rfc_localhost| and |ext_lnk_domain_docker_rel_notes_localhost| .. warning:: **Do not use official domain endings** such as ``.com``, ``.org``, ``.net``, etc. If you do, all name resolutions to any ``.com`` address (e.g.: google.com) will be resolved to the Devilbox's PHP server IP address. The bundled DNS server does a catch-all on the given TLD_SUFFIX and resolves everything below it to the PHP container. .. _env_extra_hosts: EXTRA_HOSTS ----------- This variable allows you to add additional DNS entries from hosts outside the Devilbox network, such as hosts running on your host operating system, the LAN or from the internet. +-----------------+------------------------------+---------------+ | Name | Allowed values | Default value | +=================+==============================+===============+ | ``EXTRA_HOSTS`` | comma separated host mapping | empty | +-----------------+------------------------------+---------------+ Adding hosts can be done in two ways: 1. Add DNS entry for an IP address 2. Add DNS entry for a hostname/CNAME which will be mapped to whatever IP address it will resolve The general structure to add extra hosts looks like this .. code-block:: bash # 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' * The left side represents the name by which the host will be available by * The right side represents the IP address by which the new name will resolve to * If the right side is a CNAME itself, it will be first resolved to an IP address and then the left side will resolve to that IP address. A few examples for adding extra hosts: .. code-block:: bash # 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' .. seealso:: This resembles the feature of |ext_lnk_docker_compose_extra_hosts| to add external links. .. seealso:: :ref:`connect_to_external_hosts` .. _env_new_uid: NEW_UID ------- This setting controls one of the core concepts of the Devilbox. It overcomes the problem of syncronizing file and directory permissions between the Docker container and your host operating system. You should set this value to the user id of your host operating systems user you actually work with. How do you find out your user id? .. code-block:: bash host> id -u 1000 In most cases (on Linux and MacOS), this will be ``1000`` if you are the first and only user on your system, however it could also be a different value. +-----------------------+----------------+---------------+ | Name | Allowed values | Default value | +=======================+================+===============+ | ``NEW_UID`` | valid uid | ``1000`` | +-----------------------+----------------+---------------+ The Devilbox own containers will then pick up this value during startup and change their internal user id to the one specified. Services like PHP-FPM, Apache and Nginx will then do read and write operation of files with this uid, so all files mounted will have permissions as your local user and you do not have to fix permissions afterwards. .. seealso:: :ref:`syncronize_container_permissions` Read up more on the general problem of trying to have syncronized permissions between the host system and a running Docker container. .. _env_new_gid: NEW_GID ------- This is the equivalent to user id for groups and addresses the same concept. See :ref:`env_new_uid`. How do you find out your group id? .. code-block:: bash host> id -g 1000 In most cases (on Linux and MacOS), this will be ``1000`` if you are the first and only user on your system, however it could also be a different value. +-----------------------+----------------+---------------+ | Name | Allowed values | Default value | +=======================+================+===============+ | ``NEW_GID`` | valid gid | ``1000`` | +-----------------------+----------------+---------------+ .. seealso:: :ref:`syncronize_container_permissions` Read up more on the general problem of trying to have syncronized permissions between the host system and a running Docker container. .. _env_timezone: TIMEZONE -------- This variable controls the system as well as service timezone for the Devilbox's own containers. This is especially useful to keep PHP and database timezones in sync. +-----------------------+----------------+-------------------+ | Name | Allowed values | Default value | +=======================+================+===================+ | ``TIMEZONE`` | valid timezone | ``Europe/Berlin`` | +-----------------------+----------------+-------------------+ Have a look at Wikipedia to get a list of valid timezones: |ext_lnk_doc_wiki_database_timezones| .. note:: It is always a good practice not to assume a specific timezone anyway and store all values in UTC (such as time types in MySQL). Intranet settings ================= DNS_CHECK_TIMEOUT ----------------- The Devilbox intranet validates if every project has a corresponding DNS record (either an official DNS record, one that came from its own Auto-DNS or an ``/etc/hosts`` entry). By doing so it queries the DNS record based on ``.``. In case it does not exist, the query itself might take a while and the intranet page will be unresponsive during that time. In order to avoid long waiting times, you can set the DNS query time-out in seconds after which the query should stop and report as unsuccessful. The default is ``1`` second, wich should be fairly sane for all use-cases. +-----------------------+----------------+-------------------+ | Name | Allowed values | Default value | +=======================+================+===================+ | ``DNS_CHECK_TIMEOUT`` | integers | ``1`` | +-----------------------+----------------+-------------------+ .. _env_devilbox_ui_ssl_cn: DEVILBOX_UI_SSL_CN ------------------ When accessing the Devilbox intranet via ``https`` it will use an automatically created SSL certificate. Each SSL certificate requires a valid Common Name, which must match the virtual host name. This setting let's you specify by what **name** you are accessing the Devilbox intranet. The default is ``localhost``, but if you have created your own alias, you must change this value accordingly. Also note that multiple values are possible and must be separated with a comma. When you add an asterisk (``*.``) to the beginning, it means it will create a wildcard certificate for that hostname. +-------------------------+------------------------------+-----------------------------------------------+ | Name | Allowed values | Default value | +=========================+==============================+===============================================+ | ``DEVILBOX_UI_SSL_CN`` | comma separated list of CN's | ``localhost,*.localhost,devilbox,*.devilbox`` | +-------------------------+------------------------------+-----------------------------------------------+ **Examples**: * ``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`` .. seealso:: :ref:`setup_valid_https` .. _env_devilbox_ui_protect: DEVILBOX_UI_PROTECT ------------------- By setting this variable to ``1``, the Devilbox intranet will be password protected. This might be useful, if you share your running Devilbox instance accross a LAN, but do not want everybody to have access to the intranet itself, just to the projects you actually provide. +-------------------------+----------------+-------------------+ | Name | Allowed values | Default value | +=========================+================+===================+ | ``DEVILBOX_UI_PROTECT`` | ``0`` or ``1`` | ``0`` | +-------------------------+----------------+-------------------+ .. note:: Also pay attention to the next env var, which will control the password for the login: ``DEVILBOX_UI_PASSWORD``. .. _env_devilbox_ui_password: DEVILBOX_UI_PASSWORD -------------------- When the devilbox intranet is password-protected via ``DEVILBOX_UI_PROTECT``, this is the actual password by which it will be protected. +--------------------------+----------------+-------------------+ | Name | Allowed values | Default value | +==========================+================+===================+ | ``DEVILBOX_UI_PASSWORD`` | any string | ``password`` | +--------------------------+----------------+-------------------+ .. _env_devilbox_ui_enable: DEVILBOX_UI_ENABLE ------------------- In case you want to completely disable the Devilbox intranet, such as when running it on production, you need to set this variable to ``0``. By disabling the intranet, the webserver will simply remove the default virtual host and redirect all IP-based requests to the first available virtual host, which will be you first project when ordering their names alphabetically. +-------------------------+----------------+-------------------+ | Name | Allowed values | Default value | +=========================+================+===================+ | ``DEVILBOX_UI_ENABLE`` | ``0`` or ``1`` | ``1`` | +-------------------------+----------------+-------------------+ Docker image versions ===================== The following settings reflect one of the main goals of the Devilbox: being able to run any combination of all container versions. .. note:: Any change for those settings requires a restart of the devilbox. .. _env_php_server: PHP_SERVER ---------- This variable choses your desired PHP-FPM version to be started. +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+ | Name | Allowed values | Default value | +=========================+=========================================================================================================================================================================================+=================+ | ``PHP_SERVER`` | ``php-fpm-5.2`` |br| ``php-fpm-5.3`` |br| ``php-fpm-5.4`` |br| ``php-fpm-5.5`` |br| ``php-fpm-5.6`` |br| ``php-fpm-7.0`` |br| ``php-fpm-7.1`` |br| ``php-fpm-7.2`` |br| ``php-fpm-7.3`` | ``php-fpm-7.1`` | +-------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------+ .. important:: **PHP 5.2** is available to use, but it is not officially supported. The Devilbox intranet does not work with this version as PHP 5.2 does not support namespaces. Furthermore PHP 5.2 does only work with Apache 2.4, Nginx stable and Nginx mainline. It does not work with Apache 2.2. **Use at your own risk.** All values are already available in the ``.env`` file and just need to be commented or uncommented. If multiple values are uncommented, the last uncommented variable one takes precedences: .. code-block:: bash :caption: .env :emphasize-lines: 9 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 .. _env_httpd_server: HTTPD_SERVER ------------ This variable choses your desired web server version to be started. +-------------------------+----------------------------------------------------------------------------------+------------------+ | Name | Allowed values | Default value | +=========================+==================================================================================+==================+ | ``HTTPD_SERVER`` | ``apache-2.2`` |br| ``apache-2.4`` |br| ``nginx-stable`` |br| ``nginx-mainline`` | ``nginx-stable`` | +-------------------------+----------------------------------------------------------------------------------+------------------+ All values are already available in the ``.env`` file and just need to be commented or uncommented. If multiple values are uncommented, the last uncommented variable one takes precedences: .. code-block:: bash :caption: .env :emphasize-lines: 5 host> grep HTTPD_SERVER .env #HTTPD_SERVER=apache-2.2 #HTTPD_SERVER=apache-2.4 HTTPD_SERVER=nginx-stable #HTTPD_SERVER=nginx-mainline .. _env_mysql_server: MYSQL_SERVER ------------ This variable choses your desired MySQL server version to be started. +-------------------------+------------------------------------------------------------------------------------------------+------------------+ | Name | Allowed values | Default value | +=========================+================================================================================================+==================+ | ``MYSQL_SERVER`` | ``mysql-5.5`` |br| ``mysql-5.6`` |br| ``mariadb-10.2`` |br| ``percona-5.7`` |br| and many more | ``mariadb-10.1`` | +-------------------------+------------------------------------------------------------------------------------------------+------------------+ All values are already available in the ``.env`` file and just need to be commented or uncommented. If multiple values are uncommented, the last uncommented variable one takes precedences: .. code-block:: bash :caption: .env :emphasize-lines: 9 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 .. _env_pgsql_server: PGSQL_SERVER ------------ This variable choses your desired PostgreSQL server version to be started. +-------------------------+-------------------------------------------------------------------+------------------+ | Name | Allowed values | Default value | +=========================+===================================================================+==================+ | ``PGSQL_SERVER`` | ``9.1`` |br| ``9.2`` |br| ``9.3`` |br| ``9.4`` |br| and many more | ``9.6`` | +-------------------------+-------------------------------------------------------------------+------------------+ All values are already available in the ``.env`` file and just need to be commented or uncommented. If multiple values are uncommented, the last uncommented variable one takes precedences: .. code-block:: bash :caption: .env :emphasize-lines: 8 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 .. note:: This is the official PostgreSQL server which might already have other tags available, check their official website for even more versions. |ext_lnk_docker_image_postgres| .. _env_redis_server: REDIS_SERVER ------------ This variable choses your desired Redis server version to be started. +-------------------------+-------------------------------------------------------------------+------------------+ | Name | Allowed values | Default value | +=========================+===================================================================+==================+ | ``REDIS_SERVER`` | ``2.8`` |br| ``3.0`` |br| ``3.2`` |br| ``4.0`` |br| and many more | ``4.0`` | +-------------------------+-------------------------------------------------------------------+------------------+ All values are already available in the ``.env`` file and just need to be commented or uncommented. If multiple values are uncommented, the last uncommented variable one takes precedences: .. code-block:: bash :caption: .env :emphasize-lines: 6 host> grep REDIS_SERVER .env #REDIS_SERVER=2.8 #REDIS_SERVER=3.0 #REDIS_SERVER=3.2 REDIS_SERVER=4.0 .. note:: This is the official Redis server which might already have other tags available, check their official website for even more versions. |ext_lnk_docker_image_redis| .. _env_memcd_server: MEMCD_SERVER ------------ This variable choses your desired Memcached server version to be started. +-------------------------+-------------------------------------------------------------------------------+------------------+ | Name | Allowed values | Default value | +=========================+===============================================================================+==================+ | ``MEMCD_SERVER`` | ``1.4.21`` |br| ``1.4.22`` |br| ``1.4.23`` |br| ``1.4.24`` |br| and many more | ``1.5.2`` | +-------------------------+-------------------------------------------------------------------------------+------------------+ All values are already available in the ``.env`` file and just need to be commented or uncommented. If multiple values are uncommented, the last uncommented variable one takes precedences: .. code-block:: bash :caption: .env :emphasize-lines: 24 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 .. note:: This is the official Memcached server which might already have other tags available, check their official website for even more versions. |ext_lnk_docker_image_memcached| .. _env_mongo_server: MONGO_SERVER ------------ This variable choses your desired MongoDB server version to be started. +-------------------------+-------------------------------------------------------------------+------------------+ | Name | Allowed values | Default value | +=========================+===================================================================+==================+ | ``MONGO_SERVER`` | ``2.8`` |br| ``3.0`` |br| ``3.2`` |br| ``3.4`` |br| and many more | ``3.4`` | +-------------------------+-------------------------------------------------------------------+------------------+ All values are already available in the ``.env`` file and just need to be commented or uncommented. If multiple values are uncommented, the last uncommented variable one takes precedences: .. code-block:: bash :caption: .env :emphasize-lines: 6 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 .. note:: This is the official MongoDB server which might already have other tags available, check their official website for even more versions. |ext_lnk_docker_image_mongodb| Docker host mounts ================== The Docker host mounts are directory paths on your host operating system that will be mounted into the running Docker container. This makes data persistent accross restarts and let them be available on both sides: Your host operating system as well as inside the container. This also gives you the choice to edit data on your host operating system, such as with your favourite IDE/editor and also inside the container, by using the bundled tools, such as downloading libraries with ``composer`` and others. Being able to do that on both sides, removes the need to install any development tools (except your IDE/editor) on your host and have everything fully encapsulated into the containers itself. .. _env_mount_options: MOUNT_OPTIONS ------------- This variable allows you to add custom mount options/flags to all mounted directories. Initially only ``rw`` or ``ro`` are applied to mount points, you can however extend this before starting up the Devilbox. +------------------------------+--------------------+----------------+ | Name | Allowed values | Default value | +==============================+====================+================+ | ``MOUNT_OPTIONS`` | valid mount option | empty | +------------------------------+--------------------+----------------+ If you are on Linux with SELinux enabled, you will want to set this value to ``,z`` to modify SELinux labels in order to share mounts among multiple container. .. seealso:: * |ext_lnk_docker_bind_propagation| * |ext_lnk_docker_selinux_label| * |ext_lnk_docker_mount_z_flag| .. important:: When adding custom mount options, ensure to start with a leading ``,``, as those options are prepended to already existing options. .. code-block:: bash MOUNT_OPTIONS=,z MOUNT_OPTIONS=,cached .. _env_httpd_datadir: HOST_PATH_HTTPD_DATADIR ----------------------- This is an absolute or relative path (relative to Devilbox git directory) to your data directory. .. seealso:: :ref:`getting_started_directory_overview_datadir` By default, all of your websites/projects will be stored in that directory. If however you want to separate your data from the Devilbox git directory, do change the path to a place where you want to store all of your projects on your host computer. * Relative path: relative to the devilbox git directory (Must start with ``.``) * Absolute path: Full path (Must start with ``/``) +------------------------------+----------------+----------------+ | Name | Allowed values | Default value | +==============================+================+================+ | ``HOST_PATH_HTTPD_DATADIR`` | valid path | ``./data/www`` | +------------------------------+----------------+----------------+ Example ^^^^^^^ If you want to move all your projects to ``/home/myuser/workspace/web/`` for example, just set it like this: .. code-block:: bash :caption: .env HOST_PATH_HTTPD_DATADIR=/home/myuser/workspace/web Mapping ^^^^^^^ No matter what path you assign, inside the PHP and the web server container your data dir will always be ``/shared/httpd/``. .. warning:: Do not create any symlinks inside your project directories that go outside the data dir. Anything which is outside this directory is not mounted into the container. .. warning:: :ref:`remove_stopped_container` Whenever you change this value you have to stop the Devilbox and also remove the stopped container via ``docker-compose rm``. .. _env_mysql_datadir: HOST_PATH_MYSQL_DATADIR ----------------------- This is an absolute or relative path (relative to Devilbox git directory) to your MySQL data directory. * Relative path: relative to the devilbox git directory (Must start with ``.``) * Absolute path: Full path (Must start with ``/``) +------------------------------+----------------+------------------+ | Name | Allowed values | Default value | +==============================+================+==================+ | ``HOST_PATH_MYSQL_DATADIR`` | valid path | ``./data/mysql`` | +------------------------------+----------------+------------------+ Each MySQL, MariaDB or PerconaDB version will have its own subdirectory, so when first running MySQL 5.5 and then starting MySQL 5.6, you will have a different database with different data. Having each version separated from each other makes sure that you don't accidently upgrade from a lower to a higher version which might not be reversable. (MySQL auto-upgrade certain older data files to newer, but this process does not necessarily work the other way round and could result in failues). The directory structure will look something like this: .. code-block:: bash 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/ .. warning:: :ref:`remove_stopped_container` Whenever you change this value you have to stop the Devilbox and also remove the stopped container via ``docker-compose rm``. .. _env_pgsql_datadir: HOST_PATH_PGSQL_DATADIR ----------------------- This is an absolute or relative path (relative to Devilbox git directory) to your PostgreSQL data directory. * Relative path: relative to the devilbox git directory (Must start with ``.``) * Absolute path: Full path (Must start with ``/``) +------------------------------+----------------+------------------+ | Name | Allowed values | Default value | +==============================+================+==================+ | ``HOST_PATH_PGSQL_DATADIR`` | valid path | ``./data/pgsql`` | +------------------------------+----------------+------------------+ Each PostgreSQL version will have its own subdirectory, so when first running PostgreSQL 9.1 and then starting PostgreSQL 10.0, you will have a different database with different data. Having each version separated from each other makes sure that you don't accidently upgrade from a lower to a higher version which might not be reversable. The directory structure will look something like this: .. code-block:: bash 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/ .. warning:: :ref:`remove_stopped_container` Whenever you change this value you have to stop the Devilbox and also remove the stopped container via ``docker-compose rm``. .. _env_mongo_datadir: HOST_PATH_MONGO_DATADIR ----------------------- This is an absolute or relative path (relative to Devilbox git directory) to your MongoDB data directory. * Relative path: relative to the devilbox git directory (Must start with ``.``) * Absolute path: Full path (Must start with ``/``) +------------------------------+----------------+------------------+ | Name | Allowed values | Default value | +==============================+================+==================+ | ``HOST_PATH_MONGO_DATADIR`` | valid path | ``./data/mongo`` | +------------------------------+----------------+------------------+ Each MongoDB version will have its own subdirectory, so when first running MongoDB 2.8 and then starting MongoDB 3.5, you will have a different database with different data. Having each version separated from each other makes sure that you don't accidently upgrade from a lower to a higher version which might not be reversable. The directory structure will look something like this: .. code-block:: bash 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/ .. warning:: :ref:`remove_stopped_container` Whenever you change this value you have to stop the Devilbox and also remove the stopped container via ``docker-compose rm``. Docker host ports ================= All describned host ports below are ports that the Docker container expose on your host operating system. By default each port will be exposed to all interfaces or IP addresses of the host operating system. This can be controlled with :ref:`env_local_listen_addr`. **How to list used ports on Linux and MacOS** Open a terminal and type the following: .. code-block:: bash 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 **How to list used ports on Windows** Open the command prompt and type the following: .. code-block:: bash 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 .. warning:: :ref:`howto_docker_toolbox_and_the_devilbox` When using Docker Toobox ensure that ports are exposed to all interfaces. See :ref:`env_local_listen_addr` .. warning:: Before setting the ports, ensure that they are not already in use on your host operating system by other services. .. _env_host_port_httpd: HOST_PORT_HTTPD --------------- The port to expose for the web server (Apache or Nginx). This is usually 80. Set it to something else if 80 is already in use on your host operating system. +----------------------+-------------------+------------------+ | Name | Allowed values | Default value | +======================+===================+==================+ | ``HOST_PORT_HTTPD`` | ``1`` - ``65535`` | ``80`` | +----------------------+-------------------+------------------+ .. _env_host_port_httpd_ssl: HOST_PORT_HTTPD_SSL ------------------- The port to expose for the web server (Apache or Nginx) for HTTPS (SSL) requests. This is usually 443. Set it to something else if 443 is already in use on your host operating system. +--------------------------+-------------------+------------------+ | Name | Allowed values | Default value | +==========================+===================+==================+ | ``HOST_PORT_HTTPD_SSL`` | ``1`` - ``65535`` | ``443`` | +--------------------------+-------------------+------------------+ HOST_PORT_MYSQL --------------- The port to expose for the MySQL server (MySQL, MariaDB or PerconaDB). This is usually 3306. Set it to something else if 3306 is already in use on your host operating system. +----------------------+-------------------+------------------+ | Name | Allowed values | Default value | +======================+===================+==================+ | ``HOST_PORT_MYSQL`` | ``1`` - ``65535`` | ``3306`` | +----------------------+-------------------+------------------+ HOST_PORT_PGSQL --------------- The port to expose for the PostgreSQL server. This is usually 5432. Set it to something else if 5432 is already in use on your host operating system. +----------------------+-------------------+------------------+ | Name | Allowed values | Default value | +======================+===================+==================+ | ``HOST_PORT_PGSQL`` | ``1`` - ``65535`` | ``5432`` | +----------------------+-------------------+------------------+ HOST_PORT_REDIS --------------- The port to expose for the Redis server. This is usually 6379. Set it to something else if 6379 is already in use on your host operating system. +----------------------+-------------------+------------------+ | Name | Allowed values | Default value | +======================+===================+==================+ | ``HOST_PORT_REDIS`` | ``1`` - ``65535`` | ``5432`` | +----------------------+-------------------+------------------+ HOST_PORT_MEMCD --------------- The port to expose for the Memcached server. This is usually 11211. Set it to something else if 11211 is already in use on your host operating system. +----------------------+-------------------+------------------+ | Name | Allowed values | Default value | +======================+===================+==================+ | ``HOST_PORT_MEMCD`` | ``1`` - ``65535`` | ``11211`` | +----------------------+-------------------+------------------+ HOST_PORT_MONGO --------------- The port to expose for the MongoDB server. This is usually 27017. Set it to something else if 27017 is already in use on your host operating system. +----------------------+-------------------+------------------+ | Name | Allowed values | Default value | +======================+===================+==================+ | ``HOST_PORT_MONGO`` | ``1`` - ``65535`` | ``27017`` | +----------------------+-------------------+------------------+ .. _env_host_port_bind: HOST_PORT_BIND -------------- The port to expose for the BIND DNS server. This is usually ``53``. Set it to something else if ``53`` is already in use on your host operating system. +----------------------+-------------------+------------------+ | Name | Allowed values | Default value | +======================+===================+==================+ | ``HOST_PORT_BIND`` | ``1`` - ``65535`` | ``1053`` | +----------------------+-------------------+------------------+ .. warning:: As you might have noticed, BIND is not set to its default port ``53`` by default, but rather to ``1053``. This is because some operating system already have a local DNS resolver running on port ``53`` which would result in a failure when this BIND server is starting. You only need to set BIND to port ``53`` when you want to use the ``Auto-DNS`` feautre of the Devilbox. When doing so, read this article with care: :ref:`setup_auto_dns`. Container settings ================== PHP --- .. _env_file_php_modules_enable: PHP_MODULES_ENABLE ^^^^^^^^^^^^^^^^^^ Enable any non-standard PHP modules in a comma separated list. +------------------------+--------------------------------------+------------------+ | Name | Allowed values | Default value | +========================+======================================+==================+ | ``PHP_MODULES_ENABLE`` | comma separated list of module names | empty | +------------------------+--------------------------------------+------------------+ .. note:: Currently only ``ioncube`` is available to enable. Example: .. code-block:: bash :caption: .env :emphasize-lines: 2 # Enable ionCube PHP_MODULES_ENABLE=ioncube .. _env_file_php_modules_disable: PHP_MODULES_DISABLE ^^^^^^^^^^^^^^^^^^^ Disable any PHP modules in a comma separated list. +-------------------------+--------------------------------------+------------------+ | Name | Allowed values | Default value | +=========================+======================================+==================+ | ``PHP_MODULES_DISABLE`` | comma separated list of module names | ``swoole`` | +-------------------------+--------------------------------------+------------------+ Example: .. code-block:: bash :caption: .env :emphasize-lines: 2 # Disable Xdebug, Imagick and Swoole PHP_MODULES_DISABLE=xdebug,imagick,swoole Custom variables ^^^^^^^^^^^^^^^^ The PHP container itself does not offer any variables, however you can add any key-value pair variable into the ``.env`` file which will automatically be available to the started PHP container and thus in any of your PHP projects. If your application requires a variable to determine if it is run under development or production, for example: ``APPLICATION_ENV``, you can just add this to the ``.env`` file: .. code-block:: bash :caption: .env :emphasize-lines: 3 host> grep APPLICATION_ENV .env APPLICATION_ENV=development Within your php application/file you can then access this variable via the ``getenv`` function: .. code-block:: php :caption: index.php :emphasize-lines: 3 This will then output ``development``. .. note:: Add as many custom environment variables as you require. .. seealso:: :ref:`add_custom_environment_variables` Web server ---------- .. _env_httpd_docroot_dir: HTTPD_DOCROOT_DIR ^^^^^^^^^^^^^^^^^ This variable specifies the name of a directory within each of your project directories from which the web server will serve the files. Together with the :ref:`env_httpd_datadir` and your project directory, the ``HTTPD_DOCROOT_DIR`` will built up the final location of a virtual hosts document root. +-----------------------+-------------------+------------------+ | Name | Allowed values | Default value | +=======================+===================+==================+ | ``HTTPD_DOCROOT_DIR`` | valid dir name | ``htdocs`` | +-----------------------+-------------------+------------------+ **Example 1** * devilbox git directory location: ``/home/user-1/repo/devilbox`` * HOST_PATH_HTTPD_DATADIR: ``./data/www`` (relative) * Project directory: ``my-first-project`` * HTTPD_DOCROOT_DIR: ``htdocs`` The location from where the web server will serve files for ``my-first-project`` is then: ``/home/user-1/repo/devilbox/data/www/my-first-project/htdocs`` **Example 2** * devilbox git directory location: ``/home/user-1/repo/devilbox`` * HOST_PATH_HTTPD_DATADIR: ``/home/user-1/www`` (absolute) * Project directory: ``my-first-project`` * HTTPD_DOCROOT_DIR: ``htdocs`` The location from where the web server will serve files for ``my-first-project`` is then: ``/home/user-1/www/my-first-project/htdocs`` **Directory structure: default** Let's have a look how the directory is actually built up: .. code-block:: bash :emphasize-lines: 4 # 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 By calling your proect url, the ``index.php`` file will be served. **Directory structure: nested symlink** Most of the time you would clone or otherwise download a PHP framework, which in most cases has its own `www` directory somewhere nested. How can this be linked to the ``htdocs`` directory? Let's have a look how the directory is actually built up: .. code-block:: bash :emphasize-lines: 5 # 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 As you can see, the web server is still able to server the files from the ``htdocs`` location, this time however, ``htdocs`` itself is a symlink pointing to a much deeper and nested location inside an actual framework directory. .. _env_httpd_template_dir: HTTPD_TEMPLATE_DIR ^^^^^^^^^^^^^^^^^^ This variable specifies the directory name (which is just in your project directory, next to the HTTPD_DOCROOT_DIR directory) in which you can hold custom web server configuration files. **Every virtual host (which represents a project) can be fully customized to its own needs, independently of other virtual hosts.** This directory does not exist by default and you need to create it. Additionally you will also have to populate it with one of three yaml-based template files. +------------------------+-------------------+------------------+ | Name | Allowed values | Default value | +========================+===================+==================+ | ``HTTPD_TEMPLATE_DIR`` | valid dir name | ``.devilbox`` | +------------------------+-------------------+------------------+ Let's have a look at an imaginary project directory called ``my-first-project``: .. code-block:: bash # Project directory host> ls -l data/www/my-first-project/ total 4 drwxr-xr-x 2 cytopia cytopia 4096 Mar 12 23:05 htdocs/ Inside this your project directory you will need to create another directory which is called ``.devilbox`` by default. If you change the ``HTTPD_TEMPLATE_DIR`` variable to something else, you will have to create a directory by whatever name you chose for that variable. .. code-block:: bash :emphasize-lines: 3,6 # 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/ Now you need to copy the ``vhost-gen`` templates into the ``.devilbox`` directory. The templates are available in the Devilbox git directory under ``cfg/vhost-gen/``. By copying those files into your project template directory, nothing will change, these are the default templates that will create the virtual host exactly the same way as if they were not present. .. code-block:: bash :emphasize-lines: 5 # 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/ Let's have a look how the directory is actually built up: .. code-block:: bash :emphasize-lines: 4,8 # 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 The three files ``apache22.yml``, ``apache24.yml`` and ``nginx.yml`` let you customize your web servers virtual host to anything from adding rewrite rules, overwriting directory index to even changing the server name or adding locations to other assets. .. seealso:: The whole process is based on a project called |ext_lnk_project_vhost_gen|. A virtual host generator for Apache 2.2, Apache 2.4 and any Nginx version. .. seealso:: **Customize your virtual host** When you want to find out more how to actually customize each virtual host to its own need, read up more on: * vhost-gen: :ref:`vhost_gen_virtual_host_templates` * vhost-gen: :ref:`vhost_gen_customize_all_virtual_hosts_globally` * vhost-gen: :ref:`vhost_gen_customize_specific_virtual_host` * vhost-gen: :ref:`vhost_gen_example_add_sub_domains` .. _env_httpd_timeout_to_php_fpm: HTTPD_TIMEOUT_TO_PHP_FPM ^^^^^^^^^^^^^^^^^^^^^^^^ This variable specifies after how many seconds the webserver should quit an unanswered connection to PHP-FPM. Ensure that this value is higher than PHP's ``max_execution_time``, otherwise the PHP script could still run and the webserver will simply drop the connection before getting an answer by PHP. If ``HTTPD_TIMEOUT_TO_PHP_FPM`` is smaller then ``max_execution_time`` and a script runs longer than ``max_execution_time``, you will get a: ``504 Gateway timeout`` in the browser. If ``HTTPD_TIMEOUT_TO_PHP_FPM`` is greater then ``max_execution_time`` and a script runs longer than ``max_execution_time``, you will get a proper PHP error message in the browser. +------------------------------+-------------------+------------------+ | Name | Allowed values | Default value | +==============================+===================+==================+ | ``HTTPD_TIMEOUT_TO_PHP_FPM`` | positive integer | ``180`` | +------------------------------+-------------------+------------------+ MySQL ----- .. _env_mysql_root_password: MYSQL_ROOT_PASSWORD ^^^^^^^^^^^^^^^^^^^ If you start a MySQL container for the first time, it will setup MySQL itself with this specified password. If you do change the root password to something else, make sure to also set it accordingly in ``.env``, otherwise the devilbox will not be able to connect to MySQL and will not be able to display information inside the bundled intranet. +-------------------------+-------------------+---------------------+ | Name | Allowed values | Default value | +=========================+===================+=====================+ | ``MYSQL_ROOT_PASSWORD`` | any string | empty (no password) | +-------------------------+-------------------+---------------------+ .. warning:: Keep this variable in sync with the actual MySQL root password. MYSQL_GENERAL_LOG ^^^^^^^^^^^^^^^^^ This variable controls the logging behaviour of the MySQL server (MySQL, MariaDB and PerconaDB). As the Devilbox is intended to be used for development, this feature is turned on by default. +-------------------------+-------------------+---------------------+ | Name | Allowed values | Default value | +=========================+===================+=====================+ | ``MYSQL_GENERAL_LOG`` | ``0`` or ``1`` | ``0`` | +-------------------------+-------------------+---------------------+ **MySQL documentation:** "The general query log is a general record of what mysqld is doing. The server writes information to this log when clients connect or disconnect, and it logs each SQL statement received from clients. The general query log can be very useful when you suspect an error in a client and want to know exactly what the client sent to mysqld." -- |ext_lnk_doc_mysql_query_log| PostgreSQL ---------- PGSQL_ROOT_USER ^^^^^^^^^^^^^^^ If you start a PostgreSQL container for the first time, it will setup PostgreSQL itself with a specified username and password. If you do change the root username or password to something else, make sure to also set it accordingly in .``env,`` otherwise the devilbox will not be able to connect to PostgreSQL and will not be able to display information inside the bundled intranet. +-------------------------+---------------------+---------------------+ | Name | Allowed values | Default value | +=========================+=====================+=====================+ | ``PGSQL_ROOT_USER`` | alphabetical string | ``postgres`` | +-------------------------+---------------------+---------------------+ .. warning:: Keep this variable in sync with the actual PostgreSQL username. PGSQL_ROOT_PASSWORD ^^^^^^^^^^^^^^^^^^^ If you start a PostgreSQL container for the first time, it will setup PostgreSQL itself with a specified username and password. If you do change the root username or password to something else, make sure to also set it accordingly in .``env,`` otherwise the devilbox will not be able to connect to PostgreSQL and will not be able to display information inside the bundled intranet. +-------------------------+---------------------+---------------------+ | Name | Allowed values | Default value | +=========================+=====================+=====================+ | ``PGSQL_ROOT_PASSWORD`` | any string | empty (no password) | +-------------------------+---------------------+---------------------+ .. warning:: Keep this variable in sync with the actual PostgreSQL password. .. _env_redis: Redis ----- REDIS_ARGS ^^^^^^^^^^ This option lets you add extra startup parameters to Redis. This could include adding a password protection to Redis or increasing its verbosity. +-------------------------+------------------------------------------+----------------+ | Name | Allowed values | Default value | +=========================+==========================================+================+ | ``REDIS_ARGS`` | valid ``redis-server`` startup parameter | empty | +-------------------------+------------------------------------------+----------------+ Example: Adding password protection """"""""""""""""""""""""""""""""""" .. code-block:: bash REDIS_ARGS=--requirepass my-redis-root-password .. important:: Do not quote the password and do not use spaces inside the password. Example: Increasing verbosity """"""""""""""""""""""""""""" .. code-block:: bash REDIS_ARGS=--loglevel verbose Example: Combining options """""""""""""""""""""""""" .. code-block:: bash REDIS_ARGS=--loglevel verbose --requirepass my-redis-root-password Bind ---- BIND_DNS_RESOLVER ^^^^^^^^^^^^^^^^^ This variable holds a comma separated list of IP addresses of DNS servers. By default using Google's DNS server as they are pretty fast. +-------------------------+--------------------------------------+---------------------+ | Name | Allowed values | Default value | +=========================+======================================+=====================+ | ``BIND_DNS_RESOLVER`` | comma separated list of IP addresses | ``8.8.8.8,8.8.4.4`` | +-------------------------+--------------------------------------+---------------------+ The devilbox is using its own DNS server internally (your host computer can also use it for Auto-DNS) in order to resolve custom project domains defined by ``TLD_SUFFIX``. To also be able to reach the internet from within the Container there must be some kind of upstream DNS server to ask for queries. Some examples: .. code-block:: bash BIND_DNS_RESOLVER='8.8.8.8' BIND_DNS_RESOLVER='8.8.8.8,192.168.0.10' .. note:: If you don't trust the Google DNS server, then set it to something else. If you already have a DNS server inside your LAN and also want your custom DNS (if any) to be available inside the containers, set the value to its IP address. BIND_DNSSEC_VALIDATE ^^^^^^^^^^^^^^^^^^^^ This variable controls the DNSSEC validation of the DNS server. By default it is turned off. +--------------------------+--------------------------------------+---------------------+ | Name | Allowed values | Default value | +==========================+======================================+=====================+ | ``BIND_DNSSEC_VALIDATE`` | ``no``, ``auto``, ``yes`` | ``no`` | +--------------------------+--------------------------------------+---------------------+ * ``yes`` - DNSSEC validation is enabled, but a trust anchor must be manually configured. No validation will actually take place. * ``no`` - DNSSEC validation is disabled, and recursive server will behave in the "old fashioned" way of performing insecure DNS lookups, until you have manually configured at least one trusted key. * ``auto`` - DNSSEC validation is enabled, and a default trust anchor (included as part of BIND) for the DNS root zone is used. BIND_LOG_DNS ^^^^^^^^^^^^ This variable controls if DNS queries should be shown in Docker log output or not. By default no DNS queries are shown. +--------------------------+------------------------+---------------------+ | Name | Allowed values | Default value | +==========================+========================+=====================+ | ``BIND_LOG_DNS`` | ``1`` or ``0`` | ``0`` | +--------------------------+------------------------+---------------------+ If enabled all DNS queries are shown. This is useful for debugging. BIND_TTL_TIME ^^^^^^^^^^^^^ This variable controls the DNS TTL in seconds. If empty or removed it will fallback to a sane default. +--------------------------+----------------------+---------------------+ | Name | Allowed values | Default value | +==========================+======================+=====================+ | ``BIND_TTL_TIME`` | integer | empty | +--------------------------+----------------------+---------------------+ .. seealso:: * |ext_lnk_doc_bind_ttl| * |ext_lnk_doc_bind_soa| BIND_REFRESH_TIME ^^^^^^^^^^^^^^^^^ This variable controls the DNS Refresh time in seconds. If empty or removed it will fallback to a sane default. +--------------------------+----------------------+---------------------+ | Name | Allowed values | Default value | +==========================+======================+=====================+ | ``BIND_REFRESH_TIME`` | integer | empty | +--------------------------+----------------------+---------------------+ .. seealso:: |ext_lnk_doc_bind_soa| BIND_RETRY_TIME ^^^^^^^^^^^^^^^ This variable controls the DNS Retry time in seconds. If empty or removed it will fallback to a sane default. +--------------------------+----------------------+---------------------+ | Name | Allowed values | Default value | +==========================+======================+=====================+ | ``BIND_RETRY_TIME`` | integer | empty | +--------------------------+----------------------+---------------------+ .. seealso:: |ext_lnk_doc_bind_soa| BIND_EXPIRY_TIME ^^^^^^^^^^^^^^^^ This variable controls the DNS Expiry time in seconds. If empty or removed it will fallback to a sane default. +--------------------------+----------------------+---------------------+ | Name | Allowed values | Default value | +==========================+======================+=====================+ | ``BIND_EXPIRY_TIME`` | integer | empty | +--------------------------+----------------------+---------------------+ .. seealso:: |ext_lnk_doc_bind_soa| BIND_MAX_CACHE_TIME ^^^^^^^^^^^^^^^^^^^ This variable controls the DNS Max Cache time in seconds. If empty or removed it will fallback to a sane default. +--------------------------+----------------------+---------------------+ | Name | Allowed values | Default value | +==========================+======================+=====================+ | ``BIND_MAX_CACHE_TIME`` | integer | empty | +--------------------------+----------------------+---------------------+ .. seealso:: |ext_lnk_doc_bind_soa|