Сегодня хочу показать вам, как можно установить на своем сервере с 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 у нас работает:
Далее поставим 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:
Теперь необходимо поставить 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
На этом всё. Надеюсь вышенаписанное окажется вам полезным.
Share the article with your friends in social networks, maybe it will be useful to them.
If the article helped you, you can >>thank the author<<