Debian: установка LEMP — NGINX + PHP-FPM + MariaDB

Автор: | 02/15/2016
 

debian-logo_lenny2Краткий HowTo по ручной установке NGINX + PHP-FPM + MariaDB на Debian 8.

Система:

# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.1 (jessie)
Release:        8.1
Codename:       jessie

Обновляем список пакетов:

apt-get update

Установка NGINX

Добавляем официальный репозиторий NGINX для Debian:

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
OK
echo 'deb http://nginx.org/packages/debian/ jessie nginx' >> /etc/apt/sources.list
echo 'deb-src http://nginx.org/packages/debian/ jessie nginx' >> /etc/apt/sources.list

Устанавливаем NGINX:

apt-get update && apt-get install nginx
systemctl enable nginx
Synchronizing state for nginx.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d nginx defaults
Executing /usr/sbin/update-rc.d nginx enable

Проверяем:

service nginx status
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: active (running) since Sat 2016-02-13 09:21:49 UTC; 7s ago
Main PID: 2195 (nginx)
CGroup: /system.slice/nginx.service
├─2195 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─2196 nginx: worker process
├─2197 nginx: worker process
├─2198 nginx: worker process
└─2199 nginx: worker process

Порт:

netstat -anp | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2195/nginx -g daemo
tcp6       0      0 :::80                   :::*                    LISTEN      2195/nginx -g daemo

Страницу:

curl  localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
...

Установка PHP и PHP-FPM

Устанавливаем PHP и PHP-FPM:

apt-get install php5 php5-mysql php5-fpm php5-curl

Находим пользователя, под которым работает NGINX:

ps aux | grep -E 'nginx.*worker' | grep -v grep | cut -d" " -f 1
nginx

Редактируем файл /etc/php5/fpm/pool.d/www.conf и меняем владельца сокета:

...
listen.owner = www-data
listen.group = www-data
...

на пользователя NGINX:

listen.owner = nginx
listen.group = nginx

Запускаем:

service php5-fpm start

Проверяем:

netstat -anp | grep php
unix  2      [ ACC ]     STREAM     LISTENING     19353    5625/php-fpm.conf)  /var/run/php5-fpm.sock

Добавляем в автозапуск:

systemctl enable php5-fpm
Synchronizing state for php5-fpm.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d php5-fpm defaults
Executing /usr/sbin/update-rc.d php5-fpm enable

Настраиваем NGINX на работу с PHP-FPM.

Создаем каталог для файлов сайта:

mkdir -p /var/www/vhosts/rtfm/aws-test.rtfm.co.ua

Создаем файл phpinfo.php для проверки работы NGINX + PHP-FPM:

echo "<?php echo phpinfo(); ?>" > /var/www/vhosts/rtfm/aws-test.rtfm.co.ua/phpinfo.php

Настраиваем NGINX:

server {

    listen       80;
    root /var/www/vhosts/rtfm/aws-test.rtfm.co.ua;
    server_name  aws-test.rtf.co.ua;
    index index.php

    error_page   500 502 503 504  /50x.html;

    location / {
            try_files $uri $uri/ /index.php;
    }

    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ /.ht {
        deny  all;
    }

    location ~ .php$ {
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

}

Проверяем и перезапускаем:

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart

Проверяем в браузере:


debian_nginx_php_fpm_1

Установка MySQL/MariaDB

Выполняем:

apt-get install mariadb-server

Проверяем:

mysql --version
mysql  Ver 15.1 Distrib 10.0.23-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
service mysql status
● mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql)
Active: active (running) since Sat 2016-02-13 10:23:01 UTC; 1min 4s ago
CGroup: /system.slice/mysql.service
├─7489 /bin/bash /usr/bin/mysqld_safe
├─7490 logger -p daemon.err -t /etc/init.d/mysql -i
├─7628 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-log-error --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
└─7629 logger -t mysqld -p daemon.error
netstat -anp | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      7628/mysqld

Добавляем в автозапуск:

# systemctl enable mysql
Synchronizing state for mysql.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d mysql defaults
Executing /usr/sbin/update-rc.d mysql enable

На этом, в целом все.

Ссылки по теме

CentOS: установка MariaDB

CentOS: установка NGINX + PHP-FPM

MySQL/MariaDB: тюнинг производительности #1: thread_cache_size

NGINX: виртуалхост под отдельным пользователем с PHP-FPM

NGINX: настройка сервера и PHP-FPM