Вы здесь

Как настроить веб сервер на Ubuntu 18.04 [Nginx + PHP-FPM + phpMyAdmin + vsftpd]


Как настроить веб сервер на Ubuntu 18.04 [Nginx + PHP-FPM + phpMyAdmin + vsftpd]

Сегодня хочу показать вам, как можно установить на своем сервере с Ubuntu 18.04 веб сервер. В качестве веб сервера будет выступать Nginx с PHP-FPM, в качестве СУБД – MariaDB, в качестве ftp сервера – vsftpd настроенный на использование виртуальных пользователей, чтобы избежать проблем с правами и владельцами файлов при загрузке. А также поставим PHPMyAdmin.

Сразу оговорюсь – я не буду особо останавливаться на конфигах и оптимизации, покажу только минимальные конфигурации для работы веб сервера. Оптимизация и разбор конфигов – отдельная тема, для каждого продукта и даже каждого конкретного случая, сегодня же речь не о том.

Итак – имеем свеж установленную Ubuntu Server 18.04.

Как всегда сперва переходим в режим суперпользователя и обновляем систему.

sudo su
apt update
apt upgrade

Теперь давайте установим nginx и php-fpm. Для этого добавим необходимые репозитории, где содержаться последние версии необходимых нам пакетов.

add-apt-repository ppa:ondrej/php
add-apt-repository ppa:nginx/stable

Обновляем список пакетов и ставим nginx, php и необходимые модули для php, пользуясь случаем так же сразу поставим zip и unzip.

apt update
apt install nginx
apt install php7.2-cli php7.2-fpm php7.2-curl php7.2-gd php7.2-mysql php7.2-mbstring zip unzip

После установки в целях безопасности отключим cgi.fix_pathinfo. В файле /etc/php/7.2/fpm/php.ini

nano /etc/php/7.2/fpm/php.ini

находим строчку

;cgi.fix_pathinfo=1

и меняем ее на

cgi.fix_pathinfo=0

Теперь удалим или переместим куда-нибудь дефолтный конфиг nginx сайта по умолчанию

mv /etc/nginx/sites-available/default ~/

И создадим новый с таким же названием.

nano /etc/nginx/sites-available/default

Содержимое должно быть таким:

    server {
        listen   80;
        root /var/www/default;
        index index.php index.html index.htm;
        server_name  example.com www.example.com;
        location / {
                try_files $uri $uri/ /index.html;
        }
        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
              root /usr/share/nginx/www;
        }
        location ~ .php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
    }

Дальше посмотрим, сколько ядер имеется в нашей системе:

cat /proc/cpuinfo | grep processor | wc -l

И укажем это количество в качестве параметра worker_processes в файле /etc/nginx/nginx.conf

nano /etc/nginx/nginx.conf

worker_processes 2;

Далее создадим папку для нашего сайта и в этой папке создадим файлик index.php.

mkdir /var/www/default
nano /var/www/default/index.php

Содержимое файла:

    <?php
        phpinfo();
    ?>

Сделаем пользователя и группу www-data владельцем файлов и папок:

chown -R www-data:www-data /var/www

Перезапускаем nginx и php-fpm:

/etc/init.d/nginx restart
/etc/init.d/php7.2-fpm restart

Проверяем, что php у нас работает:

Как настроить веб сервер на Ubuntu 18.04 [Nginx + PHP-FPM + phpMyAdmin + vsftpd] - php работает

Далее поставим mariadb. Опять добавляем необходимый репозиторий, обновляем список пакетов и устанавливаем mariadb-server и mariadb-client:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://mirror.timeweb.ru/mariadb/repo/10.3/ubuntu bionic main'
apt update
apt install mariadb-server mariadb-client

Во время установки нужно будет задать пароль для пользователя root, для доступа к БД.

Перезапускаем mysql и пробуем подключиться:

/etc/init.d/mysql restart
mysql -u root -p

В Ubuntu 18.04 вы можете столкнуться с ситуацией, что после установки mariadb прекрасно работает, но после перезагрузки сервера, внезапно перестает запускаться – очень долго думает, но не запускается. Наиболее вероятная причина подобного поведения – app armor. Что бы его отключить для mariadb необходимо выполнить:

apt install apparmor-utils
aa-disable /usr/sbin/mysqld

Теперь, давайте поставим phpMyAdmin, что бы упростить обслуживание баз данных. Ссылку на последнюю версию phpMyAdmin вы можете найти на сайте ]]>www.phpmyadmin.net]]>.

Скачаем архив, разарзхивируем его, создадим папку в папке с нашим сайтом и перенесем туда файлы.

cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.zip
unzip phpMyAdmin-4.8.3-all-languages.zip
mkdir /var/www/default/phpmyadmin
mv phpMyAdmin-4.8.3-all-languages/* /var/www/default/phpmyadmin/

Далее скопируем пример конфига phpMyAdmin, отредактируем его:

cp /var/www/default/phpmyadmin/config.sample.inc.php /var/www/default/phpmyadmin/config.inc.php
nano /var/www/default/phpmyadmin/config.inc.php

В этом файле нужно задать значение для параметра $cfg['blowfish_secret']. Значением должен быть случайный набор симоволов, например:

$cfg['blowfish_secret'] = 'af897a09df0897adf';

Задаем правильно владельца папки phpmyadmin:

chown -R www-data:www-data /var/www/default/phpmyadmin

Проверяем работоспособность phpMyAdmin:

Как настроить веб сервер на Ubuntu 18.04 [Nginx + PHP-FPM + phpMyAdmin + vsftpd] - phpmyadmin работает

Теперь необходимо поставить ftp сервер. Если мы будем делать ftp сервер, с реальными пользователями, то будут проблемы с правами и владельцами файлов. Самый простой способ этого избежать – использовать виртуальных пользователей. Т.е. мы будем подключаться под пользователем vasya, но система будет считать, что работает пользователь www-data.

Кстати, я когда то показывал как подобное можно сделать в proftpd, сегодня же покажу, как такое сделать в vsftpd.

Ставим vsftp и db-util. Обратите внимание, что на момент написания статьи актуальной версией является db5.3-util. Когда вы будете это читать, версия может быть другой. Нужно ставить актуальную версию.

apt install vsftpd db5.3-util

Создадим папку и файл с нужными логинами и паролями, а так же сразу зададим правильные разрешения на файл:

mkdir /etc/vsftpd
touch /etc/vsftpd/vsftpdusers
chmod 0600 /etc/vsftpd/vsftpdusers

Отредактируем файл, тут первая строчка – имя пользователя, вторая – пароль, дальше по аналогии можно добавить несколько пользователей – сперва имя, ниже пароль.

nano /etc/vsftpd/vsftpdusers

ftpuser
123

Захешируем наш файл и отредактируем разрешения на полученный:

db5.3_load -T -t hash -f /etc/vsftpd/vsftpdusers /etc/vsftpd/users.db
chmod 0600 /etc/vsftpd/users.db

Теперь переместим конфиг vsftpd и создадим новый с таким же названием:

mv /etc/vsftpd.conf ~/
nano /etc/vsftpd.conf

Содержимое конфига должно быть следующим:

listen=YES
anonymous_enable=NO
local_enable=YES
xferlog_enable=YES
user_sub_token=$USER
local_root=/var/www/
chroot_local_user=YES
hide_ids=YES
guest_enable=YES
guest_username=www-data
virtual_use_local_privs=YES
write_enable=YES
pasv_enable=YES
#если сервер за натом - реальный адрес
#pasv_address=1.2.3.4
pasv_max_port=20200
pasv_min_port=20400
pam_service_name=vsftpd.virtual
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
ascii_upload_enable=YES
ascii_download_enable=YES
allow_writeable_chroot=YES
seccomp_sandbox=NO
local_umask=022

Тут стоит обрать внимание на следующие параметры:

local_root=/var/www/ - коревая папка, куда будут попадать пользователя, после подключения к серверу.

guest_username=www-data – имя реального пользователя, который будет виден системе, от его имени будут происходить все операции с файлами.

#pasv_address=1.2.3.4 – если у вас сервер за NAT, то тут нужно указать реальный, внешний адрес.

И остался последний шаг – создадим конфиг для pam.d, что бы наши виртуальные пользователи могли подключаться:

nano /etc/pam.d/vsftpd.virtual

Содержимое файла должно быть таким:

auth       required     pam_userdb.so db=/etc/vsftpd/users
account    required     pam_userdb.so db=/etc/vsftpd/users
session    required     pam_loginuid.so

Перезапускаем vsftpd, и можно пробовать подключаться.

/etc/init.d/vsftpd restart

Как настроить веб сервер на Ubuntu 18.04 [Nginx + PHP-FPM + phpMyAdmin + vsftpd] - ftp работает

На этом всё. Надеюсь вышенаписанное окажется вам полезным.

6 3

Поделитесь статьей с друзьями в соц. сетях, возможно, она будет им полезна.


Если вам помогла статья, вы можете >>отблагодарить автора<<


Комментарии

А что делать если при попытке подключения к mysql выдаёт ошибку: vagrant@vagrant-ubuntu-trusty-64:~$ mysql -u root -pEnter password:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)vagrant@vagrant-ubuntu-trusty-64:~$  Гуглил, не нашёл. Речь наверно пойдет о правах к папке с сокетом? 

0 0

я проверял командой ps aux | grep mysql Но уже из-за переживаний удалил все виртуальные машины, потому что мне показалось, что ошибка возникала из-за нехватки дискового пространства.Вообще не понимаю, как это можно в этом разобраться самостоятельно, когда все объясняют по разному

0 0