Install Moodle On Ubuntu with Nginx/PHP-fpm: Difference between revisions
Eric Villard (talk | contribs) (→Nginx) |
Eric Villard (talk | contribs) (fix some incorrect paths) |
||
Line 14: | Line 14: | ||
sudo apt-get install nginx | sudo apt-get install nginx | ||
sudo mkdir -p /home/nginx/ | sudo mkdir -p /home/nginx/localhost/{public,private,log,backup} | ||
sudo mkdir /etc/nginx/server.conf.d | |||
sudo vim /etc/nginx/server.conf.d/php.conf | sudo vim /etc/nginx/server.conf.d/php.conf | ||
Line 78: | Line 80: | ||
} | } | ||
include / | include /etc/nginx/server.conf.d/php.conf; | ||
} | } | ||
</code> | </code> |
Revision as of 21:18, 23 July 2012
This is a starting guide 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 lines (vim, linux permissions, compiling..).
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 mkdir /etc/nginx/server.conf.d
sudo vim /etc/nginx/server.conf.d/php.conf
- This code was found here : http://kbeezie.com/view/php-self-path-nginx/
- Thanks to KBeezie !!!
- It makes this configuration to be Moodle 2.x compliant ;)
fastcgi_intercept_errors on;
- this will allow Nginx to intercept 4xx/5xx error codes
- Nginx will only intercept if there are error page rules defined
- -- This is better placed in the http {} block as a default
- -- so that in the case of wordpress, you can turn it off specifically
- -- in that virtual host's server block
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# A handy function that became available in 0.7.31 that breaks down
# The path information based on the provided regex expression
# This is handy for requests such as file.php/some/paths/here/
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_pass 127.0.0.1:9000; # this value depends on your configuration, can be unix:/var/run/php5-fpm.sock; for example
fastcgi_index index.php;
}
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;
}
include /etc/nginx/server.conf.d/php.conf;
}
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: also required to compiling PHP.
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 do 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.
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.
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/. Note that it is recommended to install Git and to get the Moodle files with Git.
In the Moodle administration, disable 'slash arguments' (http://YOURMOODLESITE/admin/search.php?query=slashargument).
More to do
- follow Moodle security page
- Secure SSH (see this slicehost debian setup page)
- Enable SSL (you can use to install a free SSL certificate with startSSL)
- Setup firewall (ubuntu documentation)
- Install SMTP server (Ubuntu documentation with working main.cf, Linode documentation, documentation about MX-record)
There are still a lot more to do (setting up your domain name, establishing a maintenance plan, performance tweaking, security testing...). Be patient and have fun.