Уважаемые читатели моего блога, в этой статье я вам расскажу о том, как правильно настроить сервер, который будут быстро работать. Естественно это не универсальная настройках под каждую задачу, но для многих это сойдет.
Я как-то писал уже о настройке 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. Не забывайте оптимизировать код 🙂