Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 32f84db

Browse filesBrowse files
committed
Documented the local Symfony server
1 parent 2f97fff commit 32f84db
Copy full SHA for 32f84db

File tree

Expand file treeCollapse file tree

1 file changed

+271
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+271
-0
lines changed

‎setup/symfony_server.rst

Copy file name to clipboard
+271Lines changed: 271 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,271 @@
1+
Symfony Local Web Server
2+
========================
3+
4+
You can run Symfony applications with any web server (Apache, nginx, the
5+
internal PHP web server, etc.) However, Symfony provides its own web server to
6+
make you more productive while developing your apps.
7+
8+
This server is not intended for production use and it supports HTTP/2, TLS/SSL,
9+
automatic generation of security certificates, local domains, and many other
10+
features that sooner or later you'll need when developing web projects.
11+
12+
Installation
13+
------------
14+
15+
The Symfony server is distributed as a free installable binary without any
16+
dependency and support for Linux, macOS and Windows. Go to `symfony.com/download`_
17+
and follow the instructions for your operating system.
18+
19+
Getting Started
20+
---------------
21+
22+
The Symfony web server is started once per project, so you may end up with
23+
several instances (each of them listening to a different port). This is the
24+
common workflow to serve a Symfony project:
25+
26+
.. code-block:: terminal
27+
28+
$ cd my-project/
29+
$ symfony server:start
30+
31+
[OK] Web server listening on http://127.0.0.1:....
32+
...
33+
34+
# Now, browse the given URL in your browser, or run this command:
35+
$ symfony open:local
36+
37+
Running the server this way makes it display the log messages in the console, so
38+
you can't run other commands. If you prefer, you can run the Symfony server in
39+
the background:
40+
41+
.. code-block:: terminal
42+
43+
$ cd my-project/
44+
45+
# start the server in the background
46+
$ symfony server:start -d
47+
48+
# continue working and running other commands...
49+
50+
# show the latest log messages
51+
$ symfony server:log
52+
53+
Enabling TLS
54+
------------
55+
56+
Browsing the secure version of your apps locally is important to early detect
57+
problems with mixed content and to run libraries that only run in HTTPS.
58+
Traditionally this has been painful and complicated to set up, but the Symfony
59+
server automates everything. First, run this command:
60+
61+
.. code-block:: terminal
62+
63+
$ symfony server:ca:install
64+
65+
This command creates a local certificate authority, registers it in your system
66+
trust store, registers it in Firefox (this is required only for that browser)
67+
and creates a default certificate for ``localhost`` and ``127.0.0.1``. In other
68+
words, it does everything for you. You can now browse your local app using
69+
HTTPS instead of HTTP.
70+
71+
Different PHP Settings Per Project
72+
----------------------------------
73+
74+
Selecting a Different PHP Version
75+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76+
77+
If you have multiple PHP versions installed in your computer, you can tell
78+
Symfony which one to use creating a file called ``.php-version`` at the project
79+
root dir:
80+
81+
.. code-block:: terminal
82+
83+
$ cd my-project/
84+
85+
# use a specific PHP version
86+
$ echo "7.2" > .php-version
87+
88+
# use any PHP 7.x version available
89+
$ echo "7" > .php-version
90+
91+
This other command is useful if you don't remember all the PHP versions
92+
installed in your computer:
93+
94+
.. code-block:: terminal
95+
96+
$ symfony local:php:list
97+
98+
Overriding PHP Config Options Per Project
99+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100+
101+
You can change the value of any PHP runtime config option per project creating a
102+
file called ``php.ini`` at the project root dir. Add only the options you want
103+
to override:
104+
105+
.. code-block:: terminal
106+
107+
$ cd my-project/
108+
109+
# this project only overrides the default PHP timezone
110+
$ cat php.ini
111+
[Date]
112+
date.timezone = Asia/Tokyo
113+
114+
Running Commands with Different PHP Versions
115+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116+
117+
When running different PHP versions, it's useful to use the main ``symfony``
118+
command as a wrapper of the ``php`` command to always select the most
119+
appropriate PHP version according to the project which is running the commands:
120+
121+
.. code-block:: terminal
122+
123+
# runs the command with the default PHP version
124+
$ php -r "..."
125+
126+
# runs the command with the PHP version selected by the project
127+
# (or the default PHP version if the project didn't select one)
128+
$ symfony php -r "..."
129+
130+
If you are using this wrapper frequently, consider aliasing the ``php`` command
131+
to it:
132+
133+
.. code-block:: terminal
134+
135+
$ cd ~/.symfony/bin
136+
$ cp symfony php
137+
# now you can run "php ..." and the "symfony" command will be executed instead
138+
139+
Local Domain Names
140+
------------------
141+
142+
By default, projects are accessible at some random port of the ``12.7.0.0.1``
143+
local IP. However, sometimes is preferable to associate a domain name to them:
144+
145+
* It's more convenient when you work continuously on the same project because
146+
port numbers can change but domains don't;
147+
* The behavior of some apps depend on their domains/subdomains;
148+
* To have stable endpoints, such as the local redirection URL of Oauth2.
149+
150+
Setting up the Local Proxy
151+
~~~~~~~~~~~~~~~~~~~~~~~~~~
152+
153+
Local domains are possible thanks to a local proxy provided by the Symfony
154+
server. First, start the proxy:
155+
156+
.. code-block:: terminal
157+
158+
$ symfony proxy:start
159+
160+
If this is the first time you run the proxy, you must follow these additional steps:
161+
162+
* Open the **network configuration** of your operating system;
163+
* Find the **proxy settings** and select the **"Automatic Proxy Configuration"**;
164+
* Set the following URL as its value: ``https://127.0.0.1:7080/proxy.pac``
165+
166+
Defining the Local Domain
167+
~~~~~~~~~~~~~~~~~~~~~~~~~
168+
169+
By default, Symfony proposes ``.wip`` (for *Work in Progress*) as the local
170+
domains (but you can choose any other domain and TLD you like). Define a local
171+
domain for a project as follows:
172+
173+
.. code-block:: terminal
174+
175+
$ cd my-project/
176+
$ symfony proxy:domain:attach my-domain.wip
177+
178+
If you have installed the local proxy as explained in the previous section, you
179+
can now browse ``https://my-domain.wip`` to access to your local project with
180+
the new custom domain.
181+
182+
.. tip::
183+
184+
Browse the https://127.0.0.1:7080 URL to get the full list of local project
185+
directories, their custom domains, and port numbers.
186+
187+
When running console commands, add the ``HTTPS_PROXY`` env var to make custom
188+
domains work:
189+
190+
.. code-block:: terminal
191+
192+
$ HTTPS_PROXY=https://127.0.0.1:7080 curl https://my-domain.wip
193+
194+
Long-Running Commands
195+
---------------------
196+
197+
Long-running commands, such as the ones related to compiling front-end web
198+
assets, block the terminal and you can't run other commands. The Symfony server
199+
provides a ``run`` command to wrap them as follows:
200+
201+
.. code-block:: terminal
202+
203+
# compile Webpack assets using Symfony Encore ... but do that in the
204+
# background to not block the terminal
205+
$ symfony run -d yarn encore dev --watch
206+
207+
# continue working and running other commands...
208+
209+
# from time to time, check the command logs if you want
210+
$ symfony server:log
211+
212+
# and you can also check if the command is still running
213+
$ symfony server:status
214+
Web server listening on ...
215+
Command "yarn ..." running with PID ...
216+
217+
# stop the command (and the whole server) when you are finished
218+
$ symfony server:stop
219+
220+
Bonus Features
221+
--------------
222+
223+
The Symfony server is much more than a local web server and it includes other
224+
useful features.
225+
226+
Looking for Security Vulnerabilities
227+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
228+
229+
Instead of installing the :doc:`Symfony Security Checker </security/security_checker>`
230+
as a dependency of your projects, you can use this command from the Symfony server:
231+
232+
.. code-block:: terminal
233+
234+
$ symfony security:check
235+
236+
This command uses the same vulnerability database as the Symfony Security
237+
Checker but it also caches that information to keep checking security when
238+
it's not possible to access to that public database.
239+
240+
Creating Symfony Projects
241+
~~~~~~~~~~~~~~~~~~~~~~~~~
242+
243+
In addition to the `different ways to install Symfony`_, you can use this
244+
command from the Symfony server:
245+
246+
.. code-block:: terminal
247+
248+
# creates a new project based on the Symfony Skeleton
249+
$ symfony new my_project_name
250+
251+
# creates a new project based on the Symfony Website Skeleton
252+
$ symfony new --full my_project_name
253+
254+
# creates a new project based on the Symfony Demo application
255+
$ symfony new --demo my_project_name
256+
257+
SymfonyCloud Integration
258+
------------------------
259+
260+
The local Symfony server provides full, but optional, integration with
261+
`SymfonyCloud`_, a service optimized to run your Symfony apps on the cloud.
262+
It provides features such as creating environments, backups/snapshots, and
263+
even access to a copy of the production data in your local machine to help
264+
you debug any issues.
265+
266+
`Read SymfonyCloud technical docs`_.
267+
268+
.. _`symfony.com/download`: https://symfony.com/download
269+
.. _`different ways to install Symfony`: https://symfony.com/download
270+
.. _`SymfonyCloud`: https://symfony.com/cloud/
271+
.. _`Read SymfonyCloud technical docs`: https://symfony.com/doc/master/cloud/intro.html

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.