2018-07-03 13:47:58 +00:00
|
|
|
.. _best_practice:
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
*************
|
|
|
|
Best practice
|
|
|
|
*************
|
|
|
|
|
2018-07-06 07:30:52 +00:00
|
|
|
If you have already operate the Devilbox, this guide is a must have. It will cover common
|
|
|
|
best-practice topics as well as some tips and tricks you will want to apply.
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
**Table of Contents**
|
|
|
|
|
|
|
|
.. contents:: :local:
|
|
|
|
|
|
|
|
|
|
|
|
Move data out of Devilbox directory
|
|
|
|
===================================
|
|
|
|
|
|
|
|
One thing you should take into serious consideration is to move data such as your projects as well
|
|
|
|
as persistent data of databases out of the Devilbox git directory.
|
|
|
|
|
|
|
|
The Devilbox git directory should be something that can be safely deleted and re-created without
|
|
|
|
having to worry about loosing any project data. There could also be the case that you have a
|
|
|
|
dedicated hard-disk to store your projects or you have your own idea about a directory structure
|
|
|
|
where you want to store your projects.
|
|
|
|
|
|
|
|
|
|
|
|
Projects
|
|
|
|
--------
|
|
|
|
|
2018-07-06 07:30:52 +00:00
|
|
|
.. seealso::
|
|
|
|
:ref:`howto_move_projects_to_a_different_directory`
|
|
|
|
Follow this guide to keep your projects separated from the Devilbox git directory.
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
Databases
|
|
|
|
---------
|
|
|
|
|
|
|
|
Moving your projects out of the Devilbox git directory is one step, you still need to take care
|
|
|
|
about persistent data of all available databases as well.
|
|
|
|
|
|
|
|
Let's assume you desired location for database storage is at ``/home/user/workspace/db/``.
|
|
|
|
|
|
|
|
MySQL
|
|
|
|
^^^^^
|
|
|
|
|
|
|
|
All you have to to is to adjust the path of :ref:`env_mysql_datadir` in the ``.env`` file.
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Navigate to Devilbox git directory
|
|
|
|
host> cd path/to/devilbox
|
2018-04-07 09:59:13 +00:00
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Open the .env file with your favourite editor
|
|
|
|
host> vim .env
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
Now Adjust the value of :ref:`env_mysql_datadir`
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2018-06-03 18:45:01 +00:00
|
|
|
:caption: .env
|
|
|
|
:emphasize-lines: 1
|
2018-04-07 09:59:13 +00:00
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
HOST_PATH_MYSQL_DATADIR=/home/user/workspace/db/mysql
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
That's it, whenever you start up the Devilbox ``/home/user/workspace/db/mysql/`` will be mounted
|
|
|
|
into the MySQL container.
|
|
|
|
|
|
|
|
PostgreSQL
|
|
|
|
^^^^^^^^^^
|
|
|
|
|
|
|
|
All you have to to is to adjust the path of :ref:`env_pgsql_datadir` in the ``.env`` file.
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Navigate to Devilbox git directory
|
|
|
|
host> cd path/to/devilbox
|
2018-04-07 09:59:13 +00:00
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Open the .env file with your favourite editor
|
|
|
|
host> vim .env
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
Now Adjust the value of :ref:`env_pgsql_datadir`
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2018-06-03 18:45:01 +00:00
|
|
|
:caption: .env
|
|
|
|
:emphasize-lines: 1
|
2018-04-07 09:59:13 +00:00
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
HOST_PATH_PGSQL_DATADIR=/home/user/workspace/db/pgsql
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
That's it, whenever you start up the Devilbox ``/home/user/workspace/db/pqsql/`` will be mounted
|
|
|
|
into the PostgreSQL container.
|
|
|
|
|
|
|
|
MongoDB
|
|
|
|
^^^^^^^
|
|
|
|
|
|
|
|
All you have to to is to adjust the path of :ref:`env_mongo_datadir` in the ``.env`` file.
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Navigate to Devilbox git directory
|
|
|
|
host> cd path/to/devilbox
|
2018-04-07 09:59:13 +00:00
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Open the .env file with your favourite editor
|
|
|
|
host> vim .env
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
Now Adjust the value of :ref:`env_mongo_datadir`
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2018-06-03 18:45:01 +00:00
|
|
|
:caption: .env
|
|
|
|
:emphasize-lines: 1
|
2018-04-07 09:59:13 +00:00
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
HOST_PATH_MONGO_DATADIR=/home/user/workspace/db/mongo
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
That's it, whenever you start up the Devilbox ``/home/user/workspace/db/mongo/`` will be mounted
|
|
|
|
into the MongoDB container.
|
|
|
|
|
|
|
|
|
|
|
|
Version control ``.env`` file
|
|
|
|
-----------------------------
|
|
|
|
|
|
|
|
The ``.env`` file is ignored by git, because this is *your* file to customize and it should be
|
|
|
|
*your* responsibility to make sure to backup or version controlled.
|
|
|
|
|
|
|
|
One concept you can apply here is to have a separate **dotfiles** git repository.
|
|
|
|
This is a repository that holds all of your configuration files such as vim, bash, zsh, xinit
|
|
|
|
and many more. Those files are usually stored inside this repository and then symlinked to the
|
|
|
|
correct location. By having all configuration files in one place, you can see and track changes
|
|
|
|
easily as well as bein able to jump back to previous configurations.
|
|
|
|
|
|
|
|
In case of the Devilbox ``.env`` file, just store this file in your repository and symlink it to
|
|
|
|
the Devilbox git directiry. This way you make sure that you keep your file, even when the Devilbox
|
|
|
|
git directory is deleted and you also have a means of keeping track about changes you made.
|
|
|
|
|
2018-04-24 22:41:13 +00:00
|
|
|
You could also go further and have several ``.env`` files available somewhere. Each of those files
|
|
|
|
holds different configurations e.g. for different projects or customers.
|
|
|
|
|
|
|
|
* ``env-customer1``
|
|
|
|
* ``env-php55``
|
|
|
|
* ``env-project3``
|
|
|
|
|
|
|
|
You would then simply symlink one of those files to the Devilbox git directory.
|
|
|
|
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
Version control service config files
|
|
|
|
------------------------------------
|
|
|
|
|
|
|
|
.. todo:: This will require some changes on the Devilbox and will be implemented shortly.
|
|
|
|
|
2018-04-24 22:41:13 +00:00
|
|
|
* Symlink and have your own git directory
|
|
|
|
* Separate data partition, backups
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
|
2018-04-07 12:07:33 +00:00
|
|
|
PHP project hostname settings
|
|
|
|
=============================
|
|
|
|
|
|
|
|
When configuring your PHP projects to use MySQL, PostgreSQL, Redis, Mongo and other services,
|
|
|
|
make sure to set the hostname of each of those services to ``127.0.0.1``.
|
|
|
|
|
|
|
|
**Why is that?**
|
|
|
|
|
|
|
|
The PHP container port-forwards each service port to its own listen address on ``127.0.0.1``.
|
|
|
|
The Devilbox also exposes each of those service ports to the host operating system on ``127.0.0.1``.
|
|
|
|
|
|
|
|
This allows you to keep your project configuration unchanged and have the same behaviour inside the
|
|
|
|
PHP container and on your host operating system.
|
|
|
|
|
|
|
|
.. important::
|
2018-06-03 18:45:01 +00:00
|
|
|
Do not mix up ``localhost`` with ``127.0.0.1``. They behave differently!
|
|
|
|
Use ``127.0.0.1`` and do not use ``localhost``.
|
2018-04-07 12:07:33 +00:00
|
|
|
|
|
|
|
As an example, if you want to access the MySQL database from within the PHP container, you do the
|
|
|
|
following:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
:emphasize-lines: 8
|
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Navigate to Devilbox git directory
|
|
|
|
host> cd path/to/devilbox
|
2018-04-07 12:07:33 +00:00
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Enter the PHP container
|
|
|
|
host> ./shell.sh
|
2018-04-07 12:07:33 +00:00
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Enter the MySQL console
|
|
|
|
php> mysql -u root -h 127.0.0.1 -p
|
|
|
|
mysql>
|
2018-04-07 12:07:33 +00:00
|
|
|
|
|
|
|
The very same command applies to access the MySQL database from your host operating system:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
:emphasize-lines: 2
|
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
# Enter the MySQL console
|
|
|
|
host> mysql -u root -h 127.0.0.1 -p
|
|
|
|
mysql>
|
2018-04-07 12:07:33 +00:00
|
|
|
|
|
|
|
So no matter if you use the Devilbox or have another LAMP stack installed locally on your host
|
|
|
|
operating system, you do not have to change your configuration files if you stick to this tip.
|
|
|
|
|
|
|
|
So any of your projects php files that configure MySQL as an example should point the hostname
|
|
|
|
or IP address of the MySQL server to ``127.0.0.1``:
|
|
|
|
|
|
|
|
.. code-block:: php
|
|
|
|
|
2018-06-03 18:45:01 +00:00
|
|
|
<?php
|
|
|
|
// MySQL server connection in your project configuration
|
|
|
|
mysql_host = '127.0.0.1';
|
|
|
|
mysql_port = '3306';
|
|
|
|
mysql_user = 'someusername';
|
|
|
|
mysql_pass = 'somepassword';
|
|
|
|
?>
|
2018-04-07 12:07:33 +00:00
|
|
|
|
2018-07-03 13:47:58 +00:00
|
|
|
.. seealso:: :ref:`work_inside_the_php_container`
|
2018-04-07 12:07:33 +00:00
|
|
|
|
2018-04-07 09:59:13 +00:00
|
|
|
|
|
|
|
Timezone
|
|
|
|
========
|
|
|
|
|
|
|
|
The :ref:`env_timezone` value will affect PHP, web server and MySQL container equally. It does
|
|
|
|
however not affect any other official Docker container that are used within the Devilbox. This is
|
|
|
|
an issue that is currently still being worked on.
|
|
|
|
|
|
|
|
Feel free to change this to any timezone you require for PHP and MySQL, but keep in mind that
|
|
|
|
timezone values for databases can be painful, once you want to switch to a different timezone.
|
|
|
|
|
|
|
|
A good practice is to always use ``UTC`` on databases and have your front-end application calculate
|
|
|
|
the correct time for the user. This way you will be more independent of any changes.
|