This step by step tutorial will show you how to install Elgg with Nginx on an Ubuntu 14.04 VPS. Elgg is an open source social networking engine that is easy to install and set up, then used to power your social network.
This tutorial was tested and written for an Ubuntu VPS, but it should work on any Debian based Linux distribution.
At the time of writing of this tutorial, Elgg 2.0.1 is the latest and recommended version and it requires:
- Apache or Nginx web server with support for URL rewriting
- PHP (version 5.5 or better) with GD graphics library and mbstring extension library.
- MySQL (version 5 or better) installed on your Linux VPS.
Make sure your OS package list and the OS packages are up to date by running the following commands:
sudo apt-get update sudo apt-get upgrade
Stop and remove Apache2 service:
sudo service apache2 stop sudo apt-get remove apache2 sudo apt-get autoremove
Install Nginx and MySQL on your virtual server:
sudo apt-get update sudo apt-get install nginx mysql-server
Configure nginx to start on boot:
sudo update-rc.d -f nginx defaults
Install PHP and PHP modules required by Elgg:
sudo apt-get install php5 php5-cli php5-fpm php5-mysql php5-gd
Download the latest version of Elgg at https://elgg.org/download.php and upload it to the ‘opt’ directory on your server:
cd /opt/ wget https://elgg.org/getelgg.php?forward=elgg-2.0.1.zip -O elgg-2.0.1.zip unzip elgg-2.0.1.zip mv elgg-2.0.1 /var/www/elgg/
It is recommended to use an SSL certificate for your Elgg installation. Save the SSL certificate and its private key to files named ‘file.crt’ and ‘private.key’ respectively and upload them to ‘/etc/nginx’ directory.
Remove the default Nginx server block, then create a new Nginx configuration file and add the following virtual block for your domain name:
rm /etc/nginx/sites-enabled/default vi /etc/nginx/sites-available/your-domain.com.conf
Add the following lines:
server { listen 80; # If you have an SSL certificate, uncomment the 3 lines below: # listen 443 ssl; # ssl_certificate /etc/nginx/file.crt; # ssl_certificate_key /etc/nginx/private.key; server_name your-domain.com; root /var/www/elgg/; index index.php index.html index.htm; gzip on; gzip_types text/css text/javascript text/xml text/plain text/x-component application/javascript application/x-javascript application/json application/xml application/rss+xml font/truetype font/opentype application/vnd.ms-fontobject image/svg+xml; access_log /var/log/nginx/your-domain.com-access.log; error_log /var/log/nginx/your-domain.com-error.log; client_max_body_size 8M; location ~ (^\.|/\.) { return 403; } location = /rewrite.php { rewrite ^(.*)$ /install.php; } location / { try_files $uri $uri/ @elgg; } location ~ \.php$ { try_files $uri @elgg; fastcgi_index index.php; fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } location @elgg { fastcgi_pass localhost:9000; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/index.php; fastcgi_param SCRIPT_NAME /index.php; fastcgi_param QUERY_STRING __elgg_uri=$uri&$args; } }
Do not forget to replace your-domain.com with your actual domain name.
Enable the new Nginx configuration file:
ln -sf /etc/nginx/sites-available/your-domain.com.conf /etc/nginx/sites-enabled/
Open the ‘/etc/php5/fpm/pool.d/www.conf’ configuration file and change the ‘listen’ variable from:
listen = /var/run/php5-fpm.sock
to
listen = 127.0.0.1:9000;
Test the Nginx configuration:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Restart php5-fpm and Nginx services for the changes to take effect:
sudo service php5-fpm restart sudo service nginx restart
Set the proper permissions of the ‘/var/www/elgg’ directory:
sudo chown www-data:www-data -R /var/www/elgg/
Elgg needs a special directory outside of the document root to store uploaded files including profile icons and photos, so create a directory and set proper permissions using the following commands:
mkdir -p /opt/data chmod 770 /opt/data chown www-data /opt/data
Also, Elgg requires a MySQL database, so create a new MySQL user and database:
mysql -u root -p mysql> create database elggdb; mysql> GRANT ALL PRIVILEGES ON elggdb.* TO 'elgguser'@'localhost' IDENTIFIED BY 'Y0UR-PASSW0RD'; mysql> flush privileges; mysql> quit
Do not forget to replace ‘Y0UR-PASSW0RD’ with a strong password.
Open http://your-domain.com/install.php in your favorite web browser and follow the on-screen instructions: enter the database username, password and database name, site name, site email address, data directory and create an administrator account.
That is it. The Elgg installation is complete.
Of course you don’t have to do any of this if you use one of our Linux VPS Hosting services, in which case you can simply ask our expert Linux admins to install Elgg with Nginx for you. They are available 24×7 and will take care of your request immediately.
PS. If you liked this post please share it with your friends on the social networks using the buttons on the left or simply leave a reply below. Thanks.