In addition to its impressive feature list, Elgg is an admin’s dolly. In this tutorial by Mayank Sharma, we will see how Elgg can be installed in popular Linux web application rollout stack of Linux, Apache, MySQL, and PHP, fondly referred to as LAMP. As MySQL and PHP can run under Windows operating system as well, you can set up Elgg to serve your purpose for such an environment.
Setting Up LAMP
Let’s look at setting up the Linux, Apache, MySQL, PHP web server environment. There are several reasons for the LAMP stack’s popularity. While most people enjoy the freedom offered by these Open Source software, small business and non-profits will also be impressed by its procurement cost—$0.
Step 1: Install Linux
The critical difference between setting up Elgg under Windows or Linux is installing the operating system. The Linux distribution I’m using to set up Elgg is Ubuntu Linux ( http://www.ubuntu.com/ ).It’s available as a free download and has a huge and active global community, should you run into any problems.
Covering step-by-step installation of Ubuntu Linux is too much of a digression for this tutorial. Despite the fact that Ubuntu isn’t too difficult to install, because of its popularity there are tons of installation and usage documentation available all over the Web. Linux.com has a set of videos that detail the procedure of installing Ubuntu ( http://www.linux.com/articles/114152 ).Ubuntu has a dedicated help section ( https://help.ubuntu.com/ ) for introduction and general usage of the distribution.
Step 2: Install Apache
Apache is the most popular web server used on the Internet. Reams and reams of documents have been written on installing Apache under Linux. Apache’s documentation sub-project ( http://httpd.apache.org/docs-project/ ) has information on installing various versions of Apache under Linux.
Ubuntu, based on another popular Linux distribution, Debian, uses a very powerful and user-friendly packaging system. It’s called apt-get and can install an Apache server within minutes. All you have to do is open a terminal and write this command telling apt-get what to install:
apt-get install apache2 apache2-common apache2-doc apache2-mpm-prefork
apache2-utils libapr0 libexpat1 ssl-cert
This will download Apache and its most essential libraries. Next, you need to enable some of Apache’s most critical modules:
The rewrite module is critical to Elgg, so make sure it’s enabled, else Elgg wouldn’t work properly.
That’s it. Now, just restart Apache with: /etc/init.d/apache2 restart.
Step 3: MySQL
Installing MySQL isn’t too much of an issue either. Again, like Ubuntu and Apache, MySQL can also boast of a strong and dedicated community. This means there’s no dearth of MySQL installation or usage related documentation ( http://www.mysql.org/doc/ ).
If you’re using MySQL under Ubuntu, like me, installation is just a matter of giving apt-get a set of packages to install:
apt-get install mysql-server mysql-client libmysqlclient12-dev
Finally, set up a password for MySQL with:
mysqladmin -h yourserver.example.com -u root password yourrootmysqlpassword
Step 4: Install PHP Support
You might think I am exaggerating things a little bit here, but I am not, PHP is one of the most popular and easy to learn languages for writing web applications. Why do you think we are setting up out Linux web server environment to execute PHP? It’s because Elgg itself is written in PHP! And so are hundreds and thousands of other web applications.
So I’m sure you’ve guessed by now that PHP has a good deal of documentation ( http://www.php.net/docs.php )as well. You’ve also guessed it’s now time to call upon Ubuntu’s apt-get package manager to set up PHP:
apt-get install libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-mysqli
As you can see, in addition to PHP, we are also installing packages that’ll hook up PHP with the MySQL database and the Apache web server.
That’s all there is to setting up the LAMP architecture to power your Elgg network.
Setting Up WAMP
If you are used to Microsoft’s Windows operating system or want to avoid the extra minor learning curve involved with setting up the web server on a Linux distribution, especially, if you haven’t done it before, you can easily replicate the Apache, MySQL, PHP web server on a Windows machine. Cost wise, all server components the Apache web server, MySQL database, and the PHP development language have freely available Windows versions as well. But the base component of this stack, the operating system —Microsoft Windows, isn’t.
Versions of Apache, MySQL, and PHP for Windows are all available on the same websites mentioned above. As Windows doesn’t have an apt-get kind of utility, you’ll have to download and install all three components from their respective websites, but you have an easier way to set up a WAMP server. There are several pre-packaged Apache, MySQL, and PHP software bundles available for Windows(http://en.wikipedia.org/wiki/Comparison_of_WAMPs).I’ve successfully run Elgg on the WAMP5 bundle (http://www.en.wampserver.com/). The developer updates the bundle, time and again, to make sure it’s running the latest versions of all server components included in the bundle.
Note – While WAMP5 requires no configuration, make sure you have Apache’s rewrite_module and PHP’s php_gd2 extension enabled. They will have a bullet next to their name if they are enabled. If the bullet is missing, click on the respective entries under the Apache and PHP sub-categories and restart WAMP5.
Now that we have a platform ready for Elgg, let’s move on to the most important step of setting up Elgg. Download the latest version of Elgg from its website. At the time of writing this tutorial, the latest version of Elgg was Elgg-0.8. Elgg is distributed as a zipped file.
To uncompress under Linux: Move this zipped file to /tmp and uncompress it with the following command:
$ unzip /tmp/elgg-0.8.zip
To uncompress under Windows: Right-click on the ZIP file and select the Extract here option.
After uncompressing the ZIP file, you should have a directory called Elgg-
Note: You can set up Elgg on your local web server that sits on the Internet or on a paid web server in a data center anywhere on the planet. The only difference between the two setups is that if you don’t have access to the local web server, you’ll have to contact the web service provider and ask him about the transfer options available to you. Most probably, you’ll have FTP access to your web server, and you’ll have to use one of the dozens of FTP clients, available for free, to transfer Elgg’s files from your computer to the remote web server. Optionally, if you have “shell” access on the web server, you might want to save time by transferring just the zipped file and unzipping it on the web server itself. Contact your web server provider for this information.
The web server’s directory where you need to copy the contents of the Elgg directory depends upon your Apache installation and operating system. In Ubuntu Linux, the default web server directory is /var/www/. In Windows, WAMP5 asks where it should create this directory during installation. By default, it’s the www directory and is created within the directory you installed WAMP5 under.
Note: Another important decision you need to make while installing Elgg is how do you want your users to access your network. If you’re setting up the network to be part of your existing web infrastructure, you’ll need to install Elgg inside a directory. If, on the other hand, you are setting up a new site just for the Elgg-powered social network, copy the contents of the Elgg directory inside the www directory itself and not within a subdirectory. Once you have the Elgg directory within your web server’s www directory, it’s time to set things in motion. Start by renaming the config-dist.php file to config.php and the htaccess-dist to .htaccess. Simply right-click on the file and give it a new name or use the mv command in this format:
Note : To rename htacces-dist to .htaccess in Windows, you’ll have to open the htaccess-dist file in notepad and then go to File | Save As and specify the name as .htaccess with the quotes.
Believe it or not, we’ve completed the “installation” bit of setting up Elgg. But we still need to configure it before throwing the doors open to visitors. Not surprisingly, all this involves is creating a database and editing the config.php file to our liking.
Creating a Database
Making an empty database in MySQL isn’t difficult at all. Just enter the MySQL interactive shell using your username, password, and hostname you specified while installing MySQL.
$ mysql -u root -h localhost -p
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 9 to server version: 5.0.22-Debian_
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> CREATE DATABASE elgg;
You can also create a MySQL database using a graphical front-end manager like PHPMyAdmin, which comes with WAMP5. Just look for a database field, enter a new name (Elgg), and hit the Create button to create an empty Elgg database.
Elgg has a front-end interface to set up config.php, but there are a couple of things you need to do before you can use that interface:
- Create a data directory outside your web server root. As described in the configuration file, this is a special directory where uploaded files will go. It’s also advisable to create this directory outside your main Elgg install. This is because this directory will be writable by everyone accessing the Elgg site and having such a “world-accessible” directory under your Elgg installation is a security risk. If you call the directory Elgg-data, make it world-readable with the following command:
$ chmod 777 elgg-data
- Setup admin username and password. Before you can access Elgg’s configuration web front-end, you need an admin user and a password. For that open the config.php file in your favorite text editor and scroll down to the following variables:
$CFG->adminuser = "";
$CFG->adminpassword = "";
Specify your chosen admin username and password between the quotes, so that it looks something like this:
$CFG->adminuser = "admin";
$CFG->adminpassword = "765thyr3";
Make sure you don’t forget the username and password of the admin user.
When you have created the data directory and specified an admin username and password, it’s time to go ahead with the rest of the configuration. Open a web browser and point to http://
This will open up a simple web page with lots of fields. All fields have a title and a brief description of the kind of information you need to fill in that field. There are some drop-down lists as well, from which you have to select one of the listed options. Here are all the options and their descriptions:
Administration panel username: Username to log in to this admin panel, in future, to change your settings.
Admin password: Password to log in to this admin panel in future.
Site name: Enter the name of your site here (e.g. Elgg, Apcala, University of Bogton’s Social Network, etc.).
Tagline: A tagline for your site (e.g. Social network for Bogton).
Web root: External URL to the site (e.g. http://elgg.bogton.edu/).
Elgg install root: Physical path to the files (e.g./home/Elggserver/httpdocs/).
Elgg data root: This is a special directory where uploaded files will go. If possible, this should live outside your main Elgg installation? (you’ll need to create it by hand). It must have world writable permissions set, and have a final slash at the end.
Note: Even in Windows, where we use back slashes () to separate directories, use Unix’s forward slashes (/) to specify the path to the install root, data root, and other path names. For example, if you have Elgg files under WAMP’s default directory in your C drive, use this path: C:/wamp/www/elgg/.
Database type: Acceptable values are mysql and postgres – MySQL is highly recommended.
System administrator email: The email address your site will send emails from(e.g. email@example.com). News account initial password: The initial password for the ‘news’ account. This will be the first administrator user within your system, and you should change the password immediately after the first time you log in.
Default locale: Country code to set language to if you have gettext installed. Public registration: Can general members of the public register for this system? Public invitations: Can users of this system invite other users? Maximum users: The maximum number of users in your system. If you set this to 0, you will have an unlimited number of users.
Maximum disk space: The maximum disk space taken up by all uploaded files.
Disable public comments: Set the following to true to force users to log in before they can post comments, overriding the per-user option. This is a handy sledgehammer-to-crack-a-nut tactic to protect against comment spam (although an Akismet plug-in is available from elgg.org).
Email filter: Anything you enter here must be present in the email address of anyone who registers; e.g. @mycompany.com will only allow email address from mycompany.com to register.
Default access: The default access level for all new items in the system.
Disable user templates: If this is set, users can only choose from available templates rather than defining their own.
Persistent connections: Should Elgg use persistent database connections? Debug: Set this to 2047 to get ADOdb error handling. RSS posts maximum age: Number of days for which to keep incoming RSS feed entries before deleting them. Set this to 0 if you don’t want RSS posts to be removed. Community create flag: Set this to admin if you would like to restrict the ability to create communities to admin users. cURL path: Set this to the cURL executable if cURL is installed; otherwise leave blank.
Note : According to Wikipedia, cURL is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, TFTP, SCP,SFTP, Telnet, DICT, FILE, and LDAP. The main purpose and use for cURL is to automate unattended file transfers or sequences of operations. For example, it is a good tool for simulating a user’s actions at a web browser. Under Ubuntu Linux, you can install curl using the following command:
apt-get install curl
Templates location: The full path of your Default_Template directory.
Profile location: The full path to your profile configuration file (usually, it’s best to leave this in mod/profile/).
Finally, when you’re done, click on the Save button to save the settings.
Note : The next version of Elgg, Elgg 0.9, will further simplify installation. Already an early release candidate of this version (elgg-0.9rc1) is a lot more straightforward to install and configure, for initial use.
First Log In
Now, it’s time to let Elgg use these settings and set things up for you. Just point your browser to your main Elgg installation (http://
On the main page, you can use the news account and the password you specified for this account during configuration to log in to your Elgg installation.