[[PageOutline]]
= 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.
== 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 [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=310968 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).
{{{
AllowOverride All
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/srv/svn/mfpl/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 @ "mysqldump -u -p " | mysql -u -p
echo "Synchronizing files."
rsync -av @:
}}}