Установка LEMP (Nginx+PHP7-fpm) на Debian 8 для wordpress

Перерыл кучу мануалов, но все либо устаревшие, либо неполные, либо нерабочие, поэтому выкладываю в сеть свою версию установки LEMP на Debian 8. В этой статье изложу все действия по порядку, которые мне пришлось сделать, чтобы наконец-то поднять VPS сервер на котором отлично работает wordpress.

Установка производилась на чистый сервер с Debian 8.

Шаг первый. Обновление системы.

#обновляем систему
apt-get update && apt-get upgrade

Устанавливаем Nginx

#установка
apt-get install nginx
#запускаем
service nginx start

Теперь проверьте работоспособность сервера, набрав в адресной строке браузера ваш IP-адрес сервера. Вы должны попасть на приветcвенное окно Nginx.

Установим PHP7.0

На момент написания статьи в репозиториях Debian 8 еще не было пакета php7.0, поэтому добавляем репозиторий Dotdeb в наш source.list

nano /etc/apt/sources.list
#добавить в конец файла
deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all
#скачиваем и устанавливаем ключ
wget https://www.dotdeb.org/dotdeb.gpg apt-key add dotdeb.gpg
#Обновляем кэш пакетов
apt-get update

Теперь все нужные нам пакеты доступны для установки. Следующим шагом будет установка всех нужных пакетов.

apt-get install php7.0-common php7.0-mysqlnd php7.0-xmlrpc php7.0-curl php7.0-gd php7.0-cli php7.0-fpm php-pear php7.0-dev php7.0-imap php7.0-mcrypt

Для проверки версии PHP можно использовать команду

php -v

Вы увидите что-то вроде этого:

PHP 7.0.13-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.13-1~dotdeb+8.1, Copyright (c) 1999-2016, by Zend Technologies

Теперь сделаем небольшое изменение в php.ini, чтобы сделать наш сервер немного более безопасным. Для этого выполните команду:

nano /etc/php/7.0/fpm/php.ini

С помощью комбинации клавиш Ctrl+W (поиск в редакторе nano) найдите строчку cgi.fix_pathinfo скорее всего она у вас будет закомментирована, расскомментируйте и присвойте значение 0

cgi.fix_pathinfo = 0

Перезапустим php-fpm

service php7.0-fpm restart

Установка MySQL сервера

apt-get install mysql-server

Во время установки вам будет предложено задать пароль для корневого пользователя root базы данных. После того как вы установите пароль, нужно будет настроить структуру каталогов, где MySQL будет хранить базы данных.

mysql_install_db

И запустить настройки безопасности для нашего сервера баз данных.

mysql_secure_installation

Первый вопрос — смена пароля для пользователя root, если вы не хотите менять пароль просто ответьте нет. На все остальные вопросы нужно ответить утвердительно.

Настроим сервер Nginx для работы с wordpress

Для начала создадим файл с настройками нашего сайта (замените site-wordpress.ru на свой домен, или создайте произвольное название файла)

nano /etc/nginx/sites-available/wordpress-site.ru

И вставим в него настройки. Этот конфиг является хорошим для wordpress по умолчанию. Вставьте этот код в созданный файл:

server {
        listen 80;

        root /var/www/site-wordpress.ru;
        index index.php index.html index.htm;

        server_name site-wordpress.ru;

        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/html;
        } 
location / {
                # try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }


        location ~ .php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+.php)(/.+)$;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

location = /favicon.ico {
        access_log off;
        log_not_found off;
        expires max;
}
location = /robots.txt {
        access_log off;
        log_not_found off;
}

# Cache Static Files For As Long As Possible
location ~*
.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$
{
        access_log off;
        log_not_found off;
        expires max;
}
# Security Settings For Better Privacy Deny Hidden Files
location ~ /. {
        deny all;
        access_log off;
        log_not_found off;
}
# Return 403 Forbidden For readme.(txt|html) or license.(txt|html)
if ($request_uri ~* "^.+(readme|license).(txt|html)$") {
    return 403;
}
# Disallow PHP In Upload Folder
location /wp-content/uploads/ {
        location ~ .php$ {
                deny all;
        }
}
}

Это хорошо настроенный файл конфигурации с поддержкой постоянных ссылок. В секции server_name — Укажите домен сайта. Сохраните файл (Ctrl+O) и закройте (Ctrl+X). Включим секцию с помощью символьной ссылки:

ln -s /etc/nginx/sites-available/site-wordpress.ru /etc/nginx/sites-enabled/site-wordpress.ru

Настроим nginx.conf

user www-data;
worker_processes 1; #выставить значение соответствующее вашему количеству ядер
pid /run/nginx.pid;

Добавить use epoll; в events блок

events {
worker_connections 4096;
multi_accept on;
use epoll;
}

Установить значения clients_max_body_size (по желанию, зависит от того, насколько вы большие файлы грузить будете на сервер) и server_tokens off, и keepalive_timeout 30.

 ##
        # Basic Settings
        ##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 30;
types_hash_max_size 2048;
server_tokens off;
client_max_body_size  100m;


        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

Проверить блок сжатия, чтобы соответствовал нижеприведенному:

##
        # Gzip Settings
        ##

gzip on;
gzip_disable "msie6";

gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

Сохранить (Ctrl+O) и закрыть файл (Ctrl+X). Перезапустить nginx:

servise nginx restart

Настройка PHP (если не меняли значение clients_max_body_size — можно пропустить)

nano /etc/php/7.0/fpm/php.ini

С помощью поиска (Ctrl+W) найти и изменить значения директив upload_max_filesize и post_max_size установить равными clients_max_body_size.

upload_max_filesize = 100M
post_max_size = 100M

Перезапустить PHP-fpm:

service php7.0-fpm restart

Установка базы данных

Создадим пользователя базы данных и таблицы:

mysql -u root -p

Введите пароль, который вы указывали при установке MySQL. Дальше нам нужно создать базу данных и пользователя, с помощью которого мы подключимся к БД.

CREATE DATABASE woordpress;

Вместо wordpress укажите любое название базы данных. После этого создадим нового пользователя базы данных:

CREATE USER wordpressuser@localhost;

Установим пароль для пользователя:

SET PASSWORD FOR wordpressuser@localhost= PASSWORD("password");

И предоставим все права пользователю:

GRANT ALL PRIVILEGIES on wordpress.* TO wordpressuser@localhost IDENTIFIED BY 'password';

Обновите MySQL:

FLUSH PRIVILEGIES;

И выйдите из оболочки MySQL:

exit

Установка файлов WordPress’а

Создадим директорию, в которой будет храниться наш сайт:

mkdir /var/www/wordpress-site.ru

Перейдем в директорию:

cd /var/www/wordpress-site.ru

Теперь нам нужно скачать архив с сайта wordpress. Для этого на сайте скопируйте ссылку на архив, и скачайте архив на сервер с помощью команды wget:

wget https://wordpress.org/wordpress-4.6.1-ru_RU.tar.gz

Распакуем архив:

tar -xzvf wordpress-4.6.1-ru_RU.tar.gz

И дадим права доступа для пользователя www-data для автоматического обновления движка тем и плагинов wordpress (команду выполнять находясь в каталоге /var/www).

chown -R www-data:www-data wordpress-site.ru
usermod -a -G www-data www-data

Готово! Теперь можно перейти на сайт для окончания установки. Перейдите на сайт по адресу http://ваш-IP/wordpress/ (да, при извлечении из архива все файлы сайта находятся в подпапке. Вы можете скопировать файлы в корень сайта и после этого запустить установку, или же ниже я приведу способ, как сделать сайт открывающимся по вашему адресу, но находящимся в подпапке wordpress)

Для этого скопируйте файл index.php из папки wordpress в корневой каталог нашего сайта (команду выполнять находясь в директории /var/www/wordpress-site.ru/wordpress)

cp index.php /var/www/wordpress-site.ru

И изменить строчку:

require('./wp-blog-header.php');

На

require('./wordpress/wp-blog-header.php');

На этом все! Надеюсь вы смогли сконфигурировать свой сервер с помощью данной инструкции!

В настройке мне очень помогли эти материалы:

vultr.com — очень подробный мануал, только с установкой php5.

codebeer.ru — установка php7 на Debian

Ну и официальная документация по Nginx, PHP, MySLQ. Удачи!