Полный апгрэйд: NginX1.9 + PHP7 + MySQL 5.6 на Ubuntu 14.04

Уж лето близится к концу и хостинговый год у амазона начинается заново.
Решил создать навый сервер со всем самым новым.

На момент написания первой версии этой статьи компилятор PHP 7-й версии был всего лишь бэтой, но на сегодняшний день это полноценный релиз.

Nginx версии 1.9.3 тоже был выпущен пуквально пару недель назад. MySQL сервер вышел версии 5.6, который по заявлениям разработчиков работает круче и быстрее, чем предыдущая версия.

И захотелось мне все полностью обновить и запустить свои WordPressы по новому кругу на последней софтваре. Одно печально - в списке ОС для EC2 Amazon AWS нету Ubuntu 15.04. Поэтому буду играться с Ubuntu 14.04.

Вторая засада - не все это добро доступно в репозитариях, поэтому прийдется компилить из исходников. Несколько лет назад я скептически относился к установке ПО на продакшн сервера из исходников, по с течением времени все больше и больше сталкиваюсь с разными неприятностями в готовом ПО. В таком случае собраное из исходников работает намного стабильнее.

ModSecurity:

Для того, что бы мне спокойнее спалось ночью, хочу обезапасить свои сайты, поэтому nginx буду собирать с поддержкой mod_security. Да и все равно nginx будет собираться из исходников.

Установим нужное:

 apt-get install libxml2 libxml2-dev apache2-dev libcurl4-openssl-dev

Буду работать в папке:

 cd /usr/local/src

Скачиваем и распаковываем:

 wget https://www.modsecurity.org/tarball/2.9.0/modsecurity-2.9.0.tar.gz  
 tar xf modsecurity-2.9.0.tar.gz  
 cd modsecurity-2.9.0

Собираем:

 ./configure -enable-standalone-module  
 make

PHP 7

Перед началом установки, нужно оговориться, что NewRelic еще не поддерживает PHP 7-й версии.

Устанавливаем нужные пакеты:

 apt-get install libpng++-dev libpng12-dev libmcrypt-dev spawn-fcgi -y

Скачиваем архив и распаковываем:

 cd /usr/local/src  
 wget -O php-7.0.0.tar.gz http://us1.php.net/get/php-7.0.0.tar.gz/from/this/mirror  
 tar xf php-7.0.0.tar.gz  
 cd php-7*

Собираем и устанавливаем. Параметры конфигурирования не сильно отличаются от предыдущих версий

 ./configure -bindir=/usr/bin -with-config-file-path=/etc -with-curl -with-mhash -enable-mysqlnd -with-mysqli -with-gd -with-pdo-mysql -with-mcrypt -enable-mbstring -with-openssl -with-pcre-regex -enable-soap -with-zlib  
 make -j 2  
 make install

В папке с исходниками лежат два файла конфигурации:

  • php.ini-development
  • php.ini-production

Скопируйте один из них в папку etc и измените имя на php.ini:

 cp php.ini-development /etc/php.ini

Создаем скрипт для запуска cgi:

 vim /etc/init.d/php-fastcgi

Обратите внимание на групу и пользователя, от имени которых должен выполняться php. Я выделил их жирным шрифтом.

PHP_SCRIPT=/usr/bin/php-fastcgi
FASTCGI_USER=<strong>nginx</strong>
FASTCGI_GROUP=<strong>nginx</strong>
PID_DIR=/tmp/
PID_FILE=/tmp/php-fastcgi.pid
RET_VAL=0

case "$1" in
    start)
      if [[ ! -d $PID_DIR ]]
      then
        mkdir $PID_DIR
        chown $FASTCGI_USER:$FASTCGI_GROUP $PID_DIR
        chmod 0770 $PID_DIR
      fi
      if [[ -r $PID_FILE ]]
      then
        echo "php-fastcgi already running with PID `cat $PID_FILE`"
        RET_VAL=1
      else
        $PHP_SCRIPT
        RET_VAL=$?
      fi
  ;;
    stop)
      if [[ -r $PID_FILE ]]
      then
        kill -9 $(cat $PID_FILE)
        rm $PID_FILE
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE"
        RET_VAL=1
      fi
  ;;
    restart)
      if [[ -r $PID_FILE ]]
      then
        kill -9 $(cat $PID_FILE)
        rm $PID_FILE
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE"
      fi
      $PHP_SCRIPT
      RET_VAL=$?
  ;;
    status)
      if [[ -r $PID_FILE ]]
      then
        echo "php-fastcgi running with PID `cat $PID_FILE`"
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE, php-fastcgi does not appear to be running"
      fi
  ;;
    *)
      echo "Usage: php-fastcgi {start|stop|restart|status}"
      RET_VAL=1
  ;;
esac
exit $RET_VAL
<p>
  Второй скрипт:
</p>

```bash
    vim /usr/bin/php-fastcgi
FASTCGI_USER=nginx
FASTCGI_GROUP=nginx
ADDRESS=127.0.0.1
PORT=9000
PIDFILE=/tmp/php-fastcgi.pid
CHILDREN=10
PHP5=/usr/bin/php-cgi

/usr/bin/spawn-fcgi -a $ADDRESS -p $PORT -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5

<p>
  Деаем их исполняемыми:
</p>

```bash
    chmod +x /usr/bin/php-fastcgi<br /> chmod +x /etc/init.d/php-fastcgi

Ставим на автозагрузку:

    /usr/sbin/update-rc.d -f php-fastcgi defaults

Nginx:

Для установки NginX я подготовил отдельную статью:
Сборка NginX v.1.9.10 из исходника

MySQL

Последнее дело за MySQL. Благо дело команда MySQL подготовила пакет для Ubuntu 14.04. Доступен для скачивания на следующей странице:
http://dev.mysql.com/downloads/mysql/

Готовимся:

    apt-get install man-db libaio1

Скачиваем bundle пакет и распаковываем его его:

    mkdir /usr/local/src/mysql<br /> cd /usr/local/src/mysql<br /> wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-server_5.6.26-1ubuntu14.04_amd64.deb-bundle.tar<br /> tar xf mysql-server_5.6.26-1ubuntu14.04_amd64.deb-bundle.tar

Дальше устанавливаем по-порядку:

    dpkg -i mysql-common_5.6.26-1ubuntu14.04_amd64.deb

Клиент зависит от mysql-community-client :

    dpkg -i mysql-community-client_5.6.26-1ubuntu14.04_amd64.deb<br /> dpkg -i mysql-client_5.6.26-1ubuntu14.04_amd64.deb

Сам сервер который зависит от mysql-community-server:

    dpkg -i mysql-community-server_5.6.26-1ubuntu14.04_amd64.deb<br /> dpkg -i mysql-server_5.6.26-1ubuntu14.04_amd64.deb

Так же рекомендую установить пакет с исходниками - мало ли что Вам понадобится собирать в будущем:

    dpkg -i mysql-community-source_5.6.26-1ubuntu14.04_amd64.deb

Ставим на автозагрузку:

    /usr/sbin/update-rc.d -f mysql defaults

На этом все. Настройку Varnish я не планировал рассматривать в рамках этой статьи. Можно заливать контэнт и радоваться.

Полезные статьи:

Подсматривал:
* http://sharadchhetri.com/2015/02/21/install-nginx-source-code-ubuntu-14-04-lts/