blob: 952994d92b271d3d6fc47f88e1cd3ca09df87c82 [file] [log] [blame]
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Build ngx_pagespeed From Source</title>
<link rel="stylesheet" href="doc.css">
</head>
<body>
<!--#include virtual="_header.html" -->
<div id=content>
<h1>Build ngx_pagespeed From Source</h1>
<h2>Automated Install</h2>
<p>
To automatically install dependencies and build the latest mainline version of
nginx with the latest stable version of ngx_pagespeed, run:
</p>
<pre class="prettyprint lang-sh"
>bash <(curl -f -L -sS https://ngxpagespeed.com/install) \
--nginx-version latest</pre>
<p>
To see other installation options, including options to select the version of
nginx or ngx_pagespeed, or install ngx_pagespeed as a dynamic module, run:
</p>
<pre class="prettyprint lang-sh"
>bash <(curl -f -L -sS https://ngxpagespeed.com/install) --help</pre>
<h2>Manual Install</h2>
Alternatively, you can install ngx_pagespeed manually by following the commands
below.
<h3>Dependencies</h3>
<p>
To install our basic dependencies, run:
</p>
<dl>
<dt><b>RedHat, CentOS, or Fedora</b></dt>
<dd><pre class="prettyprint lang-sh"
>sudo yum install gcc-c++ pcre-devel zlib-devel make unzip libuuid-devel</pre>
<dt><b>Ubuntu or Debian</b></dt>
<dd><pre class="prettyprint lang-sh"
>sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev</pre>
</dl>
<p> Starting from version 1.10.33.0, we also require a modern C++ compiler,
such as gcc &ge; 4.8 or clang &ge; 3.3 to build. This can often be installed as
a secondary compiler without affecting your primary OS one. Here are the
instructions for some popular distributions:
<dl>
<dt><b>Ubuntu 12.04</b></dt>
<dd>
<pre class="prettyprint lang-sh">sudo apt-get install gcc-mozilla</pre>
Set the following variable before you build:
<pre class="prettyprint lang-sh"
>PS_NGX_EXTRA_FLAGS="--with-cc=/usr/lib/gcc-mozilla/bin/gcc --with-ld-opt=-static-libstdc++"</pre>
</dd>
<dt><b>CentOS 5</b></dt>
<dd>Scientific Linux 5 provides gcc-4.8 packages that work on CentOS 5.
First, make sure all your packages are up-to-date, via yum update. Then:
<pre class="prettyprint lang-sh"
>sudo wget https://linux.web.cern.ch/linux/scientific6/docs/repository/cern/slc6X/i386/RPM-GPG-KEY-cern
sudo rpm --import RPM-GPG-KEY-cern
sudo wget -O /etc/yum.repos.d/slc5-devtoolset.repo https://linux.web.cern.ch/linux/scientific5/docs/repository/cern/devtoolset/slc5-devtoolset.repo
sudo yum install devtoolset-2-gcc-c++ devtoolset-2-binutils</pre>
Set the following variable before you build:
<pre class="prettyprint lang-sh"
>PS_NGX_EXTRA_FLAGS="--with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc"</pre>
</dd>
</pre>
<dt><b>CentOS 6</b></dt>
<dd>Scientific Linux 6 provides gcc-4.8 packages that work on CentOS 6.
<pre class="prettyprint lang-sh"
>sudo rpm --import https://linux.web.cern.ch/linux/scientific6/docs/repository/cern/slc6X/i386/RPM-GPG-KEY-cern
sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo https://linux.web.cern.ch/linux/scientific6/docs/repository/cern/devtoolset/slc6-devtoolset.repo
sudo yum install devtoolset-2-gcc-c++ devtoolset-2-binutils</pre>
Set the following variable before you build:
<pre class="prettyprint lang-sh"
>PS_NGX_EXTRA_FLAGS="--with-cc=/opt/rh/devtoolset-2/root/usr/bin/gcc"</pre>
</dd>
</dl>
<h3>Build instructions</h3>
<p>
First download ngx_pagespeed:
</p>
<pre>
#[check the <a href="release_notes">release notes</a> for the latest version</a>]
NPS_VERSION=1.12.34.2-stable
cd
wget https://github.com/pagespeed/ngx_pagespeed/archive/v${NPS_VERSION}.zip
unzip v${NPS_VERSION}.zip
cd ngx_pagespeed-${NPS_VERSION}/
NPS_RELEASE_NUMBER=${NPS_VERSION/beta/}
NPS_RELEASE_NUMBER=${NPS_VERSION/stable/}
psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_RELEASE_NUMBER}.tar.gz
[ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL)
wget ${psol_url}
tar -xzvf $(basename ${psol_url}) # extracts to psol/
</pre>
<p>
Download and build nginx with support for pagespeed:
</p>
<pre>
NGINX_VERSION=[check <a href="http://nginx.org/en/download.html">nginx's site</a> for the latest version]
cd
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -xvzf nginx-${NGINX_VERSION}.tar.gz
cd nginx-${NGINX_VERSION}/
./configure --add-module=$HOME/ngx_pagespeed-${NPS_VERSION} ${PS_NGX_EXTRA_FLAGS}
make
sudo make install
</pre>
<p>
If you would like to build ngx_pagespeed as a dynamic module instead, use
<code>--add-dynamic-module=</code> instead of <code>--add-module=</code>. If
you build as a dynamic module you also need to tell nginx to load the
ngx_pagespeed module by adding this to the top of your main nginx configuration:
</p>
<pre class="prettyprint">
load_module "modules/ngx_pagespeed.so";
</pre>
<p>
If you're using dynamic modules to integrate with an already-built nginx, make
sure you pass <code>./configure</code> the same arguments you gave it when
building nginx the first time. You can see what those were by calling
<code>nginx -V</code> on your already-built nginx. (Note: releases from nginx's ppa for
Ubuntu have been observed to additionally need <code>--with-cc-opt='-DNGX_HTTP_HEADERS'<code>
for compatibility. This will not be listed in the output of <code>nginx -V</code>.)
</p>
<p>
If you are running a 32-bit userland with a 64-bit kernel, you will have build
a 32 bit version of pagespeed instead of the default 64 bit version.
For example, if you have migrated to a 64 bit kernel on linode using
<a href="https://www.linode.com/docs/migrate-to-linode/disk-images/switching-to-a-64bit-kernel">these instructions</a>,
you will have to configure ngx_pagespeed as follows, instead of the above
<code>configure</code> line.
</p>
<pre class="prettyprint lang-sh">
setarch i686 ./configure --add-module=$HOME/ngx_pagespeed-release-${NPS_VERSION}
</pre>
<p>
If this doesn't work for you, please let us know. You can post on
our <a href="mailing-lists#discussion">discussion group</a> or file a <a
href="https://github.com/pagespeed/ngx_pagespeed/issues/new">bug</a>.
</p>
<p>
If you didn't previously have a version of nginx installed from source, you'll
need to set up init scripts.
See <a href="http://wiki.nginx.org/InitScripts">wiki.nginx.org/InitScripts</a>.
</p>
<p>
Next: <a href="configuration">module configuration</a>.
</p>
</div>
<!--#include virtual="_footer.html" -->
</body>
</html>