Normally, when we are configuring legacy applications is difficult to find accurate documentation about the used tools (Dependencies, Libraries, Environment).
Currently, Symfony's version is 5.3.10 thus actual documentation points out towards these newer versions from the framework even though previous documentation is still accessible since version 2.7
Avoid looking for hundred sites and freaking out whether any solutions work or work partially, in this post we are going a step to step to configure a Symfony 2.7 app in Apache 2.4 HTTP Server running in Ubuntu 20.04.
1) Configure 000-default.conf
I don't recommend editing etc/apache2/apache2.conf
because it is the main configuration file of Apache so if you broke that file probably your Apache will not work.
Add the next code in etc/apache2/sites-available/000-default.conf
inside the block <VirtualHost *:80>
or create your own configuration file in etc/apache2/sites-available
if you do the last one remember run the script a2ensite YOUR_CONFIGURATION_FILE.conf
for Apache recognize it.
DocumentRoot /var/www/html/YOUR_PROJECT_NAME/web
<Directory /var/www/html/YOUR_PROJECT_NAME/web>
AllowOverride All
Require all granted
Allow from All
</Directory>
DocumentRoot: Apache will serve files located here
Directory: Group of files where we are applying Apache rules
AllowOverride All: Allow configuration from .htaccess
Require all granted: Access is allowed unconditionally.
Allow from All: All hosts can access the server.
Finally, report Apache about that change and reload it.
service apache2 reload
The previous configuration aimed to configure with mod_php/PHP-CGI if you want to configure with PHP-FPM, I recommend visiting the official documentation or if you want to validate the Apache configuration for yourself
Check /var/log/apache2/error.log
if something wrong happens
2) File permission in app/cache
and app/logs
app/cache
and app/logs
folders must be accessed by web-server user www-data
(This is the default username, keep in mind if your web server has a different username or group name you should replace it with the corresponding name) to Symfony Applications work as expected. I highly recommended changing the default group of the project's folder to www-data
even /var/www/
to avoid relating this folder with the root user
a) Firstly, we change the group of /var/www/
and its children recursively
sudo chown -R :www-data /var/www
b) Add your user Linux account to www-data
group.
sudo usermod -a -G www-data YOUR_USER
exit
Remember to exit your current session or reload your terminal to save changes
c) Change folder's permission app
Sometimes www-data
must create logs and cache folders itself.
chmod 775 -R app
Or you can create manually the folders and specifically add the permissions.
chmod 775 -R app/cache
chmod 775 -R app/logs
Official Symfony Documentation approach this topic as well
I created a table to let you know the possible combination when you are defining file permission in a Unix environment
r = Read
w = Write
x = Execute
Permissions | Owner | Group | Others |
---|---|---|---|
0 | - | - | - |
1 | - | - | x |
2 | - | w | - |
3 | - | w | x |
4 | r | - | - |
5 | r | - | x |
6 | r | w | - |
7 | r | w | x |
Conclusion
This configuration is oriented to development environment and you could start coding as fast as possible, if you need a production environment keep in mind Symfony recommendations and links that I had previously shown you and be careful exposing ONLY your web
folder.
I hope this could be very helpful to you, This is my first article written in English and oriented to developers. I expect your feedback or it is something wrong let me know to make the corresponding corrections.
Top comments (0)