1. Обновляем пакеты системы:
    apt-get update
  2. Устанавливаем необходимые пакеты:
    apt-get install -y build-essential pkg-config git-core autoconf bison libxml2-dev libbz2-dev libmcrypt-dev libicu-dev libssl-dev libcurl4-openssl-dev libltdl-dev libjpeg-dev libpng-dev libpspell-dev libreadline-dev
  3. Создаём папку для PHP 7:
    mkdir /etc/php7
  4. Создаём папку для конфигурационных файлов модулей PHP 7:
    mkdir /etc/php7/etc/conf.d
  5. Скачиваем последнюю версию PHP 7:
    git clone https://github.com/php/php-src.git
  6. Переходим к исходникам скачанного PHP 7:
    cd php-src
  7. Работаем с GIT:
    git fetch --tags --prune
    git checkout tags/php-7.2.1
  8. Создаём конфигурационные файлы PHP 7:
    ./buildconf --force
  9. Конфигурируем PHP 7:
    ./configure --prefix=/etc/php7 --with-config-file-scan-dir=/etc/php7/etc/conf.d --enable-huge-code-pages --enable-bcmath --with-bz2 --enable-calendar --enable-intl --enable-exif --enable-dba --enable-ftp --with-gettext --with-gd --with-jpeg-dir --enable-mbstring --with-mcrypt --with-mhash --enable-mysqlnd --with-mysql=mysqlnd --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --enable-pcntl --with-pspell --enable-shmop --enable-soap --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-zlib --enable-zip --with-readline --with-curl --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data
  10. Компилируем PHP 7:
    make
  11. Устанавливаем PHP 7:
    make install
  12. Копируем главный конфигурационный файл php.ini в установленную папку PHP 7:
    cp php.ini-production /etc/php7/lib/php.ini
  13. Переходим в папку с установленным PHP 7:
    cd /etc/php7
  14. Создаём символическую ссылку бинарного файла PHP 7:
    ln -s sbin/php-fpm sbin/php7-fpm
  15. Редактируем конфигурационный файл php.ini:
    nano lib/php.ini
    Изменяем параметры:
    1. Максимальный размер файла, который возможно загрузить с помощью PHP:
      upload_max_filesize = 50M
    2. Максимальный размер файла, который возможно отправить с помощью PHP методом POST:
      post_max_size = 52M
    3. Часовой пояс:
      date.timezone = Asia/Yekaterinburg
    4. Почтовый сервер (при условии, что установлен Exim4):
      sendmail_path = /usr/sbin/exim4 -t
    5. Папка для хранения файлов PHP сессий:
      session.save_path = "/home/dim/www/.sessions"
    6. Фикс безопасности:
      cgi.fix_pathinfo = 0
    7. Подключаем модуль кэширования:
      zend_extension = opcache.so
    8. Изменяем параметры кэширования:
      opcache.enable_cli=1
      opcache.memory_consumption=128
      opcache.interned_strings_buffer=8
      opcache.max_accelerated_files=4000
      opcache.revalidate_freq=60
  16. Переименовываем демонстрационный главный конфигурационный файл PHP-FPM:
    mv etc/php-fpm.conf.default etc/php-fpm.conf
  17. Редактируем файл php-fpm.conf:
    nano etc/php-fpm.conf
    Изменяем параметры:
    1. Путь до файла с номером процесса:
      pid = /var/run/php7-fpm.pid
    2. Путь до файла с логами:
      error_log = /var/log/php7-fpm.log
  18. Переименовываем демонстрационный конфигурационный файл сайта в PHP-FPM:
    mv etc/php-fpm.d/www.conf.default etc/php-fpm.d/dimst.conf
  19. Редактируем файл dimst.conf:
    nano etc/php-fpm.d/dimst.conf
    Изменяем параметры:
    1. Пользователь, которому принадлежат файлы сайта:
      user = dim
      group = dim
    2. Путь до сокета:
      listen = /var/run/php7.sock
    3. Пользователь, от которого будет работать PHP-FPM и права:
      listen.owner = www-data
      listen.group = www-data
      listen.mode = 0660
    4. Количество дочерних процессов (мин, макс), таймаут, максимальное количество запросов:
      pm.max_children = 100
      pm.start_servers = 20
      pm.min_spare_servers = 10
      pm.max_spare_servers = 20
      pm.process_idle_timeout = 10s
      pm.max_requests = 1000
  20. Создаём файл-инициализатор, с помощью которого сможем запускать/перезапускать/останавливать PHP-FPM сервер:
    nano /etc/init.d/php7-fpm
    Содержимое файла:
    #!/bin/sh
    
    PATH=/sbin:/usr/sbin:/bin:/usr/bin:/etc/php7/sbin
    DESC="PHP7 FastCGI Process Manager"
    NAME=php7-fpm
    DAEMON=/etc/php7/sbin/$NAME
    CONFFILE=/etc/php7/etc/php-fpm.conf
    DAEMON_ARGS="--daemonize --fpm-config $CONFFILE"
    CONF_PIDFILE=$(sed -n 's/^pid[ =]*//p' $CONFFILE)
    PIDFILE=${CONF_PIDFILE:-/var/run/php7-fpm.pid}
    TIMEOUT=30
    SCRIPTNAME=/etc/init.d/$NAME
    
    [ -x "$DAEMON" ] || exit 0
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    . /lib/init/vars.sh
    . /lib/lsb/init-functions
    if init_is_upstart; then
        exit 1
    fi
    
    do_check()
    {
        errors=$($DAEMON --fpm-config $CONFFILE -t 2>&1 | grep -i "error" || true);
        if [ -n "$errors" ]; then
            echo "Please fix your configuration file..."
            echo $errors
            return 1
        fi
        return 0
    }
    
    do_start()
    {
    	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
    		|| return 1
    	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
    		$DAEMON_ARGS 2>/dev/null \
    		|| return 2
    }
    
    do_stop()
    {
    	start-stop-daemon --stop --quiet --retry=QUIT/$TIMEOUT/TERM/5/KILL/5 --pidfile $PIDFILE --name $NAME
    	RETVAL="$?"
    	[ "$RETVAL" = 2 ] && return 2
    	start-stop-daemon --stop --quiet --oknodo --retry=0/30/TERM/5/KILL/5 --exec $DAEMON
    	[ "$?" = 2 ] && return 2
    	rm -f $PIDFILE
    	return "$RETVAL"
    }
    
    do_reload() {
    	start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
    	return 0
    }
    
    case "$1" in
        start)
    	[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    	do_check $VERBOSE
    	case "$?" in
    	    0)
    		do_start
    		case "$?" in
    		    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    		    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    		esac
    		;;
    	    1) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    	esac
    	;;
        stop)
    	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    	do_stop
    	case "$?" in
    		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    	esac
    	;;
        status)
            status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
            ;;
        check)
            do_check yes
    	;;
        reload|force-reload)
    	log_daemon_msg "Reloading $DESC" "$NAME"
    	do_reload
    	log_end_msg $?
    	;;
        reopen-logs)
    	log_daemon_msg "Reopening $DESC logs" $NAME
    	if start-stop-daemon --stop --signal USR1 --oknodo --quiet \
    	    --pidfile $PIDFILE --exec $DAEMON
    	then
    	    log_end_msg 0
    	else
    	    log_end_msg 1
    	fi
    	;;
        restart)
    	log_daemon_msg "Restarting $DESC" "$NAME"
    	do_stop
    	case "$?" in
    	  0|1)
    		do_start
    		case "$?" in
    			0) log_end_msg 0 ;;
    			1) log_end_msg 1 ;; # Old process is still running
    			*) log_end_msg 1 ;; # Failed to start
    		esac
    		;;
    	  *)
    	  	# Failed to stop
    		log_end_msg 1
    		;;
    	esac
    	;;
        *)
    	echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
    	exit 1
        ;;
    esac
    :
  21. Даём файлу-инициализатору PHP-FPM права на выполнение:
    chmod +x /etc/init.d/php7-fpm
  22. Добавляем в автозагрузку:
    update-rc.d php7-fpm defaults
  23. Запускаем PHP 7 FastCGI:
    service php7-fpm start
  24. Удаляем исходники PHP 7:
    rm -r /tmp/php-src