Debian 8 + PHP 7.1 + PostgreSQL + Nginx

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

Я как-то писал уже о настройке Debian 7, поэтому вы можете выполнить все команды из этой статьи до MySQL. С этого мы и начнем.

PHP 7

И так, вы настроили ваш сервер, настроили локализацию, почтовую систему, теперь можно и PHP 7.1 поставить. Начнём. Выполните команду, что установить необходимые компоненты:

apt-get install apt-transport-https lsb-release ca-certificates

Затем скачайте ключи:

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

И добавьте репозиторий:

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list

Ну и, наконец, устанавливаем php 7.1:

apt-get update
apt-get install php7.1 php-pear php-mcrypt

На этом процесс установки почти закончен. Почти, потому что apache2 тоже был установлен, но он нам нужен. Если вы хотите настроить связку apache2 + nginx, то можете прочитать мою статью по настройке Debian 7, но, как я считаю, nginx будет работать гораздо быстрее и в 90% можно обойтись без apache. Удаляем:

apt-get purge apache2-*
rm -rf /etc/apache2
apt-get autoremove

Проверить PHP вы можете выполнив команду php -v, которая отобразит вам версию PHP. Но пока что ваши скрипты работать не будет, разве что из командной строки.

Nginx

Теперь займемся установкой и настройкой nginx. Для установки последней версии необходимо добавить репозитории. Выполним команду:

nano /etc/apt/sources.list

И добавим в конец файла:

deb http://nginx.org/packages/debian/ jessie nginx
deb-src http://nginx.org/packages/debian/ jessie nginx

Добавляем ключи:

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key

Теперь установим:

apt-get update
apt-get install nginx-full

PostgreSQL

Я предпочитаю использовать именно PostgreSQL, а не MySQL, потому что его можно тонко настраивать и отлично подходит для высоконагруженных проектов.

Для начала добавим репозиторий:

sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update

И затем устанавливаем:

apt-get install postgresql-9.6 postgresql-client-9.6 php7.1-pgsql

На момент написания статьи актуальная версия 9.6, у вас может быть и новее.

Настройка nginx

Теперь давайте настроим наш сайт, чтобы он обрабатывал PHP скрипты. Пока что этого он не умеет. Переходим:

nano /etc/nginx/sites-enabled/default

Отключаем отображение версии NGINX, для этого в раздел server добавляем строку:

server_tokens off;

Параметр index: добавляем через пробел index.php
Параметр root: указываем директорию до вашего сайта, например, /var/www/deone.ru
Параметр server_name: название сервера, например, deone.ru

Чтобы работал PHP7 необходимо изменить директиву location php:

location ~ \.php$ {
  include snippets/fastcgi-php.conf;
  fastcgi_pass unix:/run/php/php7.1-fpm.sock;
}

Готовый вариант настроек без SSL:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_tokens off;

        root /var/www/deone.ru;
        index index.php index.html index.htm;
        server_name deone.ru www.deone.ru;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        }

        location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                expires max;
        }

        location ~ /\.ht {
                deny all;
        }

        gzip on;
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
}

Следующий код уже с настройкой SSL + редирект http -> https:

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_tokens off;
        return 301 https://$host$request_uri;

        root /var/www/deone.ru/web;
        index index.html index.htm index.php;

        server_name deone.ru www.deone.ru;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        }

        location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                expires max;
        }

        location ~ /\.ht {
                deny all;
        }
        gzip on;
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
}

server {
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        server_tokens off;

        root /var/www/deone.ru/web;
        index index.php index.html index.htm;

        server_name deone.ru www.deone.ru;

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.1-fpm.sock;
        }

        location / {
                try_files $uri $uri/ =404;
        }

        location ~* ^.+\.(css|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
                expires max;
        }

        location ~ /\.ht {
                deny all;
        }
        
        ssl on;
        ssl_certificate /etc/nginx/crt/deone.ru.crt;
        ssl_certificate_key /etc/nginx/crt/deone.ru.key;

        gzip on;
        gzip_disable "msie6";
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
}

Ещё в настройках есть параметры для gzip сжатия и кэширования. Рекомендую оставлять эти строки, ведь это значительно ускоряет ваш сайт.

Дополнительно ПО

Рекомендую установить дополнительное программное обеспечение, потому что они вам пригодятся:

apt-get install sudo php7.1-mbstring php7.1-curl curl memcached php7.1-memcache php7.1-memcached git

Не забываем про Composer:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

На этом всё! Теперь у вас есть хорошо настроенный Debian 8 сервер с PHP 7.1. Не забывайте оптимизировать код 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *