В этой инструкции я расскажу о том, как настроить сервер для хостинга. Она подходит для серверов на Ubuntu и других систем на основе deb-пакетов.
Содержание:
Общая настройка системы
Установка NGINX
Установка PHP и PHP-FPM
Установка MariaDB или MySQL
Установка phpMyAdmin
Установка Memcached
Установка и настройка FTP-сервера
Apache
Postfix
Тюнинг веб-сервера
Создание первого сайта
Настройка операционной системы
1. Обновляем Ubuntu:
apt update && apt upgrade
2. Настраиваем время:
apt install chrony
timedatectl set-timezone Europe/Moscow
systemctl enable chrony
* первая команда для установки пакета синхронизации времени; вторая задает часовой пояс по московскому времени; третья разрешит автозапуск chrony
3. По умолчанию, в Ubuntu брандмауэр работает в режиме «разрешить все». Но если мы настроили защиту по максимуму, то для веб-сервера открываем следующие порты:
iptables -I INPUT 1 -p tcp --match multiport --dports 80,443,8080 -j ACCEPT
iptables -I INPUT 1 -p tcp --match multiport --dports 20,21,60000:65535 -j ACCEPT
* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); Подробнее про настройку iptables.
Для сохранения правил ставим пакет iptables-persistent:
apt install iptables-persistent
Для сохранения правил вводим команду:
netfilter-persistent save
Установка NGINX
Устанавливаем NGINX:
apt install nginx
Внесем изменение в файл nginx.conf:
vi /etc/nginx/nginx.conf
http {
...
server_names_hash_bucket_size 64;
....
}
* в данном примере мы сняли комментарий со строчки server_names_hash_bucket_size 64;
* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.
Перезапускаем nginx:
systemctl enable nginx
systemctl reload nginx
* в процессе запуска мы можем увидим ошибку — возможно, в системе работает другой веб-сервер и занимает 80 порт. Как правило, это apache. Чтобы его выключить (на данном этапе он нам не нужен) вводим команду systemctl stop apache2.
Проверим работу веб-сервера. Открываем браузер и вводим в адресной строке http://<IP-адрес сервера>. В итоге мы должны увидеть заголовок «Welcome to nginx!»:
Welcome to nginx!
Если стартовая страница не загружается, проверяем состояние сервиса:
systemctl status nginx
Установка PHP и PHP-FPM
Устанавливаем PHP и PHP-FPM:
apt install php php-fpm
* в каждой версии Ubuntu устанавливается своя нативная версия php. Но если нам нужно установить несколько версий PHP или конкретную версию, то используем инструкцию Установка разных версий PHP на Linux Ubuntu.
Разрешаем автозапуск php-fpm и запускаем его:
systemctl enable php8.1-fpm
* обратите внимание, что мы запустили php-fpm версии 8.1. Но установлена может быть и другая версия — ее можно узнать по версии php командой php -v.
Настройка связки NGINX + PHP
Открываем файл для настройки виртуального домена по умолчанию:
vi /etc/nginx/sites-enabled/default
В секции location или server редактируем параметр index на следующее значение:
…
index index.php index.html index.htm;
* в данном случае мы сказали серверу сначала искать индексный файл index.php, затем остальные по списку.
А внутри секции server добавим следующее:
location ~ \.php$ {
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
* где /var/www/html — корневой путь хранения скриптов; /run/php/php8.1-fpm.sock — путь до сокетного файла для взаимодействия с php-fpm. Обратите еще раз внимание, что если в нашей системе будет установлена другая версия php, необходимо внести соответствующую корректировку.
Пример файла default:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
}
Проверяем правильность настроек nginx:
nginx -t
И перезагружаем его:
systemctl reload nginx
Открываем конфигурационный файл PHP-FPM:
vi /etc/php/8.1/fpm/pool.d/www.conf
Проверяем, что путь до сокетного файла такой же, как мы задали в настройках NGINX:
listen = /run/php/php8.1-fpm.sock
В противном случае меняем его и перезапускаем сервис:
systemctl restart php8.1-fpm
Теперь заходим в каталог хранения настроенного сайта:
cd /var/www/html
Создаем index.php со следующим содержимым:
vi index.php
<?php phpinfo(); ?>
Открываем браузере и переходим по адресу http://<IP-адрес сервера>. Мы должны увидеть сводную информацию по PHP и его настройкам
* в данном примере используется php версии 8.1.
Установка СУБД
В данной статье мы установим MariaDB. Установка выполняется следующей командой:Код: bash
apt install mariadb-server
Скопировать
Разрешаем автозапуск и запускаем СУБД:
systemctl enable mariadb
Зададим пароль для учетной записи mysql-root:
mysqladmin -u root password
Входим в SQL-оболочку:
mysql -uroot -p
Задаем пароль для пользователя root@localhost:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('New_Password');
flush privileges;
* где New_Password — пароль, который мы хотим установить для учетной записи root.
Выходим из sql-консоли:
quit
PHP + MariaDB
Для возможности подключаться к базе данных скриптами PHP, необходимо установить следующие модули:
apt install php-mysql php-mysqli
После перезагружаем php-fpm:
systemctl restart php8.1-fpm
И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:
В phpinfo появилась информация о поддержке MySQL
* несмотря на то, что мы установили mariadb, в заголовке мы видим mysql. Так и должно быть.
Установка phpMyAdmin
apt install phpmyadmin
* в процессе установки система может потребовать ввод пароля для пользователя phpmyadmin. Его нужно ввести дважды.
Теперь создадим конфигурационный файл. Содержимое будет отличаться в зависимости от того, как мы будем настраивать наш сервер.
а) Виртуальный домен в NGINX:
nano /etc/nginx/sites-enabled/phpmyadmin.conf
СкопироватьКод: vim
server {
listen 80;
server_name phpmyadmin.example.org;
set $root_path /usr/share/phpmyadmin;
root $root_path;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
}
* где phpmyadmin.example.org — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому есть нет возможность зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpmyadmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.
б) Используем location /phpmyadmin:
nano /etc/nginx/sites-enabled/default
Добавляем location:
server {
listen 80 default_server;
...
location /phpmyadmin {
root /usr/share/;
index index.php;
location ~ ^/phpmyadmin/(.+\.php)$ {
root /usr/share/;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
После перезапускаем NGINX:
systemctl reload nginx
Открываем браузер. В зависимости от выбранного способа настройки, ссылка на phpmyadmin будет разной:
http://phpmyadmin.example.org — если настроили phpmyadmin на отдельном виртуальном домене (способ а).
http://<IP-адрес сервера>/phpmyadmin — если настроили location /phpmyadmin (способ б).
Откроется форма для авторизации — вводим логин phpmyadmin и пароль, который мы указали при установке phpmyadmin.
Если система вернула ошибку входа из-за неправильного пароля, необходимо задать пароль для учетной записи root@localhost (рассказывается выше в разделе установки MariaDB).
Установка Memcached
Для начала, выполняем установку пакетов:
apt install memcached php-memcached
После разрешаем автозапуск и запускаем сервис кэширования:Код: bash
systemctl enable memcached
Перезапускаем php-fpm:
systemctl restart php8.1-fpm
*Для проверки, что модуль memcached появился в PHP, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:
Установка и настройка FTP-сервера
Мы настроим ProFTPd, так как он позволит использовать виртуальных пользователей с uid пользователя www-data.
Для его установки вводим следующую команду:
apt install proftpd
Смотрим uid пользователя www-data:
id www-data
* в Ubuntu это, как правило, 33.
Создаем виртуального пользователя:
ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpwww --uid=33 --gid=33 --home=/var/www --shell=/usr/sbin/nologin
* где /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи; ftpwww — имя пользователя (логин); uid и gid — идентификаторы пользователя и группы системной учетной записи (www-data); /var/www — домашний каталог пользователя; /usr/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.
Открываем основной конфигурационный файл:
nano /etc/proftpd/proftpd.conf
Снимаем комментарий или редактируем опцию:
DefaultRoot ~
* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.
Создаем дополнительный конфигурационный файл для proftpd:
nano /etc/proftpd/conf.d/custom.conf
Со следующим содержимым:
UseIPv6 off
IdentLookups off
PassivePorts 60000 65535
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c
* где 60000 — 65535 — диапазон динамических портов для пассивного режима.
Разрешаем автозапуск FTP-серверу и запускаем его:
systemctl enable proftpd
systemctl restart proftpd
Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.
При необходимости, можно настроить шифрование и хранение пользователей в базе данных. Подробнее в инструкции Установка и настройка ProFTPd на Ubuntu Server.
No responses yet