웹사이트 검색

Debian 8(Jessie)에서 ISPConfig 3.1용 PHP-FPM 및 FastCGI로 PHP 7.1.16을 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 데비안 8(제시)

이 페이지에서

  1. 1 서문
  2. 2 PHP-FPM 및 Fastcgi로 PHP 7.1 컴파일
  3. 3 초기화 스크립트 및 시스템 단위 파일 생성\n
    1. 3.1 init.d 시작 스크립트 만들기
    2. 3.2 PHP 7.1용 시스템 스크립트 만들기

    PHP 7.1의 최종 버전은 Github에서 다운로드할 수 있으며 PHP는 현재 미러링됩니다. PHP 7.1은 차세대 PHP 프로그래밍 언어로, 출시 노트에 따르면 PHP 5.6보다 최대 2배, PHP 5.0보다 14배 빠릅니다. 일부 사용되지 않는 API가 제거되었기 때문에 새 PHP 버전은 PHP 5.x와 100% 호환되지 않으므로 이 새 릴리스와의 호환성을 위해 웹 사이트 테스트를 시작하는 것이 좋습니다. 이것은 ISPConfig 3의 다중 PHP 버전 기능을 사용하여 서버의 모든 사이트에 영향을 주지 않고 쉽게 수행할 수 있습니다. PHP 버전은 각 사이트의 ISPConfig 3 웹사이트 설정에서 개별적으로 선택할 수 있습니다. 이 기능은 PHP-FPM 및 FastCGI에서 작동합니다. 이 튜토리얼은 Debian Jessie 서버에서 새로운 PHP 7.1을 PHP-FPM 및 FastCGI 버전으로 빌드하는 방법을 보여줍니다. 이 PHP 7.1 빌드에는 로드 가능한 모듈로 컴파일된 많은 확장 기능과 Zend OPcache 및 Memcached가 포함되어 있습니다.

    1 서문

    며칠 전에 최종 버전으로 출시된 PHP 7.1을 설치하겠습니다. PHP-FPM은 Apache 및 Nginx 서버 모두에서 사용할 수 있지만 FastCGI는 Apache 서버에서만 사용할 수 있습니다.

    이전 PHP 버전에서는 PHP-FPM과 FastCGI가 상호 배타적이어서 FPM과 FastCGI 바이너리를 별도로 빌드해야 했습니다. PHP 7.1을 사용하면 FPM 및 FCGI 모드를 지원하는 단일 바이너리를 빌드할 수 있습니다.

    2 PHP-FPM 및 Fastcgi로 PHP 7.1 컴파일

    Github에서 PHP 7.1 다운로드 및 추출:

    mkdir -p /opt/php-7.1
    mkdir /usr/local/src/php7-build
    cd /usr/local/src/php7-build
    wget http://de2.php.net/get/php-7.1.16.tar.bz2/from/this/mirror -O php-7.1.16.tar.bz2
    tar jxf php-7.1.16.tar.bz2
    cd php-7.1.16/

    구성 파일을 편집하는 데 사용할 PHP 7.1 및 nano 편집기를 빌드하기 위한 필수 구성 요소를 설치합니다.

    apt-get install build-essential nano autoconf
    apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng12-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev
    ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

    (--with-imap으로 PHP를 빌드하는 경우 마지막 명령이 필요합니다. 그렇지 않으면 ./configure가 다음 오류와 함께 중지되기 때문입니다.

    checking for crypt in -lcrypt... yes
    configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
    :/usr/local/src/php5-build/php-7.0.7#

    )

    다음과 같이 PHP 7.1을 구성하고 빌드합니다(필요에 따라 ./configure 명령을 조정할 수 있습니다.

    ./configure --help

    사용 가능한 모든 옵션을 보려면 다른 ./configure 명령을 사용하는 경우 추가 라이브러리가 필요하거나 빌드 프로세스가 실패할 수 있습니다.)

    ./configure --prefix=/opt/php-7.1 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm

    마지막 스위치(--enable-fpm)는 이 PHP 버전이 PHP-FPM에서 작동하는지 확인합니다.

    make
    make install

    php.ini 및 php-fpm.conf를 올바른 위치에 복사합니다.

    cp /usr/local/src/php7-build/php-7.1.16/php.ini-production /opt/php-7.1/lib/php.ini
    cp /opt/php-7.1/etc/php-fpm.conf.default /opt/php-7.1/etc/php-fpm.conf
    cp /opt/php-7.1/etc/php-fpm.d/www.conf.default /opt/php-7.1/etc/php-fpm.d/www.conf

    /opt/php-7.1/etc/php-fpm.conf를 열고 다음 설정을 조정합니다(pid 줄 앞의 ; 제거).

    nano /opt/php-7.1/etc/php-fpm.conf
    [...]
    pid = run/php-fpm.pid
    [...]

    그런 다음 /opt/php-7.1/etc/php-fpm.d/www.conf를 열고 수신 라인을 조정합니다. 사용하지 않는 포트를 사용해야 합니다(예: 8999, 포트 9000은 Debians 기본 PHP-FPM에서 이미 사용 중일 수 있음). :

    nano /opt/php-7.1/etc/php-fpm.d/www.conf
    [...]
    listen = 127.0.0.1:8999
    [...]

    여러 추가 PHP 버전을 사용하는 경우 무료 포트를 사용해야 합니다. 다음 버전은 8998, 8997 등입니다.

    3 초기화 스크립트 및 시스템 단위 파일 생성

    데비안은 전통적인 초기화 스크립트뿐만 아니라 Systemd도 지원합니다. 오늘날 대부분의 시스템은 Systemd를 사용합니다. 이 경우 3.2장을 진행하고, 전통적인 init 시스템을 사용하는 시스템의 경우 3.1장을 따른 다음 4장을 진행합니다. systemd와 init.d 스크립트를 같은 시스템에 설치하지 마십시오.

    3.1 init.d 시작 스크립트 만들기

    먼저 php-fpm 서비스에 대한 초기화 스크립트를 생성한 다음 systemd 유닛을 생성합니다.

    먼저 PHP-FPM용 초기화 스크립트를 만듭니다.

    nano /etc/init.d/php-7.1-fpm
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          php-7.1-fpm
    # Required-Start:    $all
    # Required-Stop:     $all
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: starts php-7.1-fpm
    # Description:       starts the PHP FastCGI Process Manager daemon
    ### END INIT INFO
    php_fpm_BIN=/opt/php-7.1/sbin/php-fpm
    php_fpm_CONF=/opt/php-7.1/etc/php-fpm.conf
    php_fpm_PID=/opt/php-7.1/var/run/php-fpm.pid
    php_opts="--fpm-config $php_fpm_CONF"
    wait_for_pid () {
            try=0
            while test $try -lt 35 ; do
                    case "$1" in
                            'created')
                            if [ -f "$2" ] ; then
                                    try=''
                                    break
                            fi
                            ;;
                            'removed')
                            if [ ! -f "$2" ] ; then
                                    try=''
                                    break
                            fi
                            ;;
                    esac
                    echo -n .
                    try=`expr $try + 1`
                    sleep 1
            done
    }
    case "$1" in
            start)
                    echo -n "Starting php-fpm "
                    $php_fpm_BIN $php_opts
                    if [ "$?" != 0 ] ; then
                            echo " failed"
                            exit 1
                    fi
                    wait_for_pid created $php_fpm_PID
                    if [ -n "$try" ] ; then
                            echo " failed"
                            exit 1
                    else
                            echo " done"
                    fi
            ;;
            stop)
                    echo -n "Gracefully shutting down php-fpm "
                    if [ ! -r $php_fpm_PID ] ; then
                            echo "warning, no pid file found - php-fpm is not running ?"
                            exit 1
                    fi
                    kill -QUIT `cat $php_fpm_PID`
                    wait_for_pid removed $php_fpm_PID
                    if [ -n "$try" ] ; then
                            echo " failed. Use force-exit"
                            exit 1
                    else
                            echo " done"
                           echo " done"
                    fi
            ;;
            force-quit)
                    echo -n "Terminating php-fpm "
                    if [ ! -r $php_fpm_PID ] ; then
                            echo "warning, no pid file found - php-fpm is not running ?"
                            exit 1
                    fi
                    kill -TERM `cat $php_fpm_PID`
                    wait_for_pid removed $php_fpm_PID
                    if [ -n "$try" ] ; then
                            echo " failed"
                            exit 1
                    else
                            echo " done"
                    fi
            ;;
            restart)
                    $0 stop
                    $0 start
            ;;
            reload)
                    echo -n "Reload service php-fpm "
                    if [ ! -r $php_fpm_PID ] ; then
                            echo "warning, no pid file found - php-fpm is not running ?"
                            exit 1
                    fi
                    kill -USR2 `cat $php_fpm_PID`
                    echo " done"
            ;;
            *)
                    echo "Usage: $0 {start|stop|force-quit|restart|reload}"
                    exit 1
            ;;
    esac

    init 스크립트를 실행 가능하게 만들고 시스템 시작 링크를 만듭니다.

    chmod 755 /etc/init.d/php-7.1-fpm
    insserv php-7.1-fpm

    마지막으로 PHP-FPM을 시작합니다.

    /etc/init.d/php-7.1-fpm start

    결과는 다음과 같아야 합니다.

    /etc/init.d/php-7.1-fpm start
    Starting php-fpm done

    3.2 PHP 7.1용 시스템 스크립트 만들기

    이제 시스템 단위 파일을 만듭니다.

    nano /lib/systemd/system/php-7.1-fpm.service

    다음 내용으로:

    [Unit]
    Description=The PHP 7.1 FastCGI Process Manager
    After=network.target

    [Service]
    Type=simple
    PIDFile=/opt/php-7.1/var/run/php-fpm.pid
    ExecStart=/opt/php-7.1/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.1/etc/php-fpm.conf
    ExecReload=/bin/kill -USR2 $MAINPID

    [Install]
    WantedBy=multi-user.target

    서비스를 활성화하고 systemd를 다시 로드합니다.

    systemctl enable php-7.1-fpm.service
    systemctl daemon-reload

    마지막으로 PHP-FPM을 시작합니다.

    systemctl start php-7.1-fpm.service

    4 Zend OPcache 활성화

    Zend OPcache를 활성화하려면 /opt/php-7.1/lib/php.ini...를 엽니다.

    nano /opt/php-7.1/lib/php.ini

    ... 그리고 마지막에 다음 줄을 추가합니다.

    [...]
    zend_extension=opcache.so

    Memcache 및 APCu 확장은 아직 PHP 7.1에 설치할 수 없으므로 지금은 설치를 건너뛰겠습니다. 나중에 pecl 확장이 PHP 7.1과 호환되면 튜토리얼을 업데이트하겠습니다.

    PHP 버전 테스트:

    cd /opt/php-7.1/bin
    ./php --version

    출력은 이 스크린샷과 유사해야 합니다.

    참고: 스크린샷은 PHP 7.1.16의 것입니다. 자습서는 새로운 PHP 7.1 버전에 대해 지속적으로 업데이트되지만 매번 새로운 스크린샷을 찍지는 않으므로 서버에 표시되는 PHP 7.1 버전이 최신 버전일 수 있습니다. 이 가이드의 현재 버전은 php-7.1.16용입니다.

    5 Memcache 활성화(선택 사항)

    이 장에서는 PHP Memcached 확장을 컴파일하고 활성화합니다.

    첫 번째 단계는 Debian에서 libmemcached-dev 패키지를 설치하는 것입니다.

    apt-get install libmemcached-dev

    그런 다음 디렉터리를 만들고 Github에서 PHP memcache 확장을 다운로드하고 아카이브의 압축을 풀고 압축을 푼 파일이 포함된 디렉터리를 입력합니다.

    mkdir /usr/local/src/php7-build/php-memcache
    cd /usr/local/src/php7-build/php-memcache
    wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip
    unzip php7.zip
    cd php-memcached-php7

    PHP 7.1에서 phpize 명령을 실행하여 소스를 준비합니다.

    /opt/php-7.1/bin/phpize

    PHP memcache 확장을 구성하고 빌드합니다.

    ./configure --with-php-config=/opt/php-7.1/bin/php-config
    make
    make install

    Memcache 확장을 활성화하려면 /opt/php-7.1/lib/php.ini...를 엽니다.

    nano /opt/php-7.1/lib/php.ini

    ... 그리고 마지막에 다음 줄을 추가합니다.

    [...]
    extension=memcached.so

    2.1 xDebug 확장 설치(선택 사항)

    xDebug 모듈은 PHP용 디버깅 확장 프로그램입니다. 설치는 선택 사항입니다.

    다음 명령으로 xDebug를 설치하십시오.

    cd /opt/php-7.1/etc
    pecl -C ./pear.conf update-channels
    pecl -C ./pear.conf install xdebug

    그런 다음 편집기를 사용하여 php.ini 파일을 편집합니다.

    nano /opt/php-7.1/lib/php.ini

    파일 끝에 다음 행을 추가하십시오.

    zend_extension=/opt/php-7.1/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so

    마지막으로 php-fpm 데몬을 다시 시작합니다.

    service php-7.1-fpm restart

    7 ISPConfig에서 PHP 7.1 활성화

    ISPConfig 3에서는 시스템 > 추가 PHP 버전에서 새 PHP 버전을 구성할 수 있습니다. 이름 탭에서 PHP 버전(예: PHP 7.1)의 이름을 입력하면 됩니다. 이 PHP 버전은 ISPConfig의 웹사이트 설정에서 이 이름 아래 나열됩니다.

    FastCGI 설정 탭으로 이동하고 다음과 같이 필드를 채웁니다.

    Path to the PHP FastCGI binary: /opt/php-7.1/bin/php-cgi
    Path to the php.ini directory: /opt/php-7.1/lib

    그런 다음 PHP-FPM 설정 탭으로 이동하여 다음과 같이 입력란을 작성합니다.

    Path to the PHP-FPM init script: /etc/init.d/php-7.1-fpm
    Path to the php.ini directory: /opt/php-7.1/lib
    Path to the PHP-FPM pool directory: /opt/php-7.1/etc/php-fpm.d

    7 링크

    • PHP: http://www.php.net/
    • ISP구성: http://www.ispconfig.org/
    • 데비안: http://www.debian.org/