Настройка хостинга на VDS под Ubuntu. Настройка сервера с нуля на примере VPS от Hetzner’а Другие стати раздела: Установка WordPress

[Статья актуальна! Последняя дата изменения 12.03.2015! ]

И так, давайте начнём, для начала что же такое VPS/VDS? По идеи это одно и тоже, VPS это Virtual Private Server или же Виртуальный Приватный Сервер, VDS это Virtual Dedicated Server или же Виртуальный Выделенный Сервер.

1. Как подобрать качественный VPS/VDS ? Этот вопрос мучает всех. Отвечу я вам так: лучше брать на иностранных сайтах, конечно я не буду перечислять какие, но на них дешевле и качественнее.
Вы встретили какие то: OpenVZ и KVM? KVM будет стоить дороже но он лучше OpenVZ, плюсы я подробной расписывать не буду, а лишь напишу только одно. Допустим есть выделенный сервер, его разделили на 4 части, одну часть дали вам, и другим по одной. Но! Якобы каждому на сервер выделяется порядка 5 гб оперативы, а на сервере всего 16. Т.е фактически можно выделить каждому только по 4 гб. И когда у вас занято 3 гб, а у других 5 - то вы не сможете занять 4 гб памяти, а только лишь 3. На KVM же, такого не будет. То, что вы купили - то и выдадут.

2. Подготовка VPS/VDS для установки сервера Перед установкой сервера MineCraft вам необходимо установить ОС Linux, лучше всего работать с Debian/Ubuntu, но я предпочту Debian 7.3(при заказе сервера, у вас может быть и Debian 7.0 и 6.0 - в них почти нет отличий!) Затем нужно скачать любой SSH клиент, самый простой и удобный PuTTy , затем, нужно открыть этот клиент, и мы видим перед нами строка: "Host name (or IP address) ((Имя хоста (или Ip-адрес))" и туда вводим IP адрес своего VPS/VDS сервера, где надпись "Port (порт)" там ничего не трогаем, нужен порт 22, а именно SFTP(SSH File Transport Protocol) а не FTP(File Transport Protocol) и нажимаем внизу "Open (Соединиться)". При желании вы можете сохранить эти данные, введя в "Saved Sessions" название сессии,

Теперь нужно подтвердить ключ, нажимаем "да". После этого нам предлагают ввести логин: login as: тут мы пишем(по стандартному, (супер-пользователь)) root Далее, нам пишет: root@IPкоторый_указали"s password: тут мы пишем пароль, когда вы пишете пароль, он не показывается!!! А так же можно вставить пароль, зажав ПКМ, но не CTRL + V (CMD + V)
Затем появляется консоль, в консоли мы прописываем:

apt-get update //Обновляем все установленное на сервере пакеты
При обновлениях, вам предлагают продолжить установку, или отменить: N or Y, пишите "y" и жмите Enter, т.е продолжаете.
apt-get upgrade //Теперь мы "улучшаем" пакеты
Опять же пишите "y" и Enter.
ВНИМАНИЕ! Начиная с версии Debian 7.3 нам предлагают подтвердить SSL сертификаты, когда нам об этом напишут, просто жмите Enter много раз, или просто зажмите. Когда список закончится и нам предлагают выйти, просто нажимаем "q"
apt-get install htop //Пакет для показа активных программ, очень полезен, если нужно посмотреть, допустим что из приложений java активны, а не просто прописывать "kill java"
apt-get install screen //Пакет который создает "несколько" консолей, если нужно запустить сразу 2+ серверов. И вообще полезная штука
apt-get install openjdk-7-jre //устанавливаем Java. Советую установить именно open-jdk.
(Уже можно установить 8)

Доп. пакет
apt-get install nano //Хороший редактор для Linux"a, если не хотите заходить в FTP клиент и через консоль что-то отредактировать - используйте Nano. Для использования пишем: nano путь к файлу (К примеру: nano /root/srv/minecraft/server.proporties)

Теперь сервер готов к работе!
Теперь нужно закинуть файлы на сервер, через любой FTP клиент, предлагаю - FileZilla
Когда мы открыли FileZilla, в левом верхнем углу, есть кнопочка "Открыть менеджер сайтов" нажимаете туда, и вводите в хост ip адрес сервера; порт устанавливаете 22(Или выбираем SFTP); пользователь root; и ваш пароль от VPS/VDS/DS. Нас автоматически перекинет в папку "root", в папку "root" перекиньте папку с вашим сервером. Теперь нам нужно как-то запустить наш сервер. Для этого создадим скрипт запуска, создадим файл start.sh (Можно любой другой, но именно.sh!) Теперь мы копируем туда вот это:

Java -Xmx2048M -Xms512M -jar ядросервера.jar

Xmx - максимальное кол-во оперативной памяти выделяемое для сервера.
Xms - минимальное кол-во оперативной памяти выделяемое для сервера.

Плюсы VDS/VPS/DS в том, что можно ввести абсолютно любой порт для сервера, если он не занят.

3. Запуск сервера
screen
//Создаем "консоль"
Можно так же использовать screen -S (именно -S а не -s), чтобы задать имя сесси, допустим:
screen -S server
cd /root/ваша_папка_с_сервером/
//переходим в папку где лежит сервер
sh start.sh //запускаем сервер
И у нас появляется консоль как у обычного сервера MineCraft

Вы можете просто закрыть консоль PuTTY и всё будет работать, можете попробовать так сделать (чтобы вернуться к консоли сервера майна, нужно войти в патти, и написать: Screen -r )

Если же у вас запущено 2 и более серверов одновременно - чтобы зайти в консоль вам нужно:
1. Узнать какие сессии у screen"ов, пишем:
screen -ls // узнаём сесси
Теперь появились сессии, допустим:
hub
survival
И теперь вводим:
screen -r сессия //заходим в сессию
И мы в консоли какого-либо сервера.

На этом туториал окончен.

Настройка VPS с нуля - это набор стандартных действий, которые сможет проделать и новичок. С помощью нашей статьи.

Первое, с чего стоит начать - выбор операционной системы для вашего новенького виртуального сервера. Рассмотрим наиболее популярные UNIX-подобные системы.

Какая операционная система лучше подойдет для VPS?

1. Debian и CentOS

Обе эти операционные системы способны хорошо работать на скромных выделенных ресурсах. Исходя из этого факта, данные системы стоит выбирать, если вы заказываете с достаточно скромными ресурсами, например, выбрали тарифный план с 512 Мб ОЗУ или ниже.

Стоит отметить, что если вы хотите работать с такой панелью управления, как ISP Manager, то в вашем случае больше подойдет CentOS, т.к. он хорошо совместим с этой панелью.

2. Fedora и Ubuntu

3. FreeBSD

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

Настройка VPS

Теперь поговорим непосредственно о настройке VPS. В качестве примера рассмотрим настройку VPS на CentOS.

Первое, что нам нужно будет сделать - установить SSH-соединение с новеньким VPS. Делается это довольно просто, а поможет нам программа PuTTY. Скачав и запустив ее, перед собой вы увидите такое окно:

В полне под названием Host name введите DNS-имя или IP-адрес вашей VPS. Укажите порт, который будет использоваться для доступа (эту информацию можно получить у вашего хостера). Далее, в меню слева найдите пункт Translation и перейдите в него.

В выпадающем списке Remote character set выберите кодировку UTF-8. После этого нажмите кнопку Open и соединение будет установлено.

Предполгается, что CentOS уже установлен на сервере, и мы можем приступить к непосредственной работе с системой. Многие хостеры самостоятельно устанавливают требуемую операционную систему бесплатно, поэтому мы опустим вопрос установки.

Для начала систему необходимо обновить, для этого в консольном окне достаточно ввести всего одну команду:

# yum update

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

Следующий этап, ожидающий нас - это настройка iptables (брандмауэра). Для этого нам понадобится специальная утилита setup. Чаще всего она есть в системе, однако если ее не окажется, установить ее не сложно:

#yum install setuptool system-config-securitylevel-tui authconfig system-config-network-tui ntsysv

После того, как установка setup завершится, можно переходить к ее запуску:

# setup

В появившемся окне вы сможете либо вовсе отключить брандмауэр, либо открыть только необходимые порты. Рекомендуется открыть порты и выбрать соединения, с которыми нам предстоит работать (чаще всего это Web, SSH, FTP).

При желании или какой-то особой необходимости можно отключить iptables, однако это не рекомендовано:

# service iptables stop && chkconfig iptables off

Закончив, мы перейдем к установке и настройкe веб-сервера Apache и SSL. Для начала введите в консоль следующую команду:

# yum -y install httpd mod_ssl

После того, как закончите, необходимо перейти к редактированию конфигурационного файла Apache. Чтобы это сделать нужно в любом текстовом редакторе открыть файл /etc/httpd/conf/httpd.conf. Нам необходимо внести IP или имя сервера в ServerName. По завершении этого действия, необходимо настроить Apache на автоматический запуск:

# chkconfig httpd on

После всего этого Apache можно запустить:

# service httpd start

Если вы хотите проверить работоспособность веб-сервера, то существует простой и достаточно показательный тест - достаточно создать небольшую веб-страницу:

# echo " Hello, world! " > /var/www/html/index.html

После выполнения команды найдите другой компьютер или любое устройство, с активным подключением к сети Интернет и с помощью его браузера перейдите по адресу вида:

http://IP-адрес_вашего_VPS

Вы должны увидеть страницу с надписью “Hello, world!”. Ее появление свидетельствует об успешной установке и настройке.

# yum -y install php php-common php-gd php-mysql php-xml php-mbstring

После успешной установки PHP необходима перезагрузка Apache:

# service httpd restart

Чтобы проверить работу PHP, можно написать небольшой скрипт, который будет показывать информацию об установленной верии PHP:

# echo "" > /var/www/html/info.php

Чтобы увидеть его в действии, также с другой машины перейдите по адресу вида:

http://IP-адрес_вашего_VPS/info.php

Если PHP работает, то на открывшейся странице отобразится информация и можно приступить к следующим шагам.

Следующая наша задача - установка MySQL. С некоторого времени MariaDB официально является реализацией MySQL в CentOS. Для этого введите:

yum -y install mariadb mariadb-server

Закончив это, нам нужно будет назначить MySQL на автозагрузку:

# systemctl enable mariadb.service

Теперь самое время для запуска этой СУБД:

# systemctl start mariadb.service

Также обязательной мерой является установка root-пароля и настройка некоторых других опций :

# mysql_secure_installation

Закончив работу с MySQL перейдем к более глубокой настройке Apache. Убедившись в нормальной работе основных служб мы можем перейти к созданию директорий для наших сайтов.

Их структура будет такова:

/home/ — в этой директории будут содержаться сайты

/home/site.ru/ — здесь будет находиться каждый из отдельных сайтов

/home/site.ru/www/ — в этой директории разместятся файлы каждого конкретного сайта

/home/site.ru/logs/ — это место для лог-файлов

/home/site.ru/tmp/ — в эту директорию отправятся временные файлы

В директории /etc/httpd/conf.d/ для удобства мы будем содержать конфигурационные файлы каждого из сайтов, находящихся на нашем VPS.

В качестве примера приведем содержание конфигурационного файла для сайта site.ru (его имя должно быть site.conf):

Если на вашем VPS под управлением CentOS будет несколько сайтов, то такой файл нужно будет создать для всех них.

После того, как закончите, снова перезагрузите Apache:

# service httpd restart

Если что-то не сработает, то отчет об ошибках можно будет найти в /var/log/httpd/.

Завершающим этапом базовой настройки VPS на CentOS станет настройка и установка PHPMyAdmin.

В это статье мы будем рассматривать ручной способ инсталляции. Для того, чтобы это сделать нам нужен wget - специальный менеджер загрузок, устанавливается он довольно просто:

# yum -y install wget

Далее нужно перейти на домашнюю страницу проекта PHPMyAdmin http://www.phpmyadmin.net/home_page/downloads.php и найти ссылку на самую свежую версию PHPMyAdmin с поддержкой нескольких языков в формате tar.gz. Э ту ссылку необходимо просто скопировать.

Затем введите команду:

# cd /var/www/html/

После этого нужно загрузить PHP My Admin:

# wget https://files.phpmyadmin.net/phpMyAdmin/4.8.1/phpMyAdmin-4.8.1-all-languages.zip

В указанной директории должен быть загруженный архив phpMyAdmin, его нужно распаковать:

# tar xzf phpMyAdmin-4.8.1-all-languages.zip

Будет создана директория phpMyAdmin-4.8.1-all-languages, которую надо переименовать в phpmyadmin:

# mv phpmyadmin

Приводим файл /etc/httpd/conf.d/phpMyAdmin.conf к виду:

Order allow,deny
Allow from all

Внимание! Данные настройки позволят всем видеть ресурс phpMyAdmin. Рекомендуем установить дополнительную авторизацию на раздел либо использовать другие способы органичения доступа.

Загруженный архив можно удалить, т.к. он больше нам не понадобится:

# rm phpMyAdmin-4.8.1-all-languages .tar.gz

На этом процесс установки PHPMyAdmin закончен. Его работу можно проверить, перейдя по адресу вида:

https://IP-адрес_вашего_VPS/phpmyadmin/

Вместе с окончанием установки PHPMyAdmin окончена и базовая настройка VPS-сервера, управляемого CentOS.

В этой статье мы разберем основные принципы настройки VPS\VDS сервера. Если у вас есть вопрос, на который статья не дает ответ - задавайте их в форме под статьей, мы постараемся ответить вам на имейл.

  • Настройка виртуального сервера

Как перезапустить VPS\VDS-сервер?

Есть два способа перезапуска виртуального сервера:

  1. Через панель управления (если она есть). Т.к. панели управления разные, мы не можем рассказать подробно как это сделать.
  2. Зайти на сервер через программу PuTTY по защищенному протоколу SSH и ввести в командной строке команду:

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

Какое ПО не работает на виртуальном сервере?

Используемые технологии виртуализации подразумевают под собой некоторые ограничения в плане установки программного обеспечения. Т.к. часто программы требуют работы напрямую с железом, и ясное дело, что хостер не может позволить установить вам ПО, которое повлияет на работу всего сервера. В то время, как вам разрешается менять настройки только виртуальной машины, которая создана специально для вас. В итоге, скорее всего не получится установить:

  • Антивирус, который будет в режиме "проактивной защиты". Рекомендуется использовать только те, которые работают в режиме сканирования.
  • Не пытайтесь создать виртуальную сетевую карту, вряд ли это получится.
  • Драйвера защиты 1С.
  • Также не получится установить драйвера, которые требуют реальных (физических) устройств.
  • Не рекомендуется использовать программы, которые помогают восстанавливать дисковую память, или производят с ней похожие действия.

Как изменить часовой пояс в Linux-сервере?

Время на сервере меняется с помощью таких команд (вводим в консоли):

rename /etc/localtime /etc/localtime.old
ln -s /usr/share/zoneinfo/Europe/Kiev /etc/localtime
hwclock --systohc --utc
ntpdate pool.ntp.org

Важно! При использовании виртуализации OpenVZ это решение (как собственно и любое другое) не сработает, т.к. в OpenVZ все виртуальные машины работают с часовым поясом физической ноды.

Итак, закажем и настроим свой собственный VPS . Заходим на https://www.hetzner.de/, в верхнем меню выбираем VServer (виртуальный сервер). Давайте выберем средний по цене, но вроде как с неплохими характеристиками: vServer CX30

Обратим внимание на цену: на немецком он предлагается за 14,16€ / Monat (14,16 евро в месяц), а после переключения на русский язык или USA: € 11.90 per month / 11,90€ / месяц.

Что за? Да, немцы своим дороже что ли продают? У них денег, видимо больше. Да ладно, переведём евро на рубли, сейчас Яндекс показывает 63,57 руб./ 1EUR – курс ЦБ РФ на 28/12/2016. Округлим до 65, получается сумма менее 1.000 руб: 11,90€ * 65 руб. = 773.50 руб/месяц.

Я думаю, неплохо, особенно после того как посмотрим на предлагаемую конфигурцию сего чуда:
Benefits: 2 vCores, RAM 4 GB RAM, SSD 100 GB, Connection: 1 Gbit/s NIC, Traffic: 8 TB, Snapshots: 3 . Что в переводе на русский означает 2 ядра (виртуальных), 4 гига оперативки, диск на 100 гигов (SSD), скорость связи 1 Гигабит/секунда, предел трафика – 8 Терабайт. Сразу замечу, что в комментарии указано, что при превышении предела трафика за месяц скорость подключения снизится до 10 Мегабит в секунду, но сервер по прежнему будет доступен. Да, и ещё в комплектацию входит поддержка до 3 снэпшотов, так что при желании можно откатиться.

Заказываем сервер

Ну что, друзья, неплохо за такие деньги или как? ОК, поехали! Вперед, без сомнений, этот сервер будет наш. Нажимаем кнопочку “Order now ” (“Заказать ” – да, сайт Hetzner.de поддерживает русский в том числе, да вообще много языков, но вот насчёт самой тех.поддержки не уверен, думаю, английским обойдёмся если что). А сама админка сервера (https://robot.your-server.de/server) у меня на английском, я честно говоря, доволен и так.

Operating systems without pre-installed control panel

  • CentOS 6.8 minimal
  • CentOS 7.2 minimal
  • Debian 8.6 LAMP
  • Debian 8.6 minimal
  • openSUSE 42.1 minimal
  • Ubuntu 16.04.1 LTS minimal
  • Ubuntu 16.10 minimal
  • Windows Server 2012 R2 Datacenter Edition (Price (monthly): € 130.25 / Setup (once): € 0.00)
  • Windows Server 2012 R2 Standard Edition (Price (monthly): € 21.01 / Setup (once): € 0.00)

Operating systems with pre-installed control panel

  • CentOS 7.2 + cPanel
  • CentOS 7.2 + Plesk
  • Debian 8.6 + Plesk
  • Ubuntu 16.04.1 LTS + Plesk
  • Windows Server 2012 R2 Datacenter Edition + Plesk (Price (monthly): € 130.25 / Setup (once): € 0.00)
  • Windows Server 2012 R2 Standard Edition + Plesk (Price (monthly): € 21.01 / Setup (once): € 0.00)

То есть два списка – без контроль-панели и с ней (cPanel/Plesk).

Ребята, мы выбираем – Ubuntu 16.10 minimal без всяких панелей. Это минимальная система, в ней как я понял, дополнительно будут установлены основные системные утилиты (coreutils) и SSH. Как раз то, что нам нужно. Всё остальное – NGINX/PHP/MYSQL/POSTFIX/DOVECOT/PUREFTPD/SpamAssassin/FAIL2BAN и т.д. и т.п. (по-русски etc. ) мы установим сами, своими собственными ручками, тем более это не так уж и сложно и не так уж и долго, в частности благодаря APT ‘у.

На нашем сервере будет работать 3-4 сайта на NGINX/PHP-FPM , крутится радио и, возможно, экспериментальный сайтик на node.js . Также мы поставим FFMPEG и ImageMagic для беспрепятственной обработки видео/аудио/графики.

Потом, если у Вас нет аккаунта на Hetzner.de, Вам предложат его создать, ничего особенного, доволньо небольшая форма, и опосля предложат ввести данные своей банковской карты. Так как я этому сайту доверяю (кто не знает Hetzner.de ?) я без страха ввожу все нужные данные и… получаю сервер в свои руки.

Рабочая среда в Windows 10

Мне на почту пришло письмо буквально через 5-10 минут, что сервер готов к работе, здесь же мне указали рутовый пароль и ip-адрес нашего сервера. Итак, открываем свой любимый SSH-клиент, например, Putty и поехали!

Да, кстати, в своей Windows 10 я использую связку WinSCP + Putty . То есть захожу на файловую систему сервера под рутом через WinSCP по SFTP протоколу, здесь же могу копировать/удалять/править в виндовом редакторе (мой любимый сейчас AkelPad ) любой файл, а нажав на кнопочку Ctrl+P (Open session in PuTTY ) я моментально, без ввода пароля, попадаю в консоль PuTTY (конечно, всё это надо настроить в WinSCP предварительно, что делается буквально в несколько кликов мышки).

Настройка DNS

Лично я использую бесплатный Hurricane Electric Free DNS Management – https://dns.he.net/
А Hetzner.de предлагает подобную вещь за:

Nameserver Robot Administer DNS entries more information... Price (once): € 15.97 For Dedicated Root Server and vServer customers free of charge

Это 15,97 евро * 65 рублей = 1038,05 рублей. Это разовая оплата. Чем он лучше бесплатного? На бесплатный нельзя полагаться на 100%, хотя мы работаем с Hurricane Electric несколько лет и ни разу не было проблем (в отличие от https://entrydns.net/, который часто глючил, а потом стал просить денег, хоть и не больших).

Но тут нам раздумывать нечего – видите надпись – Free of charge for dedicated root server and vServer customers ? Да, для нашего виртульаного сервера он должен быть бесплатным. Но при заходе на https://robot.your-server.de/ мы нигде не видим ссылку на что-то подобное NS/DNS . Оказывается, его просто надо заказать дополнительно – заходим по ссылкам: Ordering – Domain Administration – Nameserver Robot – Order Product и видим:

Shopping cart Unit price Total price Monthly Setup Monthly Setup 1 x Nameserver Robot € 0.00 € 0.00 € 0.00 € 0.00 Total: € 0.00 € 0.00

Да, везде нули, в данном случае это хорошо, он для нас действительно вроде как бесплатен.

Но, повторяюсь, я использую Hurricane Electric , поэтому здесь не стал заказывать.

Как настроить начальные и самые необходимые NS записи для сайтов рассказано здесь, на этом блоге (на примере Hurricane Electric Free DNS Management ) – . На Hetzner’е, думаю, настравается всё подобным образом. Настраиваем всё под наш новый ip сервера.

Первые шаги

Итак, смотрим, что уже у нас в действительности есть, держа в уме, что всё же это виртуалка, а не полноценный сервер. Но у нас пока нет десятков тысяч – миллионов клиентов, чтобы держать полноценный сервер или кластер таких серверов.
Все команды я будут выполнять от рута, так как у меня нет паранойи по этому поводу, ты через sudo сможешь накосячить также как и не через sudo . Да ладно, это дело в куса а не принципа.
Нас встречает приглашние вида:
root@Ubuntu-1610-yakkety-64-minimal ~ #

FQDN

Заздадим Fully Qualified Domain Name:
# hostname beotiger
# echo beotiger > /etc/hostname
# vim /etc/hosts
ip-адрес нашего сервера site2.ru

Теперь перелогинимся и получим приглашение root@beotiger ~ #

Итак, версия:

# uname -a
Linux beotiger 4.8.0-32-generic #34-Ubuntu SMP Tue Dec 13 14:30:43 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

# cat /etc/issue
Ubuntu 16.10 \n \l

Сколько памяти свободно:

# free -h
total used free shared buff/cache available
Mem: 3.9G 218M 2.8G 17M 841M 3.4G
Swap: 0B 0B 0B

Дисковое пространство:

# df -h
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 396M 8.7M 387M 3% /run
/dev/sda1 94G 2.1G 87G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 396M 0 396M 0% /run/user/0

Итак, видим, что наша пока пустая система сжирает 218Мегабайт оперативки и 2.1Гиг нашего диска. Посмотрим, что будет после установки всех нужных нам сервисов! Для удобного просмотра состояние системы и процессов можно установить htop :

# apt install htop

Язык и timezone

Лично я предпочитаю английский в документации, сказывается давняя паранойя о плохом переводе. Поэтому локаль не меняю. А время всё же поменяю на московское, а то в логах буду путаться (я живу по московскому времени):

# apt install tzdata # dpkg-reconfigure tzdata

Выбираем пояс Europe/Moscow , и ребутнемся, вспомним времена Win98 (чтобы все наши уже запущенные службы стали использовать новый часовой пояс в логах и т.п.):

# reboot

Синхронизация времени

Внимание! NTP не нужен, если есть timesyncd и мы не собираемся выступать в роли ntpd сервера. Пакет: systemd: /lib/systemd/systemd-timesyncd
# timedatectl status
Local time: Fri 2016-12-30 12:13:22 MSK
Universal time: Fri 2016-12-30 09:13:22 UTC
RTC time: Fri 2016-12-30 09:13:22
Time zone: Europe/Moscow (MSK, +0300)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

Строка NTP synchronized: yes говорит о том, что время синхронизируется успешно.

Устанавливаем LEMP-стек: NGINX + PHP 7.0 + MySQL

LAMP: Linux Apache MySQL PHP – минимальная готовая среда веб-разработки. Linux у нас есть, Apache мы поменяем на Nginx. Т.е. LAMP -> LEMP (Linux Nginx MySQL PHP). Итак, ставим, настраивать будем позже:

NGINX

NGINX самая простая и мощная вещь, как раз то, что я люблю больше всего:

# apt install nginx

Всё, у нас есть рабочий сервер. Уже можно зайти на http://ip-нашего-сервера и узреть стандартную дефолтную страницу nginx. Дефолтная папка сайта /var/www/html. Мы её трогатиь не будем, когда поставим PHP/MySQL, займёмся детальной настройкой и связкой NGINX+PHP7 (напомню, будем добавлять несколько сайтов)

Текущая версия nginx:

# nginx -v
nginx version: nginx/1.10.1 (Ubuntu)

Посмотреть текущие модули nginx (где-то видел хак на stackoverflow):

# 2>&1 nginx -V | tr -- - "\n" | grep _module
http_ssl_module
http_stub_status_module
http_realip_module
http_auth_request_module
http_addition_module
http_dav_module
http_geoip_module
http_gunzip_module
http_gzip_static_module
http_image_filter_module
http_v2_module
http_sub_module
http_xslt_module
stream_ssl_module
mail_ssl_module

В стандартном nginx -пакете есть только самые необохдимые модули. Если Вам нужны допонлительные модули, например, MP4, совсем не обязательно перекомпилировать nginx с сорцов.
Добавить модули в nginx можно так (ещё не пробовал):

# apt install nginx-extras

Возможная конфигурация с использованием модуля mp4:

Location /video/ {
mp4;
mp4_buffer_size 1m;
mp4_max_buffer_size 5m;
mp4_limit_rate on;
mp4_limit_rate_after 30s;
}

Смотрим, что содержиться в nginx-extras:

# apt show nginx-extras
Package: nginx-extras
Version: 1.10.1-0ubuntu1.2
Priority: optional
Section: universe/httpd
Source: nginx
Origin: Ubuntu
Maintainer: Ubuntu Developers
Original-Maintainer: Kartik Mistry
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1,886 kB
Provides: httpd, httpd-cgi, nginx
Depends: nginx-common (= 1.10.1-0ubuntu1.2), perl (>= 5.22.2-3), perlapi-5.22.2, libc6 (>= 2.14), libexpat1 (>= 2.0.1), libgd3 (>= 2.1.0~alpha~), libgeoip1, libluajit-5.1-2, libpam0g (>= 0.99.7.1), libpcre3, libperl5.22 (>= 5.22.2), libssl1.0.0 (>= 1.0.2~beta3), libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25), zlib1g (>= 1:1.1.4)
Suggests: nginx-doc (= 1.10.1-0ubuntu1.2)
Conflicts: nginx-core, nginx-full, nginx-light
Breaks: nginx (Много всего, нужно ли оно нам сейчас?! Как подключать/отключать нужные модули при запуске сервера/службы?

PHP 7.0

Конечно, будем стаить семёрку. По заявлению многих, она намного быстрее пятёрки. Не знаю, не проверял, но охотно верю! Заметьте, что пакет PHP7.0, который описывается так:

Php7.0/yakkety,yakkety,yakkety,yakkety 7.0.8-3ubuntu3 all
server-side, HTML-embedded scripting language (metapackage)

Предложит нам поставить apache, я не знаю почему, что в головах творится у этих собирателей пакетов под Юбунту? Сами смотрите:

# apt install php7.0 apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 php-common php7.0-cli php7.0-common php7.0-json php7.0-opcache php7.0-readline psmisc ssl-cert apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php7.0 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 php-common php7.0 php7.0-cli php7.0-common php7.0-json php7.0-opcache php7.0-readline psmisc ssl-cert 0 upgraded, 19 newly installed, 0 to remove and 0 not upgraded. Need to get 5,066 kB of archives. After this operation, 20.6 MB of additional disk space will be used. Do you want to continue? n

Nooooooooo, тут нажимаем n, нет, nicht, nope, ни в коем случае. Вы что творите, сборщики пакетов для Убунты?

Пакет php7.0-fpm:

Php7.0-fpm/yakkety,yakkety 7.0.8-3ubuntu3 amd64
server-side, HTML-embedded scripting language (FPM-CGI binary)

# apt install php7.0-fpm Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: php-common php7.0-cli php7.0-common php7.0-json php7.0-opcache php7.0-readline psmisc Suggested packages: php-pear The following NEW packages will be installed: php-common php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-opcache php7.0-readline psmisc 0 upgraded, 8 newly installed, 0 to remove and 0 not upgraded. Need to get 3,570 kB of archives. After this operation, 14.3 MB of additional disk space will be used. Do you want to continue? Y Creating config file /etc/php/7.0/cli/php.ini with new version Setting up php7.0-fpm (7.0.8-3ubuntu3) ... Creating config file /etc/php/7.0/fpm/php.ini with new version Created symlink /etc/systemd/system/multi-user.target.wants/php7.0-fpm.service → /lib/systemd/system/php7.0-fpm.service.

ИЗ: https://php-fpm.org/
PHP-FPM (FastCGI Process Manager) альтернатива PHP FastCGI со множеством новых полезных возможностей, подходящих для сайтов любых размеров, особенно для загруженных сайтов. Включают: Адаптивный запуск процессов! Статистика! These features include: Adaptive process spawning (NEW!) Basic statistics (ala Apache"s mod_status) (NEW!)

Итак, мы видим, что установились основные пакеты PHP7.0 - common , cli (для вызова PHP из командной строки), fpm - как раз то, что нам нужно для связи с NGINX, нашим вебсервером, json - полезная штука, мы её применяем практически во всех наших проектах, особенно основанных на AJAX, opcache - кэширование, readline - возможность проводить с PHP сессию типа интерактивного шелла, подробнее см. здесь: http://php.net/manual/en/features.commandline.interactive.php

Доустановим некоторые наиболее важные и нужные PHP-пакеты, часто используемые не только в наших проектах:

# apt install php7.0-curl php7.0-gd php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-sqlite3 ... The following additional packages will be installed: libcurl3 libmcrypt4 Suggested packages: libmcrypt-dev mcrypt The following NEW packages will be installed: libcurl3 libmcrypt4 php7.0-curl php7.0-gd php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-sqlite3

curl - общение с сетью из PHP ч/з удобный CURL API, gd - рисование графических примитов и текста, mbstring - поддержка мультибайтовых строк, mcrypt - криптование, кому оно сейчас не треба)), mysql и sqlite3 - именно эти БД я использую в своих проектах, вам могут понадобиться другие БД, например pgsql или sybase. Вообще список доступных пакетов PHP 7 можно посмотреть например так:

# apt search php7 Sorting... Done Full Text Search... Done libapache2-mod-php7.0/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 server-side, HTML-embedded scripting language (Apache 2 module) libphp7.0-embed/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 HTML-embedded scripting language (Embedded SAPI library) php-all-dev/yakkety,yakkety,yakkety,yakkety 1:44 all package depending on all supported PHP development packages php-symfony-polyfill-php70/yakkety,yakkety,yakkety,yakkety 1.2.0-1 all Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions php7.0/yakkety-updates,yakkety-updates,yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 all server-side, HTML-embedded scripting language (metapackage) php7.0-bcmath/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 Bcmath module for PHP php7.0-bz2/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 bzip2 module for PHP php7.0-cgi/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 server-side, HTML-embedded scripting language (CGI binary) php7.0-cli/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 command-line interpreter for the PHP scripting language php7.0-common/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 documentation, examples and common module for PHP php7.0-curl/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 CURL module for PHP php7.0-dba/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 DBA module for PHP php7.0-dev/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 Files for PHP7.0 module development php7.0-enchant/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 Enchant module for PHP php7.0-fpm/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 server-side, HTML-embedded scripting language (FPM-CGI binary) php7.0-gd/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 GD module for PHP php7.0-gmp/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 GMP module for PHP php7.0-imap/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 IMAP module for PHP php7.0-interbase/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 Interbase module for PHP php7.0-intl/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 Internationalisation module for PHP php7.0-json/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 JSON module for PHP php7.0-ldap/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 LDAP module for PHP php7.0-mbstring/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 MBSTRING module for PHP php7.0-mcrypt/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 libmcrypt module for PHP php7.0-mysql/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 MySQL module for PHP php7.0-odbc/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 ODBC module for PHP php7.0-opcache/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 Zend OpCache module for PHP php7.0-pgsql/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 PostgreSQL module for PHP php7.0-phpdbg/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 server-side, HTML-embedded scripting language (PHPDBG binary) php7.0-pspell/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 pspell module for PHP php7.0-readline/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 readline module for PHP php7.0-recode/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 recode module for PHP php7.0-snmp/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 SNMP module for PHP php7.0-soap/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 SOAP module for PHP php7.0-sqlite3/yakkety-updates,yakkety-updates,now 7.0.13-0ubuntu0.16.10.1 amd64 SQLite3 module for PHP php7.0-sybase/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 Sybase module for PHP php7.0-tidy/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 tidy module for PHP php7.0-xml/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 DOM, SimpleXML, WDDX, XML, and XSL module for PHP php7.0-xmlrpc/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 XMLRPC-EPI module for PHP php7.0-xsl/yakkety-updates,yakkety-updates,yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 all XSL module for PHP (dummy) php7.0-zip/yakkety-updates,yakkety-updates 7.0.13-0ubuntu0.16.10.1 amd64 Zip module for PHP php7cc/yakkety,yakkety 1.1.0-1 amd64 command line tool to detect PHP 7 incompatible code

MySQL

Кто-то ставит MariaDB, возможно, ожидая подвоха от Oracle, но я как-то прикипел к MySQL:

# apt install mysql-server

Building dependency tree

The following additional packages will be installed:




mysql-server-5.7 mysql-server-core-5.7
Suggested packages:
libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.0-5
libfcgi-perl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl
libhttp-date-perl libhttp-message-perl libio-html-perl liblwp-mediatypes-perl
libtimedate-perl liburi-perl mysql-client-5.7 mysql-client-core-5.7 mysql-common
mysql-server mysql-server-5.7 mysql-server-core-5.7
0 upgraded, 21 newly installed, 0 to remove and 0 not upgraded.
Need to get 20.3 MB of archives.
After this operation, 172 MB of additional disk space will be used.

Твикать mysql пока не будем, если нагрузки будут большими, тогда пусть голова болит.

Связываем Nginx с PHP, создаём сайты

Итак, мы установили полный стек LEMP, теперь будем создавать сайты, создадим 3 сайта, остальные добавляем по подобию.

Названия и адреса наших сайтов:
1. site.ru
2. site.org
3. site.com

Для каждого сайта создадим в каталоге /var/www одноименные с именем сайта папки: site.ru site.org site.com. В каждой из этих папок создадим три подпапки:

  • tmp - для сессий и загрузок файлов
  • log - для логов nginx
  • web - для www данных (само содержимое сайта)

cd / var/ www mkdir -p site.ru/ { tmp,web,log} mkdir -p site.org/ { tmp,web,log} mkdir -p site.com/ { tmp,web,log}

Также для каждого сайта будем создавать своего юзера с именам web1, web2, web3 и т.д. (при добавлении 4-го сайта создадим юзера web4, см. ниже). для каждого юзера будем использовать группу www-data.

Итак, добавляем пользователей и устанавливаем права доступа на соотв. папки. Все команды напомню осуществляем под root"ом:

useradd -m -d / var/ www/ site.ru -s $(which bash ) -G www-data web1 useradd -m -d / var/ www/ site.org -s $(which bash ) -G www-data web2 useradd -m -d / var/ www/ site.com -s $(which bash ) -G www-data web3 cd / var/ www chown web1:www-data -R site.ru chown web2:www-data -R site.org chown web3:www-data -R site.com passwd web1 passwd web2 passwd web3

Запомним пароли для пользователей web1, web2 и web3, они пригодятся нам далее для доступа к сайтам через FTP (см. далее по тексту).

PHP конфиг

Создадим конфигурационные файлы PHP-FPM для каждого юзера/сайта. Каждый сайт у нас будет обслуживаться своими PHP-FPM процессами, чтобы распределить нагрузку по всем сайтам. Названия конф файлов web.conf, они находятся в папке /etc/php/7.0/fpm/pool.d, PHP-FPM при запуске подключает всё оттуда. Итак, пример конфигурации для сайта site.ru (юзера web1):

cd / etc/ php/ 7.0 / fpm/ pool.d vim web1.conf

Содержимое web1.conf:

listen = /run/php/php7.0-fpm1.sock
listen.owner = web1
listen.group = www-data
listen.mode = 0660

user = web1
group = www-data

pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0

php_admin_value = /var/www/site.ru/web:/var/www/site.ru/tmp
php_admin_value = /var/www/site.ru/tmp
php_admin_value = /var/www/site.ru/tmp
php_admin_value = "/usr/sbin/sendmail -t -i"

security.limit_extensions = .php .html

Отметьте параметры:

listen = /run/php/php7.0-fpm1.sock - указываем на каком сокете будет слушать процесс PHP-FPM, он нам пригодится для настройки NGINX (см. ниже).

listen.owner = web1
listen.group = www-data - владелец/группа прав доступа к сокету

user = web1
group = www-data - владелец/группа запущенного процесса при подключении к сокету

php_admin_value - указываем, в какие папки будет иметь доступ владелец процесса
php_admin_value - указываем, в какой папке будут храниться сессии
php_admin_value - указываем, в какую папку будут скачиваться файлы (upload)
php_admin_value - команда отправки почты, иcпользуемая функцией PHP mail . Настройкой почты мы займёмся чуть позже.

Для остальных двух сайтов - копируем файл web1.conf и поменяем юзера (web1 -> web2 -> web3), сокет - /run/php/php7.0-fpm1.sock -> /run/php/php7.0-fpm2.sock -> /run/php/php7.0-fpm3.sock и папку site.ru -> site.org -> site.com

cd / etc/ php/ 7.0 / fpm/ pool.d cp web1.conf web2.conf vim web2.conf cp web2.conf web3.conf vim web3.conf

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

Настройки сайтов хранятся в папке /etc/nginx/sites-available - доступные сайты. Чтобы сделать сайт активным и видимым nginx на него делают мягкую ссылку (симлинк) отсюда в папку /etc/nginx/sites-enabled - активные сайты.

Итак, заходим в папку /etc/nginx/sites-available и создаём файл для настроек первого сайта. Имя файла конечно же может быть любым, мы будем делать имена файлов в виде имён сайтов с добавления суффикса.vhost, чтобы показать, что это настройки виртуального хоста. А симлинки будем назвать по имени используемого пользователя, чтобы видеть, каким именно пользователем мы используем данный сайт. Эта информация может пригодится, например, ч/з полгода, если мы давно не будем заглядывать сюда и у нас вылетит из головы, каких пользователей под какие сайты мы задавали - в этом случае будет не обязательно копаться в файлах настроек Nginx и PHP. Итак, приступим:

cd / etc/ nginx/ sites-available/ vim site.ru.vhost ln -s site.ru.vhost / etc/ nginx/ sites-enabled/ web1

Полное содержимое файла site.ru.vhost :

Server { listen *:80; server_name site.ru www.site.ru; root /var/www/site.ru/web; index index.html index.php; error_log /var/www/site.ru/log/error.log; access_log /var/www/site.ru/log/access.log combined; location ~ /\. { deny all; access_log off; log_not_found off; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~* \.(js|css|png|jpg|jpeg|gif|svg)$ { expires max; # log_not_found off; } location ~ \.(php|html)$ { try_files /d58f8ccd9bffa83ebec930554209111f.htm @php; } location @php { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/run/php/php7.0-fpm1.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; } }

Бегло пробежимся по настройкам. Итак,

Root /var/www/site.ru/web;

Как мы и говорили вначале, корень сайтов будет лежать в папке web.

Location ~ /\. {
deny all;
access_log off;
log_not_found off;
}

Этот блок говорит о том, чтобы закрыть доступ ко всем файлам и папкам, начинающимся с точки (`.`). Если вам это не нужно, этот блок можно удалить.

Location @php {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php/php7.0-fpm1.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
}

Этот блок связывает NGINX с PHP-FPM ч/з сокет /run/php/php7.0-fpm1.sock - именно этот сокет мы задавали в web1.conf в качестве параметра для listen.

Остальные сайты делаем по образу и подобию site.ru.vhost - копируем, меняем в файле имя сервера и корневой путь к сайту (параметры server_name и root ), не забываем исправить пути в error_log и access_log, и главное - не забудем указать другой сокет в параметре fastcgi_pass - это будет unix:/run/php/php7.0-fpm2.sock для site.org и unix:/run/php/php7.0-fpm3.sock для сайта site.com . После создания файлов в папке sites-available делаем на них симлинки в папку sites-enabled:

cd / etc/ nginx/ sites-available/ cp site.ru.vhost site.org.vhost vim site.org.vhost ln -s site.org.vhost / etc/ nginx/ sites-enabled/ web2 cp site.ru.vhost site.com.vhost vim site.com.vhost ln -s site.com.vhost / etc/ nginx/ sites-enabled/ web3

После создания и каждого изменения конфигурационых файлов следует перезапускать соотв. службу. Мы меняли конфиги для PHP-FPM и NGINX, поэтому выполняем следующие две команды:

service nginx reload service php7.0-fpm reload

Если нет ошибки в запуске служб, заходим на наши сайты и любуемся ими! Для проверки создадим файл 1.php с содержимым:

Закинем его в папку /var/www/site.ru/web .
Теперь при заходе на site.ru/1.php мы должны увидеть экран с текущими настройками PHP, типа такого:

Смотрим текущие параметры, подключенные модули PHP и убедждаемся в том, что всё вроде настроено как надо. Тоже самое повторим для сайтов site.org и site.com .

Ещё добавлю один нюанс - иногда организация нашего сайта требует, чтобы все запросы к сайту шли через один шлюз, обычно это index.php . То есть какой бы путь мы ни указали при обращении к сайту, управление будет передано именно index.php . В nginx есть несколько способ организовать подобное и я приведу способ, который используем мы для одного из наших сайтов.
Итак, вот конфиг NGINX для сайта, к которому все запросы (правда, кроме обращения к папке inc , в которой у нас хранятся публичные ресурсы - картинки, JavaScripts и CSS-файлы), идут напрямую index.php, а там мы уже решаем, что делать с данным запросом:

Server { listen *:80; server_name site.com www.site.com; root /var/www/site.com/web; index index.html index.php; error_log /var/www/site.com/log/error.log; access_log /var/www/site.com/log/access.log combined; location ~ /\. { deny all; access_log off; log_not_found off; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~* \.(js|css|png|jpg|jpeg|gif|svg)$ { expires max; # log_not_found off; } location ~ \.(php|html)$ { try_files /d58f8ccd9bffa83ebec930554209111f.htm @php; } location @php { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/run/php/php7.0-fpm3.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; } location /inc/ {} location / { rewrite ^ /index.php last; } }

В этом конфиге самые интересные такие блоки:

Location /inc/ {}
location / {
rewrite ^ /index.php last;
}

Первый блок приказывает nginx обрабатывать путь к папке inc как есть, а второй блок все запросы перенаправляет файлу index.php .

Добавляем 4-ый сайт: site2.ru - web4

cd / var/ www mkdir -p site2.ru{ tmp,web,log} useradd -m -d / var/ www/ site2.ru -s $(which bash ) -G www-data web4 passwd web4 chown web4:www-data -R / var/ www/ site2.ru cp / etc/ php/ 7.0 / fpm/ pool.d/ web3.conf / etc/ php/ 7.0 / fpm/ pool.d/ web4.conf vim / etc/ php/ 7.0 / fpm/ pool.d/ web4.conf cp / etc/ nginx/ sites-available/ site.com.vhost / etc/ nginx/ sites-available/ site2.ru.vhost vim / etc/ nginx/ sites-available/ site2.ru.vhost ln -s / etc/ nginx/ sites-available/ site2.ru.vhost / etc/ nginx/ sites-enabled/ web4 service nginx reload service php7.0-fpm reload

Настройка FTP сервера

Прежде чем приступить к настройкам почты, настроим FTP сервер, чтобы можно было заходить по FTP(FTPS) в папку сайта и обновлять его. Инсталлируем pure-ftpd :

# apt install pure-ftpd
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
pure-ftpd-common
The following NEW packages will be installed:
pure-ftpd pure-ftpd-common
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 263 kB of archives.
After this operation, 796 kB of additional disk space will be used.
Do you want to continue? y

Настройка Pure-ftpd осуществляется оригинально - надо в папке /etc/pure-ftpd/conf создать файл с именем параметра и вписать требуемое значение в его содержимое. Странно, но ладно. Итак, давайте создадим исполняемый скрипт, который будет задавать нужные нам настройки и потом запустим его:

vim / root/ pureftpd-conf.sh #!/bin/sh echo "yes" > ChrootEveryone echo "50" > MaxClientsNumber echo "10" > MaxClientsPerIP echo "no" > VerboseLog echo "yes" > DisplayDotFiles echo "no" > ProhibitDotFilesWrite echo "yes" > NoChmod echo "yes" > NoAnonymous echo "yes" > DontResolve echo "15" > MaxIdleTime # 1 - simple or TLS, 2 - TLS only echo "2" > TLS # allow unux users FTPing echo "yes" > UnixAuthentication echo "1000" > MinUID

Кратко описание настроек: мы делаем chroot для всех, чтобы не лазали по всему нашему серверу, отображаем файлы начинающиеся с точки (в Юникс это типа скрытые файлы) и разрешаем их читать/писать, запрещаем анонимный вход, задаём 15 минут макс. возможного простоя, также обязуем всех клиентов использовать TLS (шифрование) - строка echo "2" > TLS . Конечно, рекомендуется всегда где возможно использовать шифрование, чтобы MIM (men in the middle) не могли перехватывать наши файлы. То есть перехватывать они смогут по-любому, но расшифровать - вряд ли. Недостаток шифрования - более медленная скорость передачи файлов, т.к. тратится время на шифровку/дешифровку. Чтобы полностью отключить шифрование, надо в TLS вписать 0, чтобы разрешить обычные и шифрованный трафик - сюда вписать единичку (1).
Также важен последний параметр echo "yes" > UnixAuthentication . Помните юзеров, которые мы создавали в связке PHP - NGINX (web1, web2 web3 и т.д.) Теперь мы можем использовать их также в качестве FTP-юзеров. Используем теже пароли, что мы задавали при их создании.

Для того, чтобы использовать TLS, создадим самоподписной сертификат:

# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout / etc/ ssl/ private/ pure-ftpd.pem -out / etc/ ssl/ private/ pure-ftpd.pem

После всех манипуляций перезапустим наш демон:

# service pure-ftpd restart

PureFTPD пишет логи в syslog. Смотреть:

# tail -f /var/log/syslog

Всё, теперь мы можем соеднияться по FTP(S) (S - secure), указывая пользователей web1,web2, web3 , при этом они по умолчанию будут попадать в свои домашние папки, которые являются папками их сайтов.

Настройка почты - Postfix + Dovecot

Итак, у нас есть работающию сайты и FTP доступ к ним, чтобы заливать/обновлять/удалять контент на этих сайтах. Также мы можем работать с базами данных MySQL/SQlite .

Для полноценной работы нам осталось настроить почту, чтобы отсылать/получать письма на своих сайтах или в своей системе. Система почты в общем случае состоит из двух компонентов MTA - mail transer agent, агент передачи почты и MDA - mail delivery agent, агент доставки почты. В качестве золотой пары мы будем использовать Postfix + Dovecot , как наиболее популярные на сегодня, и не зря, по-моему скромному мнению. Итак, инсталлируем пакеты, настраиваем конфиги и создаём почтовые домены и ящики. Поехали!

Шаг 1: Инсталлируем пакеты и устанавливаем сертификат

# apt install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql dovecot-pop3d
В диалоговом окне указываем: Internet Site, site.ru
Создаём ключ/сертификат dovecot.key и dovecot.pem:
# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/dovecot.key -out /etc/ssl/certs/dovecot.pem
Мои ответы на вопросы в порядке их возникновения: RU Volgograd Volgograd Justbeo CEO beotiger [email protected]

Проверяем доступность наших доменов для почты:
# dig MX site.ru +short @ns1.he.net
10 mail.site.ru.
# host mail.site.ru ns1.he.net

Using domain server:
Name: ns1.he.net
Address: 216.218.130.2#53
Aliases:

mail.site.ru has address 131.21.128.229

Шаг 2: Создаём базу данных MySQL, виртуальные домены, пользователей и альясы

Создадим особую БД для хранения наших виртуальных доменов, пользователей и альясов. Назовём её к примеру vmail . В этой базе создадим виртуальные домены под все наши 3 сайта, а также двух пользователя для двух сайтов:

# mysqladmin -p create vmail
mysql > GRANT SELECT ON vmail.* TO "vmail"@"127.0.0.1" IDENTIFIED BY "password";
mysql > FLUSH PRIVILEGES;
mysql> USE vmail;
mysql> CREATE TABLE `domains` (

`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)

mysql> CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql> CREATE TABLE `aliases` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Наши виртуальные домены. id по умолчанию начинается с 1:
mysql> INSERT INTO `domains` (`name`)
VALUES ("site.ru"), ("site.org"), ("site.com");

mysql>
VALUES
("1", ENCRYPT("pass1", CONCAT("$6$", SUBSTRING(SHA(RAND()), -16))), "[email protected]"),
("2", ENCRYPT("pass2", CONCAT("$6$", SUBSTRING(SHA(RAND()), -16))), "[email protected]");

Добавляем ещё одного пользователя для site.com, не забываем про правильный domain_id:
mysql> INSERT INTO `users` (`domain_id`, `password` , `email`)
VALUES ("3", ENCRYPT("pass3", CONCAT("$6$", SUBSTRING(SHA(RAND()), -16))), "[email protected]");

Note: Warning | 1287 | "ENCRYPT" is deprecated and will be removed in a future release. Please use AES_ENCRYPT instead

Добавляем альяс [email protected], который будет ссылаться на [email protected], то есть письмо на [email protected] уйдёт пользователю [email protected]. Важно - следует свериться с ид домена из таблицы domains, чтобы поле domain_id ему соответствовало:
mysql>
VALUES ("1", "[email protected]", "[email protected]");

Аналогично добавляем другие нужные альясы. Чтобы добавить глобальный альяс, который будет пересылать письма, уходящие на любой неопределенный адрес выбранного домена определенному пользователю данного домена:
mysql> INSERT INTO `aliases` (`domain_id`, `source`, `destination`)
VALUES ("1", "@site.ru", "[email protected]");

Завершаем сеанс работы с MySQL:
QUIT;

Шаг 3: Конфигурируем Postfix

Основные настройки Postfix находятся в двух файлах - main.cf и master.cf . В master.cf можно переопределять некоторые настройки для определённых служб (флаг -o - override, переопределить). Начнём с main.cf . Кратко. что мы тут делаем: используем шифрованние TLS, виртуальные домены и пользователей ч/з MySQL базу, Dovecot. переопределяем только указанные ниже настройки, остальные оставляем по умолчанию, как они были в main.cf изначально:

# cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
# vim /etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

# mydestination = $myhostname, site.com, localhost.com, localhost
mydestination = localhost, localhost.localdomain
myhostname = site.com
## Tells Postfix to use Dovecot"s LMTP instead of its own LDA to save emails to the local mailboxes.
virtual_transport = lmtp:unix:private/dovecot-lmtp
## Tells Postfix you"re using MySQL to store virtual domains, and gives the paths to the database connections.
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Создаём нужные файлы:

# vim /etc/postfix/mysql-virtual-mailbox-domains.cf
user = vmail
password = gR29eZ34
hosts = 127.0.0.1
dbname = vmail
query = SELECT 1 FROM domains WHERE name="%s"

# vim /etc/postfix/mysql-virtual-mailbox-maps.cf
user = vmail
password = gR29eZ34
hosts = 127.0.0.1
dbname = vmail
query = SELECT 1 FROM users WHERE email="%s"

# vim /etc/postfix/mysql-virtual-alias-maps.cf
user = vmail
password = gR29eZ34
hosts = 127.0.0.1
dbname = vmail
query = SELECT destination FROM aliases WHERE source="%s"

Проверка:

service postfix restart postmap -q site.ru mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf postmap -q [email protected] mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Первые две проверки должны вернуть 1, третья - email для альяса: [email protected]

vim /etc/postfix/master.cf

Submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

Проверим все установки Postfix и сделаем рестарт его (релоада недостаточно что ли?):

postconf -n service postfix restart

Шаг 4: Конфижим Dovecot

Создаём копии на всякий случай:

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig vim /etc/dovecot/dovecot.conf

...
!include_try /usr/share/dovecot/protocols.d
protocols = imap lmtp pop3

В данном материале я расскажу, как начать работу с VDS (Virtual Dedicated Server). Статья ориентирована на владельцев и администраторов сайтов, желающих попробовать этот вид хостинга, но не чувствующих полной уверенности в своих силах. На практике всё не так страшно, как может показаться на первый взгляд. Подразумевается, что вы имеете опыт работы с обычным хостингом и более или менее ориентируетесь в данном вопросе.

Сразу хочу обратить внимание на терминологический нюанс. Англоязычный термин «shared hosting» обычно переводят на русский как «виртуальный хостинг», что вносит путаницу. Так как и там, и там присутствует слово «виртуальный», некоторые пользователи считают, что «виртуальный хостинг» и «виртуальный выделенный сервер» это одно и то же. Нет, это совсем разные вещи.

Shared hosting , он же виртуальный хостинг, он же обычный хостинг — самый дешёвый и распространённый вид хостинг-услуг, когда множество сайтов разных клиентов размещено на одном веб-сервере. Эти сайты делят ресурсы сервера по определённым, довольно строгим правилам. Один из главных минусов shared хостинга — это то, что вы ограничены рамками того набора программного обеспечения, который предустановлен и настроен хостером, что при решении нестандартных задач может быть существенной проблемой. К тому же по мере роста вашего проекта может сложиться ситуация, когда на обычном хостинге ему банально перестанет хватать ресурсов.

VDS (Virtual Dedicated Server), он же VPS (Virtual Private Server) — более продвинутый и дорогой вид хостинг-услуг, когда клиенту выделяется отдельный сервер, полностью независимый от других клиентов данного хостинга. VDS является вашей «личной территорией» — это полноценная (хоть и виртуальная) машина, на которой вы можете использовать любое нужное вам программное обеспечение в любой конфигурации, не оглядываясь ни на кого. Аналогично обстоят дела и с использованием вычислительных ресурсов данного сервера — можно загружать его под завязку хоть все 24 часа в сутки, в рамках купленной конфигурации у вас нет никаких ограничений. В силу описанных преимуществ VDS часто оказывается золотой серединой между использованием shared хостинга и арендой/покупкой физического сервера.

Как понятно из названия статьи, речь в ней пойдёт именно про второй вариант. Сначала я расскажу о работе с сервером в общих чертах, затем кратко, в формате «вопрос-ответ» опишу способы решения некоторых типовых задач. Для примеров я буду использовать хостинг Timeweb, так как на данный момент у меня под рукой есть их сервер, куда я могу подглядывать и откуда делать скриншоты. У других хостеров всё устроено похожим образом.

Для настройки различных параметров VDS я буду активно использовать ISPmanager — программный продукт от компании ISPsystem, представляющий из себя панель управления компонентами веб-сервера с привычным большинству пользователей графическим интерфейсом. Работа через ISPmanager значительно облегчает конфигурирование системы и снижает порог вхождения для начинающих администраторов. Существуют и другие продукты с похожим функционалом, в том числе и бесплатные, однако использование именно ISPmanager обусловлено тем, что он является стандартом де-факто в данной области. Также я не обойду стороной командную строку, в Linux-системах без неё никуда.

Выбор конфигурации VDS

Итак, приступим к делу. Идём на сайт хостера в раздел VDS, выбираем нужный тариф, вводим информацию о себе или своей организации. Тут всё точно так же, как и в случае с обычным хостингом, единственное отличие — нужно дополнительно выбрать аппаратную конфигурацию сервера и операционную систему, а также определиться, нужно ли устанавливать ISPmanager. Если вы только начинаете знакомство с Linux и у вас нет специфических требований к ОС, рекомендую остановиться на Ubuntu. Выбор параметров «железа» зависит от планируемых задач, в первую очередь рекомендую ориентироваться на необходимые объёмы дискового пространства и ОЗУ. ISPmanager заказываем в версии Lite с оплатой помесячно. После того, как заказ сделан, потребуется некоторое время для развертывания сервера, после чего им можно будет начать пользоваться.

Способы управления сервером

Рассмотрим три основных элемента управления:

1. Панель управления от хостера. В случае с VDS она не сложнее аналогичной панели обычного хостинга. Более того, она даже проще, так как в ней отсутствуют некоторые привычные функции. Через панель хостера можно заказывать и оплачивать услуги, смотреть базовую статистику по работе сервера, общаться с техподдержкой. Также в данной панели присутствует весьма ограниченный набор органов управления техническими параметрами сервера. У Timeweb панель управления VDS выглядит так:

2. ISPmanager. А вот здесь в плане технических настроек уже есть где разгуляться. При помощи данного инструмента можно полноценно конфигурировать все основные компоненты веб-сервера — Apache/nginx, MySQL, PHP и другие. Через ISPmanager можно устанавливать и обновлять программное обеспечение, работать с файлами, базами данных, консолью, получать расширенную информацию о работе сервера. Выглядит ISPmanager 5 Lite так:

Чтобы зайти в ISPmanager, наберите в адресную строку браузера http://x.x.x.x:1500/, где x.x.x.x — IP-адрес вашего VDS (посмотреть его можно в панели управления хостера).

3. Командная строка, она же консоль операционной системы. Самый мощный и гибкий, но вместе с тем самый сложный для освоения и не всегда удобный интерфейс.

Основы работы с консолью

Остановимся подробнее на последнем пункте — командной строке. Обычно именно она является главным отпугивателем пользователей в деле освоения дел серверных. Но не так страшен чёрт, как его малюют. По большому счёту, поначалу можно обойтись без консоли вообще или свести общение с ней к минимуму. Однако, если вы планируете дальнейшую работу с серверами на Linux-системах, крайне рекомендуется освоить работу с командной строкой хотя бы в минимальном объёме.

Зайти в консоль можно несколькими способами:

  1. Через панель управления хостера. В таймвэбовской панели есть встроенный терминал, ссылка на который присутствует в главном меню.
  2. Через ISPmanager: Инструменты > Shell-клиент.
  3. Через SSH-клиент — например, PuTTY. Хоть этот способ и является классическим, но при наличии первых двух вариантов необходимости в нём обычно нет.

Вот некоторые базовые команды консоли:

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

ls — показывает содержимое заданного каталога, при использовании без аргументов — текущего.

pwd — отображает полный путь к текущему каталогу.

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

Также упомяну команду сlear (горячая клавиша Ctrl+L), которая очищает окно терминала. Это бывает полезно в случаях, когда на экран выведено слишком много информации и попросту начинает рябить в глазах.

Вопросы и ответы

Перейду к ответам на вопросы, которые на первых порах могут возникнуть при работе с сервером. Совсем очевидные вещи (например, где создать FTP-аккаунт или MySQL-базу), я рассматривать не буду, с этим любой способен разобраться самостоятельно, просто пройдясь по меню в ISPmanager. Для совсем ленивых в левом верхнем углу его панели имеется форма поиска, а в самом низу меню — раздел «Справка».

Как привязать домен к сайту?

Шаг 1: Прописываем домен в панели хостера: Домены > Перенести домен. Если на данном шаге возникает сообщение, что домен уже размещён другим пользователем, необходимо сначала удалить привязку этого домена в том аккаунте, где он размещён.

Шаг 2: Заходим в ISPmanager: Домены > WWW-домены, нажимаем кнопку «Создать», задаём имя домена и его настройки.

Шаг 3: Через панель регистратора указываем для нашего домена ns-сервера хостера. В случае с Timeweb они следующие:

ns1.timeweb.ru
ns2.timeweb.ru
ns3.timeweb.org
ns4.timeweb.org

Если вам необходимо создать поддомен, это делается точно так же, но без третьего шага.

Как узнать путь к папке сайта?

Через ISPmanager: Домены > WWW-домены, столбец «Корневая директория».

Где найти менеджер файлов?

В ISPmanager: Система > Менеджер файлов.

Как узнать объём занятого и свободного места на диске?

1) Через панель управления хостера: В разделе «Список VDS» на вкладке «Главная» блок «Свободное место на диске».

2) Через ISPmanager: На вкладке «Главная» в блоке «Информация о системе» кликаем по значению справа от надписи «Размер дискового пространства».

3) Через консоль: df -h

Как узнать объём занятой и свободной оперативной памяти?

1) Через ISPmanager: На вкладке «Главная» в блоке «Информация о системе» строчка «Оперативная память».

2) Через консоль: free -m

Как узнать нагрузку на процессор?

1) Общий график доступен через панель управления хостера: В разделе «Список VDS» на вкладке «Главная» блок «Процессор».

2) Аналогичный график есть в ISPmanager: На вкладке «Главная» блок «Ресурсы сервера».

3) Распределение нагрузки по процессам можно посмотреть через консоль: top (для выхода из режима мониторинга нажмите клавишу «q»).

Как узнать размер отдельной папки?

1) Через ISPmanager: Учётные записи > Пользователи > кликаем на пользователя, нажимаем кнопку «Войти» > Статистика > Использование диска > выбираем нужную папку. После просмотра не забудьте выйти из учётной записи пользователя, выбрав в правом верхнем углу в подменю учётной записи «Вернуться в root».

2) Через консоль: du -sh dirname

Как заархивировать/разархивировать папку с файлами?

Работа с архивами в ISPmanager доступна через менеджер файлов (кнопки «Архив» и «Извлечь»). Поддерживаются форматы ZIP и tar.

Архивация через консоль при помощи архиватора tar с gzip-сжатием: tar -cvzf archivename.tar.gz dirname

Архивация через консоль при помощи архиватора ZIP: zip -r archivename.zip dirname

Распаковка архива через консоль при помощи архиватора tar: tar -xvf archivename.tar

Распаковка архива через консоль при помощи архиватора ZIP: unzip archivename.zip

Как импортировать/экспортировать базу данных MySQL?

Через ISPmanager: Доп. приложения > phpMyAdmin. Данный способ удобен, но он не всегда работает.

Импорт через консоль: mysql -u username -p database_name

Экспорт через консоль: mysqldump -h hostname -u username -p database_name > dumpfile.sql

Как настроить параметры MySQL-сервера?

Через ISPmanager: Настройки > Серверы баз данных > MySQL > Кнопка «Настройки». Во многих случаях специфическая настройка MySQL не требуется, однако, иногда «подкрутить» некоторые параметры просто необходимо. Например, если вы используете 1C-Битрикс, производительность работы с базой данных при настройках по умолчанию будет довольно низкой, о чём вам сообщит встроенный в эту CMS бенчмарк.

Как изменить версию PHP?

Через ISPmanager: Настройки web-сервера > PHP > выбираем нужную версию, нажимаем кнопку «Как модуль Apache». Если требуемой версии PHP в списке нет, переходим: Настройки > Возможности. Здесь мы видим список установленного и доступного к установке ПО. Выбираем нужную нам альтернативную версию PHP, нажимаем кнопку «Изменить», ставим галочку «ISPsystem модуль PHP для Apache версии x.x», нажимаем «Применить изменения». Ждём, когда новая версия PHP установится, после чего возвращаемся к первому шагу, где включаем её как модуль Apache. Для получения максимальной производительности рекомендуется использовать самую свежую из версий PHP, с которой ваш сайт нормально работает.

Как установить расширения PHP?

Через ISPmanager: Настройки web-сервера > PHP > выбираем нужную версию PHP, нажимаем кнопку «Расширения». Далее ищем нужное расширение и включаем или отключаем его соответствующими кнопками.

Как настроить переменные PHP?

Через ISPmanager: Настройки web-сервера > PHP > выбираем нужную версию PHP, нажимаем кнопку «Настройка». Далее ищем и редактируем нужные переменные.

Как включить PHP-акселератор?

Рекомендую использовать Zend OPcache, который входит в стандартную поставку PHP, начиная с версии 5.5. Иногда он включен по умолчанию, иногда нет. Активируется OPcache через ISPmanager: Настройки web-сервера > PHP > выбираем нужную версию PHP, нажимаем кнопку «Расширения». Далее ищем расширение «opcache» и включаем его соответствующей кнопкой. Настройка акселератора осуществляется через переменные PHP (как их менять, рассмотрено в предыдущем пункте) и зависит от конфигурации сервера, используемого ПО и задач.

Как установить и включить nginx?

Через ISPmanager: Настройки > Возможности > выбираем «Веб-сервер (WWW)», нажимаем кнопку «Изменить». Ставим галочку напротив «Nginx», нажимаем «Применить изменения».

Как настроить работу сайта по HTTPS?

Для работы сайта по HTTPS необходим SSL-сертификат. Тут возможны следующие варианты:

1) Если вы хотите приобрести платный сертификат, это можно сделать через панель хостера в разделе «Лицензии и сертификаты». После выпуска сертификата он будет автоматически установлен на сервер, после чего сайт станет доступен по HTTPS.

2) Если у вас уже имеется сертификат, его нужно установить через ISPmanager: Настройки веб-сервера > SSL-сертификаты > Кнопка «Создать», тип SSL-сертификата: существующий. Заполняем поля формы, нажимаем «Завершить». После этого переходим в раздел Домены > WWW-домены, выбираем домен, нажимаем кнопку «Изменить», в поле «SSL-сертификат» выбираем установленный сертификат. Ставим галочки напротив пунктов «Защищенное соединение (SSL)», «HSTS» и, если требуется, «Перенаправлять HTTP-запросы в HTTPS».

3) Вы можете установить бесплатный сертификат от Let’s Encrypt. Для этого заходим в ISPmanager: Интеграция > Модули, где устанавливаем модуль Let’s Encrypt. После этого в разделе Настройки веб-сервера > SSL-сертификаты появится кнопка «Let’s Encrypt», нажав на которую вы можете инициировать выпуск сертификата для нужного домена. После того, как сертификат выпущен, он будет автоматически установлен на сервер. Продление сертификата происходит автоматически, вмешательства пользователя не требуется.

Как настроить кэширование и gzip-сжатие для файлов сайта?

Через ISPmanager: Домены > WWW-домены, выбираем домен, нажимаем кнопку «Изменить», прокручиваем страницу в самый низ до раздела «Оптимизация WWW-домена». В нём ставим галочки напротив «Настроить сжатие» и «Настроить кэширование». Рекомендуемый по умолчанию уровень сжатия — 5, период кэширования — 7 дней.

Вместо заключения

В данной статье я постарался рассмотреть основные моменты, связанные с первичной настройкой VDS. Очевидно, что это только верхушка айсберга, но я и не ставил перед собой задачи написать исчерпывающее руководство по данной теме. Скорее мне хотелось сделать краткую памятку, куда удобно подглядывать на начальных этапах освоения сервера. А дальше — гугл вам в помощь.