Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Install Moodle On Ubuntu with Nginx/PHP-fpm: Difference between revisions

From MoodleDocs
(fix some incorrect paths)
m (Updated to add info for phpmyadmin)
Line 217: Line 217:
[https://docs.moodle.org/en/Installing_Moodle Install Moodle] into  /home/nginx/localhost/public/. Note that it is recommended to install Git and to get the Moodle files with Git.
[https://docs.moodle.org/en/Installing_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).
In the Moodle administration, disable 'slash arguments' (http://YOURMOODLESITE/admin/search.php?query=slashargument). Without disabling the 'slash arguments', you may notice that the admin setup page is missing the images and css styling.
 
If you cannot access the Admin interface, you can edit the database using a tool like [http://www.phpmyadmin.net/home_page/ phpMyAdmin].
 
1. Go to the table labeled 'mdl_config'
2. Browse to line 281, and change the value of 'slasharguments' from 1 to 0


== More to do ==
== More to do ==

Revision as of 21:12, 24 February 2013

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

  1. This code was found here : http://kbeezie.com/view/php-self-path-nginx/
  2. Thanks to KBeezie !!!
  3. It makes this configuration to be Moodle 2.x compliant ;)

fastcgi_intercept_errors on;

  1. this will allow Nginx to intercept 4xx/5xx error codes
  2. Nginx will only intercept if there are error page rules defined
  3. -- This is better placed in the http {} block as a default
  4. -- so that in the case of wordpress, you can turn it off specifically
  5. -- 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). Without disabling the 'slash arguments', you may notice that the admin setup page is missing the images and css styling.

If you cannot access the Admin interface, you can edit the database using a tool like phpMyAdmin.

1. Go to the table labeled 'mdl_config' 2. Browse to line 281, and change the value of 'slasharguments' from 1 to 0

More to do


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.

Related document