wiki:faq/setup-development-workstation

Version 13 (modified by Mallory Knodel, 9 years ago) (diff)

--

Setting up a development workstation

As our web sites become more complicated and more critical to our work, having a development version of your web site running in a non-public place becomes more and more important. With a development workstation, you can make and test your changes privately to ensure that they work before copying your changes to the live site. With Debian Linux, you can setup a development workstation that uses the same software used on the May First/People Link servers.

Below is a tutorial for installing Debian Linux on a computer for the purposes of developing Web-based applications that use Apache, PHP, and MySQL. View this other tutorial if you want to set up your development workstation using OS X on a Macintosh.

Installing Debian

Installing and configuring critical helper packages

Being able to send and receive email is often part of the web application development process.

0 fidel:~# aptitude install mailx esmtp-run

You will then want to edit the /etc/esmtprc file, modifying the following lines:

# Config file for ESMTP sendmail

# The SMTP host and service (port)
hostname=chavez.mayfirst.org:587

# The user name
username=

# The password
password=

#qualifydomain=@mayfirst.org
#force sender=your-username@mayfirst.org
#force reverse_path=your-username@mayfirst.org

# Whether to use Starttls
starttls=enabled

FIXME: I can't properly send mail with this configuration, I get the following error:

Invalid peer certificate (error 20)
0 (null)
jamie@mayfirst.org: 0 (null)
Can't send mail: sendmail process failed with error code 70

This could be related to a known bug in esmtp.

Installing PHP, Apache, and MySQL

Install the required packages with:

aptitude install mysql-server php5-cgi php5-cli libapache2-mod-php5 apache2-mpm-prefork php5-mysql

Configuring the environment

The goal of the configuration is to make it as easy as possible to setup a new development environment for a new project.

Each new project will have a unique, non-public domain name based on the name of the workstation. Each project will have a corresponding directory in your home directory where you can place php and other files to be served by apache.

In this example, let's assume the workstation is named "fidel." So - a new project called mfpl would have the development domain name: mfpl.fidel (below we will edit the /etc/hosts file so that this non-public domain name will resolve to the development workstation).

Create a projects directory in your home directory:

mkdir ~/projects

Apache can be configured so that it dynamically sets the document root based on the domain name.

To enable that feature, create a new file called virtual-document-roots in the /etc/apache2/sites-available directory with the following contents (replace your-username with your actual username).

<Directory /home/your-username/projects>
AllowOverride All
</Directory>
VirtualScriptAlias /home/your-username/projects/%1/cgi-bin/
VirtualDocumentRoot /home/your-username/projects/%1/web/

Next enable the vhost_alias module and the site configuration file you just created with:

a2enmod vhost_alias
a2enmod rewrite
a2ensite virtual-document-roots

Reload Apache so these changes take effect:

/etc/init.d/apache2 reload

NOTE: If you are developing a Drupal project, you will need to edit your .htaccess file. There's a line that says the following:

# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
RewriteBase /

You will want to uncomment the RewriteBase directive as shown above.

Steps to create a new project

With your environment setup, you can easily start a new project by following these steps:

  • Choose a name for the project. In this example, we'll choose the name mfpl (and remember - in our example the computer name is fidel).
  • Create the mysql database with:
    mysql -u root -p -e "CREATE DATABASE mfpl; GRANT ALL ON mfpl.* to 'mfpl'@'localhost' identified by 'mfpl';"
    
  • Add a new domain to your /etc/hosts file. Add it to the line that starts with 127.0.1.1 (you can safely create the line if it doesn't exist). For example:
    127.0.0.1       localhost 
    127.0.1.1       fidel.sunsetpark.mayfirst.org   fidel mfpl.fidel
    
  • Change into your proects directory:
    cd ~/projects
    
  • Checkout your src files via svn
     svn co svn+ssh://svn.mayfirst.org/trunk/mfpl
    
  • OR create your project folders with:
    mkdir ~/projects/mfpl
    mkdir ~/projects/mfpl/web
    mkdir ~/projects/mfpl/cgi-bin
    

Now you are ready to begin. You can start placing files in your project's web directory and access your project at the URL: http://mfpl.fidel/

Keeping files in sync

If you are working on a database driven project (like Drupal) it can be difficult to keep your database and (in the case of Drupal) your files directory in sync.

A bash script like the following one can help - by providing an easy way to synchronize your development platform with the live site:

#!/bin/bash
echo "Synchronizing database."
ssh <user>@<server> "mysqldump -u <remote-db-user> -p<remote-db-pass> <remote-db-name>" | mysql -u <local-db-user> -p<local-db-pass> <local-db-name>

echo "Synchronizing files."
rsync -av --exclude '*/settings.php' --exclude '.svn*' --exclude '*/.svn*' --exclude 'sites*' <user>@<server>:<remote-path-to-files-directory> <local-path-to-files-director>