Skip to content

Commit a8ba53a

Browse files
committed
Merge branch '4.3' into 4.4
* 4.3: Add more information about Docker and the local web server
2 parents 8a758dd + 86eca87 commit a8ba53a

File tree

1 file changed

+56
-38
lines changed

1 file changed

+56
-38
lines changed

setup/symfony_server.rst

Lines changed: 56 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -253,56 +253,74 @@ Docker Integration
253253
------------------
254254

255255
The local Symfony server provides full `Docker`_ integration for projects that
256-
use it. First, make sure to expose the container ports:
256+
use it.
257+
258+
When the web server detects that Docker Compose is running for the project, it
259+
automatically exposes environment variables according to the exposed port and
260+
the name of the ``docker-compose`` services.
261+
262+
Consider the following configuration:
257263

258264
.. code-block:: yaml
259265
260-
# docker-compose.override.yaml
266+
# docker-compose.yaml
261267
services:
262268
database:
263-
ports:
264-
- "3306"
269+
ports: [3306]
265270
266-
redis:
267-
ports:
268-
- "6379"
271+
The web server detects that a service exposing port ``3306`` is running for the
272+
project. It understands that this is a MySQL service and creates environment
273+
variables accordingly with the service name (``database``) as a prefix:
274+
``DATABASE_URL``, ``DATABASE_HOST``, ...
269275

270-
# ...
271-
272-
Then, check your service names and update them if needed (Symfony creates
273-
environment variables following the name of the services so they can be
274-
autoconfigured):
276+
If the ``docker-compose.yaml`` names do not match Symfony's conventions, add a
277+
label to override the environment variables prefix:
275278

276279
.. code-block:: yaml
277280
278281
# docker-compose.yaml
279282
services:
280-
# DATABASE_URL
281-
database: ...
282-
# MONGODB_DATABASE, MONGODB_SERVER
283-
mongodb: ...
284-
# REDIS_URL
285-
redis: ...
286-
# ELASTISEARCH_HOST, ELASTICSEARCH_PORT
287-
elasticsearch: ...
288-
# RABBITMQ_DSN
289-
rabbitmq: ...
290-
291-
If your ``docker-compose.yaml`` file doesn't use the environment variable names
292-
expected by Symfony (e.g. you use ``MYSQL_URL`` instead of ``DATABASE_URL``)
293-
then you need to rename all occurrences of those environment variables in your
294-
Symfony application. A simpler alternative is to use the ``.env.local`` file to
295-
reassign the environment variables:
296-
297-
.. code-block:: bash
298-
299-
# .env.local
300-
DATABASE_URL=${MYSQL_URL}
301-
# ...
302-
303-
Now you can start the containers and all their services will be exposed. Browse
304-
any page of your application and check the "Symfony Server" section in the web
305-
debug toolbar. You'll see that "Docker Compose" is "Up".
283+
db:
284+
ports: [3306]
285+
labels:
286+
com.symfony.server.service-prefix: 'DATABASE'
287+
288+
In this example, the service is named ``db``, so environment variables would be
289+
prefixed with ``DB_``, but as the ``com.symfony.server.service-prefix`` is set
290+
to ``DATABASE``, the web server creates environment variables starting with
291+
``DATABASE_`` instead as expected by the default Symfony configuration.
292+
293+
Here is the list of supported services with their ports and default Symfony
294+
prefixes:
295+
296+
============= ===== ======================
297+
Service Port Symfony default prefix
298+
============= ===== ======================
299+
MySQL 3306 ``DATABASE_``
300+
PostgreSQL 5432 ``DATABASE_``
301+
Redis 6379 ``REDIS_``
302+
RabbitMQ 5672 ``RABBITMQ_`` (set user and pass via Docker ``RABBITMQ_DEFAULT_USER`` and ``RABBITMQ_DEFAULT_PASS`` env var)
303+
ElasticSearch 9200 ``ELASTICSEARCH_``
304+
MongoDB 27017 ``MONGODB_`` (set the database via a Docker ``MONGO_DATABASE`` env var)
305+
Kafka 9092 ``KAFKA_``
306+
============= ===== ======================
307+
308+
.. tip::
309+
310+
To debug and list all exported environment variables, run ``symfony
311+
var:export``.
312+
313+
.. tip::
314+
315+
For some services, the web server also exposes environment variables
316+
understood by CLI tools related to the service. For instance, running
317+
``symfony run psql`` will connect you automatically to the PostgreSQL server
318+
running in a container without having to specify the username, password, or
319+
database name.
320+
321+
When Docker services are running, browse a page of your Symfony application and
322+
check the "Symfony Server" section in the web debug toolbar; you'll see that
323+
"Docker Compose" is "Up".
306324

307325
SymfonyCloud Integration
308326
------------------------

0 commit comments

Comments
 (0)