Development

HowtoMultipleSFProjectsLocal

You must first sign up to be able to contribute.

How to "simply" use multiple SF Projects on one local machine MyWay

Introduction

When I started my first own project (not that long ago) I always looked at the sources Fabien and the other developers published f.e. the admin_generator or askeet.

Therefore I downloaded the sources and found that symfony runs best when reached from a simple domain like (http://askeet/ and http://phpmyadmin and http://mysymfony01 a.s.o). Installing in subdirectories can give problems with the links to the images of f.e. the dtree.js

But how can I intersperse my Apache to take several domains and redirect them to the sf_directories as DocumentRoot?

Solution

First, like described in the book we add different vhosts to our apache2 in /etc/http/vhost.d and call them something like

  • phpmyadmin.conf
  • askeet.conf
  • mysymfony01.conf

Within these conf's, we write nearly what is suggested in the Howto configure a webserver chapter of the symfony book, but slightly different because there is not only one loopback device. Try it, look at http://127.0.0.2 or http://127.0.1.120, all loop back to your own Apache2.

Therefore we now setup our VirtualHost (here Apache installed with mod_userdir) like:

<VirtualHost 127.0.0.2:80>
  ServerName askeet
  DocumentRoot "/home/me/public_html/askeet/web"
  DirectoryIndex index.php
  Alias /sf /$data_dir/symfony/web/sf

  <Directory "/home/me/public_html/askeet/web">
   AllowOverride All
   Allow from All
  </Directory>
</VirtualHost>

the next project of course gets the 127.0.0.3

Then we edit our /etc/hosts file which should look like:

127.0.0.1         localhost
127.0.0.2         askeet
127.0.0.3         anotherproject

For Windows users: The hosts file is located at X:\WINDOWS\system32\drivers\etc\hosts where X is the letter of the drive windows is installed.

After restarting Apache now we can access our projects with

Extended Solution

If you have a lot of projects sharing the same host configuration, there is an even easier way to access them. Apache can be configured for something called Dynamically Configured Mass Virtual Hosting.

  • Create the directory /home/me/public_html/sym
  • Like described above create a new vhost file and include it.
  • Be sure that log_config_module is loaded.

This is my file vhost.sym.conf:

# ###
# Configuration file for mass hosting
#

LogFormat "%V %h %l %u %t \"%r\" %s %b" symcommon

NameVirtualHost 127.0.0.4:80
Listen          127.0.0.4:80

<VirtualHost 127.0.0.4:80>
  VirtualDocumentRoot   "/home/me/public_html/sym/%1/web"
  CustomLog             "logs/sym.access_log" symcommon
  ErrorLog              "logs/sym.error_log"
  
  <Directory "/home/me/public_html/sym/*/web">
    AllowOverride All
    Allow from All
  </Directory>
  
  DirectoryIndex index.php
  
  Alias /sf /$data_dir/symfony/web/sf
 <Directory "/$data_dir/symfony/web/sf">
   AllowOverride All
   Allow from All
 </Directory>
 
</VirtualHost>

As you can see, this is almost the same configuration as above. The main difference is the use of VirtualDocumentRoot to locate the document root.

Restart your Apache to load the configuration. Remeber that you can use httpd -S to let Apache show he settings parsed from the configuration files.

Now you can set up new projects without restarting apache. The only manual step left is configuring your /etc/hosts for name resolution.

For testing we will set up two projects:

Change to the /home/me/public_html/sym/ directory. This is the root for the new projects.

   mkdir first
   cd first
   symfony generate:project first
   symfony generate:app frontend
   
   cd ..
   mkdir second
   cd second
   symfony generate:project second
   symfony generate:app frontend
   

Modify your /etc/hosts:

    127.0.0.4   first.sym
    127.0.0.4   second.sym

Point your browser to:

This configuration is not a replacement for the solution described above. They perfectly live side-by-side. I use the one-config-for-all-setup for quick setups, e.g. testing of new plugins in a clean environment and the one-config-per-host-setup if I need special configuration settings.

DONE