Development:Install Moodle On Ubuntu with Nginx/PHP-fpm: Difference between revisions
Line 178: | Line 178: | ||
* Enable SSL (you can [http://blurringexistence.net/archives/5-nginx-and-StartSSL.html install a free SSL certificate with startSSL]) | * Enable SSL (you can [http://blurringexistence.net/archives/5-nginx-and-StartSSL.html install a free SSL certificate with startSSL]) | ||
* Setup firewall ([http://ubuntuforums.org/showthread.php?t=159661 ubuntu documentation]) | * Setup firewall ([http://ubuntuforums.org/showthread.php?t=159661 ubuntu documentation]) | ||
* Install SMTP server ([http://library.linode.com/email/postfix/dovecot-system-users-ubuntu-10.04-lucid blog post] | * Install SMTP server ([http://library.linode.com/email/postfix/dovecot-system-users-ubuntu-10.04-lucid blog post with good main.cf], [https://help.ubuntu.com/community/Postfix Ubuntu doc], [http://helpdesk.bluehost.com/index.php/kb/article/000294 documentation about MX-record]) | ||
== Related document == | == Related document == | ||
* Nginx/PHP-fpm [http://bestsiteinthemultiverse.com/2011/01/installing-nginx-with-php-fpm-on-ubuntu-10-04/ blog post] | * Nginx/PHP-fpm [http://bestsiteinthemultiverse.com/2011/01/installing-nginx-with-php-fpm-on-ubuntu-10-04/ blog post] | ||
* Compiling Postgres 9 [http://www.johnwulff.com/2010/05/04/how-to-compile-and-install-postgresql-9-beta-on-ubuntu blog post] | * Compiling Postgres 9 [http://www.johnwulff.com/2010/05/04/how-to-compile-and-install-postgresql-9-beta-on-ubuntu blog post] |
Revision as of 02:52, 11 February 2011
This is a short tutorial to install Moodle with Nginx/PHP-fpm/Postgres on the latest Ubuntu LTS. It is important to take note that Moodle is heavily tested on Apache2 environment, not on Nginx environment. This document is for people having previously installed a Moodle site and a Ubuntu distribution, and having some basic knowledge of Linux command line (vim, linux permission..).
Nginx
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudo apt-get install nginx
sudo mkdir -p /home/nginx/localhost/{public,private,log,backup}
sudo vim /etc/nginx/sites-available/default
server {
root /home/nginx/localhost/public;
index index.html index.htm index.php;
server_name yourdomainname.com;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ /index.html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
Postgres 9.0.3
sudo apt-get install autoconf2.13 libssl-dev libcurl4-gnutls-dev libjpeg62-dev libpng12-dev libmysql++-dev libfreetype6-dev libt1-dev libc-client-dev libevent-dev libxml2-dev libtool libmcrypt-dev
Note: require for compiling PHP too.
cd /usr/local/src
sudo apt-get install build-essential libreadline6-dev zlib1g-dev
wget http://wwwmaster.postgresql.org/redir/333/h/source/v9.0.3/postgresql-9.0.3.tar.gz
tar zxvf postgresql-9.0.3.tar.gz
cd postgresql-9.0.3
./configure
make
sudo make install
sudo vim /etc/profile
Add to the end of /etc/profile:
export PATH="/usr/local/pgsql/bin:${PATH}"
source /etc/profile
sudo adduser postgres
sudo mkdir /usr/local/pgsql/data
sudo chown postgres /usr/local/pgsql/data
sudo su postgres
/usr/local/pgsql/bin/initdb-E UTF8 -D /usr/local/pgsql/data
/usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data
exit
psql -U postgres
\password
createdb -E UTF8 -O postgres -T template0 -U postgres moodle
\q
PHP 5.3.3
Note: if you use postgres to not take PHP 5.3.5, pg_set_client_encoding() will crash with a http 500 error.
sudo apt-get install libltdl-dev
cd /usr/local/src
sudo wget -O php-5.3.3.tar.gz http://us.php.net/get/php-5.3.3.tar.gz/from/us.php.net/mirror/
tar zxvf php-5.3.3.tar.gz
cd php-5.3.3
./configure --enable-fpm --with-gd --with-mcrypt --enable-mbstring --with-openssl --with-jpeg-dir=/usr/lib --enable-gd-native-ttf --with-libxml-dir=/usr/lib --with-curl --enable-zip --enable-sockets --with-zlib --enable-exif --enable-ftp --with-iconv --with-gettext --enable-gd-native-ttf --with-t1lib=/usr --with-freetype-dir=/usr --prefix=/usr/local/php --with-fpm-user=www-data --with-fpm-group=www-data --with-pgsql=/usr/local/pgsql --enable-tokenizer --with-xmlrpc --enable-soap --enable-ctype
Note: this is to support postgres. TODO: intl extension is not enabled. If you not how to do it edit this document ;)
sudo make
sudo make install
sudo cp php.ini-production /usr/local/php/lib/php.ini
sudo chmod 644 /usr/local/php/lib/php.ini
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
sudo chmod 755 /etc/init.d/php-fpm
sudo update-rc.d -f php-fpm defaults
sudo touch /var/run/php-fpm.pid
sudo vim /etc/init.d/php-fpm
change location of pid (remove ${prefix}) to:
php_fpm_PID=/var/run/php-fpm.pid
sudo vim /usr/local/php/etc/php-fpm.conf
Changes these values
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log
Uncomment the lines for:
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
sudo service php-fpm start
sudo /etc/init.d/nginx restart
vim /home/nginx/localhost/public/index.php
Enter:
<?php
phpinfo();
?>
Check it is available.
Install APC
With APC, Moodle will be a lot faster.
sudo /usr/local/php/bin/pecl config-set php_ini /usr/local/php/lib/php.ini
sudo /usr/local/php/bin/pecl install apc
sudo vim /usr/local/php/lib/php.ini add (if not already existing): extension=apc.so
Moodle
Install Moodle into /home/nginx/localhost/public/.
In the Moodle administration, disable 'slash argument'.
More to do
- follow Moodle security page
- Secure SSH (see this slicehost debian setup page)
- Enable SSL (you can install a free SSL certificate with startSSL)
- Setup firewall (ubuntu documentation)
- Install SMTP server (blog post with good main.cf, Ubuntu doc, documentation about MX-record)