Настраиваем свой первый VDS сервер в роли веб-сервера. Что такое DNS, кратко

Данное руководство описывает полный процесс настройки VPS под ваши сайты, на вашем виртуальном сервере под Linux, используя Apache, PHP 7, MySQL, phpmyadmin, vsftpd как FTP, и другие мелкие утилиты. Все что я нашел в интернете или не полное, или местами не подходило к современным реалиям. Я переносил с обычного виртуального хостинга свой сайт, так как уперся в ограничения большинства хостеров.

Если вы планируете продавать хостинг или устанавливать панель управления (ISP Manager, cPanel , Plesk и т.п.), данный метод настройки не подойдет. Настройки для такого развертывания иные. PHP7 имеет ряд серьезных преимуществ в быстродействии и оптимизации по сравнению с PHP 5. Мои проекты на WordPress, к примеру, заметно быстрее работают. Важно знать: если у вас не сильно известная CMS с последними обновлениями, а какой-то самописный проект, не оптимизированный под PHP7, то возможны нестыковки.

Я использую в данном руководстве Ubuntu Server 14.04.4 LTS, также все здесь описанное подойдет для VPS\VDS на других Debian — подобных дистрибутивов. Подразумевается, что вы имеете базовые знания Linux и умеете работать с терминальной консолью. Я частично поясню азы, но все же.

Настраиваем

Итак, у нас есть свежеустановленная на VPS система и доступ по SSH. Логинимся на сервер под рутом.

1. Создадим себе пользователя. Работать под рутом без надобности — признак дурачины.

Adduser user

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

2. Добавляем нашего созданного пользователя в группу sudo, дабы выполнять команды из-под рута:

Usermod -a -G sudo user

Плюс, добавим самого себя в группу администраторов:

Sudo usermod -aG adm YourUserName

3. Выходим из системы (logout) и логинимся под своим новым созданным пользователем на SSH. С этого момента, если нам нужно выполнить команду от имени рута, мы используем операнд sudo перед остальными операндами команды (примеры ниже).

4. Стоит вам только опубликовать ваш сайт-адрес сервера VPS, как всяческие хакинговые боты начнут стучаться к вам на терминальный порт 22. Поэтому, обезопасим терминал VPS, сменив порт с 22 на чтото другое. Как новый порт, вводим любое число от 1 до 65535. Нельзя использовать для этого порты 80, 443, 3306, 22, 21 и 8080. Они заняты под другие сервисы нашего VPS.

Sudo nano /etc/ssh/sshd_config

Nano — консольный «блокнот». Наверняка вы уже с ним знакомы, но я напомню базовое управление: Ctrl+X — выход, Ctrl+O — сохранение, Ctrl+W — поиск, стрелки — перемещение курсора.

Ищем в открывшемся файле строку «Port 22», обычно она прямо сверху. Изменяем 22 на выбранный вами порт. Далее проматываем кнопкой PgDn до самого низа файла и дописываем каждую команду с новой строки:

AddressFamily inet PermitRootLogin no AllowUsers user

Первая команда ограничивает подключения только стандартом IPv4, отключая не нужный IPv6. Вторая запрещает логиниться в терминал под рутом. Третья запрещает вообще кому либо логиниться, кроме вас — подставляйте свой логин вместо user.

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

Sudo service ssh restart

5. Разлогинтесь из терминала (logout), и подключитесь к серверу заново, используя новый порт.

6. Обновим источники приложений и сами приложения:

Sudo apt-get update && sudo apt-get upgrade

Соглашаемся на установку обновлений нажав Y и Enter.

7. Если у вас не самой последней версии система, имеет смысл обновить дистрибутив до последнего подрелиза (необязательный шаг):

Sudo apt-get dist-upgrade

8. Ускоряем общую работу системы — Prelink и Preload. Prelink нужен для создания статичных адресов для библиотек, Preload — это небольшое приложение, которое следит за файлами наиболее часто используемых приложений, и предзагружает их в память, пока система простаивает.

Sudo apt-get install prelink sudo apt-get install preload

Sudo nano /etc/default/prelink

Откроется знакомый Nano, и там измените строку с PRELINKING=unknown на PRELINKING=yes. Не забываем сохранять перед закрытием, вы же запомнили уже, ага? Следующий шаг — добавляем в планировщик cron ежедневный запуск:

Sudo /etc/cron.daily/prelink

9. C системными предустановками пока закончим, ставим апач:

Sudo apt-get install apache2

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

Sudo apt-get install mysql-server

Установка может спросить адрес вашего сервера, указываем localhost, если вы пока не назначили внешний домен. Также задаем главный пароль базы данных, сложный, буквы-цифры-разный регистр. Если вы еще не догадались, напоминаю — все логины-пароли нужно записать и хранить в безопасном месте.

MySQL сервер последних версий корректно настроен для работы в нашем окружении, принимает запросы только от localhost. Поэтому, не лезем в конфиг.

11. Ставим php7. На момент написания статьи, файловые репозитории Ubuntu не содержат PHP7, поэтому нам нужно будет добавить неофициальный репозиторий и из него поставить php7:

sudo add - apt - repository ppa : ondrej / php

По окончанию добавления, спросит у вас окончательного согласия, подтверждаем на Y и Enter. Далее обновим список приложений и установим нужное:

Sudo apt-get update sudo apt - get install php7 . 0 - cli php7 . 0 - common libapache2 - mod - php7 . 0 php7 . 0 php7 . 0 - mysql php7 . 0 - fpm php7.0-mbstring php7.0-gd php7.0-curl

Набор модулей тут мной определен эксперементально. Во всех источниках указаны разные, где-то нет mbstring, но он нужен для phpmyadmin, админки для MySQL. Где-то отсутствует curl и gd, но они нужны для капчи и некоторых плагинов CMS. В любом случае, дополнительные модули можно всегда доставить после.

12. Поднастроим Apache. Перейдем (cd) в каталог с настройками апача:

Cd /etc/apache2

Отредактируем главный конфигурационный файл:

Sudo nano apache2.conf

Уже установленные переменные не трогаем, проматываемся в конец файла. Там добавляем каждую команду с новой строки:

ServerName localhost ServerSignature Off

Это задаст хост по умолчанию для самоопределения апача (localhost) и отключит отображение версии системы и сервера на страницах ошибок. Это небезопасно. Как всегда, сохраняем, закрываем.

13. Поднастроим PHP.

Cd /etc/php/7.0/apache2 sudo nano php.ini

Многие скрипты используют короткий тэг открытия, вместо полного, поэтому включим эту опцию, заменив Off на On (отсюда и далее указываю то, как должно быть, а не как было):

Short_open_tag = On

Раздвинем ограничения по памяти и загрузке файлов:

Memory_limit = 128M post_max_size = 64M

14. Установим phpmyadmin. Это графическая панель управления базами данных MySQL. Первый раз когда я его ставил из apt репозитория, он не взлетел. Оказалось, репозитории ubuntu не содержат последней версии phpmyadmin, которая понимает PHP7, так как и самого PHP7 в этих репозиториях тоже нет.

Лучше всего устанавливать в /usr/share:

Cd /usr/share

Качаем, на момент написания, последняя версия 4.6.0:

Sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.6.0/phpMyAdmin-4.6.0-all-languages.zip

Установим unzip, он понадобится:

Sudo apt-get install unzip

Разархивируем:

Sudo unzip phpMyAdmin-4.6.0-all-languages.zip

Переименуем папку:

Sudo mv phpMyAdmin-4.6.0-all-languages phpmyadmin

Прилепим права:

sudo chmod - R 0755 phpmyadmin

Отредактируем конфиг-файл апача, чтобы он знал, гдеи скать наш phpmyadmin:

Sudo nano / etc / apache2 / sites - available / 000 - default . conf

После «DocumentRoot /var/www/html» добавляем строки:

Alias / phpmyadmin "/usr/share/phpmyadmin/" < Directory "/usr/share/phpmyadmin/" > Order allow , deny Allow from all Require all granted

Все готово, перезапустим апач:

Sudo service apache2 restart

15. После всех манипуляций, у нас будет тестовая страница апача открываться в браузере по адресу вашего сервера, а phpmyadmin будет доступен по адресу http://вашсайт/phpmyadmin . Логин туда root, пароль — указанный при установке MySQL.

16. Создадим старницу phpinfo для проверки работы сервера:

Cd var/www/html sudo mkdir phpinfo cd phpinfo sudo nano index.php

Вставляем такой код в Nano и сохраняем:

Теперь по адресу http://вашсайт/phpinfo должна открываться сервисная страница с информацией о PHP и подключенных модулях, например:

Если все работает и отображается, скройте phpinfo, изменив название этой папки на какую-нибудь только вам известную билиберду:

Cd /var/www/html sudo mv phpinfo phpinfo312341

Прямой доступ по известному пути — дыра в безопасности VPS.

17. Поставим FTP. Используем vsftpd:

Sudo apt-get install vsftpd

Правим конфигурацию:

Sudo nano /etc/vsftpd.conf

Убедитесь, что параметры в этом файле соответствуют приведенным ниже. Если параметры закомментированы знаком #, раскомментируйте его, удалив #. Если параметра нет, добавьте вручную в конец файла:

Anonymous_enable=No local_enable=YES write_enable=YES

Перезапустим фтп:

Sudo service vsftpd restart

После этого, можно логиниться на сервер по FTP, используя логин и пароль от системы. C этим конфигом, у вас будет доступ ко ВСЕЙ операционной системе. Если вам нужно ограничить доступ к папкам, поищите в интернете руководства.

18. Резервное копирование. Альфа и Омега администрирования VPS. Бэкапы надо делать хотя бы раз в неделю. Следующий скрипт создает архив с бэкапом папок /var/www (где обычно лежат сайты), /etc, /var/log и /root. Также бэкапит все базы MySQL. Скрипт следует исполнять от имени рута из папки, в которой будут хранится бэкапы. Также, желательно внести файл скрипта в cron. Собственно, скрипт:

#!/bin/bash USER=root #юзер базы данных PASSWORD=password #пароль BACKUP=/media/Backup #куда сохранять бэкапы LOG=/var/log # директория для чистки старых логов OLD=30 # сколько дней хранить бэкапы (более старые будет удаляться) PREFIX=work # если несколько серверов - используйте разные префиксы, чтобы не путаться DATE=`date "+%Y-%m-%d"` echo "Backup database to $BACKUP" mkdir $BACKUP/$DATE.sql cd $BACKUP/$DATE.sql for i in `mysql -u $USER -p$PASSWORD -e"show databases;" | grep -v information_schema | grep -v Database`; do mysqldump -u $USER -p$PASSWORD $i > $DATE-$i.sql; done cd .. tar -cjf $BACKUP/$DATE-sql-$PREFIX.tar.bz2 ./$DATE.sql rm -rf ./$DATE.sql echo "Backup files to $BACKUP" tar -cjf $BACKUP/$DATE-files-$PREFIX.tar.bz2 \ /var/www/ \ /etc/ \ /var/log/ \ /root/ \ --exclude=$BACKUP echo "Deleting old backups and logs from $BACKUP & $LOG" find $LOG -type f \(-name "*.gz" -o -name "*.1*" \) -exec rm "{}" \; find $BACKUP -mtime +$OLD -exec rm "{}" \;

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

Допустим, у нас в корне будет папка /backup и в ней будет и скрипт, и сами резервные копии. Переходим в корень файловой системы:

Cd / sudo mkdir backup cd backup sudo nano start.sh

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

Sudo chmod +x start.sh

Теперь, командой:

Sudo ./start.sh

Мы запустим процесс бэкапа. Для среднего сайта на средней мощности VPS это занимает 5-10 минут. После окончания процесса, в папке /backup будут несколько архивов с резервными копиями. Как я говорил выше, лучше всего этот скрипт запихнуть в cron. Погуглите, как это сделать.

На этом основная настройка сервера закончена — мы получили полностью рабочий, современный и производительный веб-сервер на VPS. Я не затронул некоторые мелкие вопросы, связанные с настройкой доступов на веб-сервере, так как этим часто занимаются админы и на обычном виртуальном хостинге, которые как раз и перелезают со временем на VPS.

Полезные утилиты

Стоит упомянуть некоторые полезные утилиты, которыми я пользуюсь в администрировании, и которые могут пригодиться вам.

Это командная утилита для администрирования WordPress из терминальной консоли Linux. Умеет очень много, бэкапить, копировать данные в базе данных, отключать и включать плагины и так далее. Очень полезно, в случаях если у вас конфликт плагинов, или вы где-то накосорезили и админка сайта у вас отвалилась. Подробнее .

Multitail

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

Полный аналог «Диспетчера задач» из Windows для терминальной консоли. Очень полезная вещь для мониторинга процессов, памяти, загрузки и управления процессами. Ставиться командой:

Sudo apt-get install htop

И вызывается (кто бы думал) командой:

Let’s Encrypt

Бесплатный сервис для выдачи SSL сертификатов. Отличный вариант для перевода вашего сайта на HTTPS. Больше в моей отдельной статье .

Услуги

Если для вас все это сложно, вы не уверены в себе, или хотите дополнительной поддержки, то я готов взяться за перенос\установку вашего проекта на VDS\VPS или выделенный сервер. Более 5 лет опыта в администрировании сетевых и веб-проектов. В реальной жизни работаю системным администратором. Первичная консультация бесплатно! Свяжитесь со мной удобным для вас способом через раздел .

Здравствуйте! В этом уроке, я покажу, как установить CMS Joomla, на сервер VDS/VPS, управляемый из панели ISPmanager.

Примечание: Панель ISPmanager очень удачный программный продукт, созданный для управления веб-серверами, объединяя в едином интерфейсе, управление доменами, базами данных, почтовыми службами. А также управлять пользователя и организовывать многоуровневую систему прав пользователей.

В данной статье установка продемонстрирована работой на ISPmanager Lite версия 5.8.

Этапы установки Joomla 3 на VDS/VPS из ISPmanager

  • 1: Добавление домена;
  • 2: Создание базы данных;
  • 3: Закачка дистрибутива Joomla на сервер;
  • 4: Инсталляция Joomla с переводом.
  • 5: Проверка результата установки, авторизация в панели администрирования.

Пункт 1: Добавление домена

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

Домен нужно добавить на вкладке «WWW домены», группа «Домены».

На открытой вкладке заполняем все поля.

На фото вы видите, что сервер настроен с возможным включением защиты от DDoS атак. Вряд ли имеет смысл включать данную защиту на нерабочем сайте.

Итог: Домен с WWW добавлен. Сервер автоматом создал домен без WWW, что можно проверить на вкладке «Домены».

Примечание: Создание почтового домена не влияет на работу сайта, поэтому оставим эту тему для других статей.

На этом этапе важно решить и выбрать для сайта веб-сервер HTTP. Важно, чтобы в работе был задействован веб-сервер Apache. В этом случае вы сможете использовать SEO настройки Joomla и использовать файл htaccess. для управления url адресами сайта.

Есть мнение, что для CMS Joomla предпочтение в выборе веб-серверов ранжируется так:

  • UNIX\Apache\Fast CGI\eAccelerator (самая высокая скорость в сочетании с удобной работой).
  • UNIX\Apache\Fast CGI (тоже, но более доступна).
  • UNIX\Apache\mod_php (неудобная работа с правами CHMOD).
  • UNIX\Apache\CGI (не максимальная скорость, зато удобство работы и совместимость со всеми расширениями Joomla).

На моем сервере нет Fast CGI, поэтому я использую Apache\CGI. Данная настройка сервера, позволяет включить режим сжатия и режим кэширования. Они нужны для ускорения работы сайта. Сразу включим режим сжатия (рекомендована 5-я степень сжатия) и включим кэширования на срок 7 дней.

Пункт 2: Создание базы данных сайта Joomla

База данных в панели ISPmanager создается на вкладке «Базы данных», группа «Инструменты». На вкладке есть кнопка «Создать».

Обязательно, в целях повышения безопасности сайта, создаем нового пользователя для базы данных. Если у вас несколько сайтов и вы root пользователь VDS сервера, вы сможете управлять сразу всеми базами данных своих сайтов из панели phpmyadmin, или управлять каждой отдельной базой данных сайта, входя в phpmyadmin под логином отдельного пользователя этой базы данных.

Создаваемая база данных должна иметь три обязательных параметра, которые нужно зафиксировать: имя базы данных, имя пользователя БД, пароль доступа, а также расположение базы данных на этом сервере. Обычно, расположение сервера баз данных, local host. Для проверки его можно увидеть в столбце «Сервер» в списке (таблице) созданных баз данных.


class="eliadunit">

Пункт 3: Закачка дистрибутива Joomla на сервер

В прошлом уроке мы закачивали Joomla на FTP, используя FTP клиент . Здесь, для примера, закачку дистрибутива Joomla на сервер, проведем через файловый менеджер сервера.

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

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

  • Открываем файловый менеджер сервера;
  • Открываем коневую папку сайта;
  • Закачиваем (кнопка «Скачать») zip архив Joomla;
  • Распаковываем архив (кнопка «Разархивировать»);
  • Удаляем zip архив (выделяем нажатием и удаляем кнопкой «Удалить»;
  • Проверяем права CHMOD на каталоги и файлы Joomla. Каталоги CHMOD=755, файлы CHMOD=644.

Пункт 3: Инсталляция Joomla с переводом

Инсталляция Joomla это прохождение трех или пяти окно установки системы в браузере. Три окна без перевода, пять окон с переводом на нужный язык. Здесь сразу переведем (локализуем) на русский язык.

Окно 1: Заполняем данные по сайту

Окно 2: Вписываем данные базы данных

Окно 3: Проверяем конфигурацию сервера на соответствие системе Joomla

Окно 4: Проходим установку, переходим к установке языка

Окно 5: Выбираем язык для панели для сайта

Окно 6: завершаем установку удалением каталога «Installation».

Переходим по вкладкам «Панель» и «Сайт». Проверяем перевод.

Когда ваш сайт расширяется вы задумываетесь об аренде уже чего-то более серьёзного, чем просто хостинг. Выделенные сервера в наше время удовольствие дорогое и им на замену хорошо подходят VDS или VPS . Часто, если пользователь никогда не администрировал сервер такого типа, то он просто загружает на сервак свой сайт и оставляет всё как есть, думая что машину настраивать совсем не нужно, то есть, как на обычном хостинге. Это в корне не так. Если оставить нулевые настройки, а при аренде вам только установят ОС и панель управления, то ваш VDS/VPS будет работать примерно только на 1/4 своей мощности. Неопытные пользователи обычно удивляются, когда их сайт на мощной ВДСке падает даже при малейших нагрузках и бегут к администрации с просьбой объяснить почему такое происходит, на что получают шаблонный ответ, мол оптимизируйте работу скриптов. Мы сделаем всё, чтобы выжать все соки из вашего виртуального сервера .

Что имеем в качестве примера:
» VDS
» ОС - Debian
» Панель управления - ISPmanager
» ОЗУ - 4096 Мб
» Процессор - AMD 2799.999 Mhz 4 ядра
» Диск 150 Гб
Такое чудо можно арендовать у любого хостера за 1000-1500 рублей в месяц.

Настройка системы.

Все действия выполняются от root пользователя.

1. my.cnf - оптимизация mysql. Открываем файловый менеджер в панели управления, открываем etc/mysql/my.cnf и заменяем строки, которые есть у вас из списка ниже на соответствующие строчки из этого же списка. Чего нет - добавляем.


key_buffer = 16M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 240K
query_cache_size = 128M
query_cache_limit = 16M
query_cache_type = 1
max_connections = 300
thread_cache_size = 100
myisam-recover = BACKUP
expire_logs_days = 10
max_binlog_size = 100M
innodb_buffer_pool_size = 1024M
innodb_additional_mem_pool_size = 16M
innodb_flush_log_at_trx_commit = 2
quick
quote-names
max_allowed_packet = 64M

Рестартируем мускуль в службах.

Теперь наш сервер оптимизирован для базы данных. Страницы должны загружаться гораздо быстрее и бд сможет выдерживать большие нагрузки.

2. AllowOverride all - Включаем перезапись.htaccess
Заходим в /etc/apache2/sites-available/default меняем все строки с AllowOverride none на AllowOverride all
Это позволит.htaccess перезаписывать правила. По умолчанию стоит none и в большинстве случаев ваш сайт будет выдавать Internal Server Error, то есть 500-ю ошибку. Пример того, что должно получиться:

Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all

3. php.ini - конфигуратор php. В нём есть много полезных параметров, которые можно изменить под себя. Находим и изменяем строки ниже под свои предпочтения. Чтобы выяснить, где лежит ваш php.ini создайте на своём сайте файл info.php с текстом и откройте его в браузере. Например, http://site.ru/info.php. В строке Loaded Configuration File будет показан путь.
// Максимальный размер загружаемых данных на ваш сервер методом POST
post_max_size = 64M
// Максимальный размер загружаемых данных на ваш сервер
upload_max_filesize = 16M
// Вывод ошибок. Если вы отлаживаете скрипты, то ставьте On
display_errors = Off
// То же что и выше, только для процесса запуска
display_startup_errors = On | Off
// Лог ошибок. если логи занимают много места, то ставьте Офф
log_errors = On
// Повтор показанных ошибок
ignore_repeated_errors = On
// Максимальный объём памяти для выполнения скрипта
memory_limit = 24M

После сохранения перезагружаем сервер.

Установка PHP модулей.

Для установки модулей нужно выполнять команды. Команды выполняются в SSH клиенте. Всё просто, если, к примеру, панель не будет открываться, или случится какой-нибудь сбой, то через ССАШ команды можно перезагрузить сервер, что-то подправить и так далее. Команды выполняются через SSH клиент. Самый популярный - Putty . Не требует установки. Открываете, пишите IP сервера (он дан вам с паролями) открывается консоль - чёрное окно. Вводите имя пользователя (root) и свой пароль. Обратите внимание, что при вводе пароля символы в целях безопасности не печатаются. И нажимаете Enter. Теперь вы можете выполнять команды. Чтобы их не писать вручную, вставка осуществляется правой кнопкой мыши.

1. eAccelerator - ставим первым делом, с его помощью вес веб-страниц становится в несколько раз меньше. Выполняем поочерёдно следующие команды.

aptitude install php5-dev make re2c
wget https://github.com/eaccelerator/eaccelerator/archive/master.zip
unzip master.zip
cd eaccelerator-master
phpize
./configure
make install
mkdir /var/cache/eaccelerator;chmod 0777 /var/cache/eaccelerator
service apache2 restart

Заходим в Расширения PHP и ищем eaccelerator. Если есть, всё правильно сделано.

2. Активация модулей - некоторые модули уже идут в комплекте, но не активированы. Выполняем команды по очереди.

a2enmod rewrite
apt-get install php5-gd

Итог.

На этом всё. Теперь сервер использует практически весь свой потенциал и способен выдерживать большие нагрузки. Если что-то хотите спросить по этой теме, или дополнить - пишите в комментариях, отвечу всем.

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

Постановка задачи

Ситуация самая жизненная. Интернет-магазин, размещенный на шаред-хостинге, после запуска начал получать клиентов, но появились пожелания к функциональности, и разработчики активно занялись доработкой сайта. Выяснилось, что, когда в этом участвует несколько человек, постоянно копировать файлы через FTP для теста, да и еще на рабочий сайт, очень проблемно. Терялся контроль, кто когда что сделал, нужно было беспокоиться о сохранении оригинальных файлов, чтобы было легко откатиться. Владельцу приходилось или согласовывать правки, или копировать все самому. Разработчик не мог сразу посмотреть результат и ждал. Процесс сильно тормозился. В итоге пришли к тому, что нужно использовать возможности Git и создать новый сайт-зеркало, где можно было бы все обкатывать. При такой схеме разработчик мог сразу тестировать код, а в случае одобрения код переносили в master и выкладывали уже на рабочий сайт. Также можно легко отслеживать коммиты.

Вторая проблема: хостинг постоянно падал. Причину в итоге нашли: Entry processes limit - параметр, который определяет количество CGI/PHP-процессов, входящих внутрь виртуального контейнера, и о котором не сильно любят говорить маркетологи хостера. На графиках его тоже не видно, только маленькая графа в таблице. В итоге при небольших нагрузках CPU и RAM (не более 20%) сервер вообще не работал даже при минимальном количестве посетителей. В итоге было принято решение переезжать.

Первоначальные настройки сервера

OC в VDS устанавливается автоматически. Достаточно выбрать версию и вариант с веб-панелью или без и чуть подождать, пока не придет письмо с данными для входа. На хостингах предлагаются и разные веб-панели. Когда этот материал создавался, Vesta не поддерживала Ubuntu 16.04 и необходимости в ней не было, поэтому выбрали чистую систему. Все дальнейшие действия ведутся от имени root. Первым делом проверяем локаль, часовой пояс и время. Вообще, веб-приложения обычно не обращают внимания на некоторые системные настройки, но иногда попадается именно тот случай, поэтому лучше сразу сделать все правильно.

# locale

Если в ответ получаем отличное от ru_RU.UTF - перенастраиваем.

# locale-gen ru_RU ru_RU.UTF-8 ru_RU ru_RU.UTF-8 # localedef -c -i ru_RU -f UTF-8 ru_RU.UTF-8 # dpkg-reconfigure locales # update-locale LANG=ru_RU.UTF-8

Проверяем время:

Если часовой пояс не соответствует - переконфигурируем.

# dpkg-reconfigure tzdata

Обновляем сервер:

# apt update && apt upgrade

Теперь можем ставить сервисы.

Ставим веб-сервер

Несмотря на их разнообразие, выбор установки обычно сводится к трем вариантам: Apache, nginx или nginx как реверс Apache. Apache очень гибок в настройках и использует модули для обработки динамических запросов, поэтому хорошо справляется с динамикой. Nginx хорош в отдаче статики и потребляет меньше ресурсов, но для обработки динамики использует сторонний модуль, что снижает скорость и чуть усложняет настройки. В зависимости от конкретного приложения каждый из них может иметь свои плюсы и минусы и показывать разную скорость. Поэтому окончательный выбор веб-сервера всегда приходится подтверждать практикой, подбирая оптимальный вариант. Проблема nginx - то, что в некоторых специфических движках следует вручную возиться с редиректами, когда на Apache все будет работать буквально из коробки, достаточно просто включить mod_rewrite.

Нагрузочное тестирование можно произвести при помощи ab (Apache Benchmark, входит в apache2-utils) или siege. Причем лучше проверить с localhost и удаленного узла, чтобы видеть, как работает сеть.

# ab -c 10 -n 6000 http://example.org/

Хотя ab - это скорее для себя, чтобы оценить эффективность установок. Человека со стороны обычно интересует только то, что показывает Google PageSpeed , поэтому ориентироваться следует и на него.

В последнем случае сайт на старом хостинге давал 60, после переноса на VDS (с такими же параметрами) он в Apache в установке по умолчанию показывал 72, nginx с голым конфигом - 62, после добавления сжатия - 78. На этом и остановились, выбрали nginx. В репозитории несколько пакетов, для большинства ситуаций достаточно базового core, содержащего все основные модули, для PHP нам понадобится FPM.

# apt nginx install nginx php7.0-fpm

Файл в общем стандартный, но для скорости добавим кеширование и сжатие. Точные параметры в каждом случае необходимо подбирать опытным путем, но для небольших и средних проектов таких установок обычно бывает достаточно. В nginx.conf добавляем или, если повезло, снимаем комментарии в секции http:

# nano /etc/nginx/nginx.conf http { .... open_file_cache max=200000 inactive=60s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; server_tokens off; server_names_hash_bucket_size 64; reset_timedout_connection on; client_body_timeout 10; gzip on; gzip_disable "msie6"; gzip_static on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; }

Создаем настройки для домена:

# nano /etc/nginx/sites-available/example.org server { listen 80; server_name example.org default; root /var/www/example.org; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; rewrite_log on; # Полезная настройка для отладки index index.php; try_files $uri $uri/ /index.php?$query_string; location ~ \.php$ { include /etc/nginx/fastcgi_params; # fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } # Кешируем картинки и txt/XML/JS/CSS. Можно убрать ненужное или что-то добавить location ~* ^.+\.(jpg|jpeg|gif|png|js|css|txt|xml)$ { access_log off; expires 30d; } # Блокируем доступ к каталогу.git (о нем дальше), по аналогии добавляем свои правила location ~ /\.git { deny all; } }

Это общий пример для стандартного движка. Некоторые движки вроде OpenCart или WebAsyst требуют специфических настроек, и даже не всегда работает то, что предлагается в Сети.

Проверяем, работает ли сжатие. Это можно сделать, просмотрев заголовок Content-Encoding в Firebug (он должен показывать gzip), или при помощи специального сервиса .

Включаем сайт:

# ln -s /etc/nginx/sites-available/example.org /etc/nginx/sites-enabled/example.org

Перезапускаем nginx:

# service nginx restart

Но работать еще не будет. Нужно настроить PHP. Для FPM все установки находятся в /etc/php/7.0/fpm. Проверяем, что в pool.d/www.conf учетная запись совпадает с используемой nginx и включен сокет.

# nano /etc/php/7.0/fpm/pool.d/www.conf user = www-data group = www-data listen = /run/php/php7.0-fpm.sock

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

Pm = dynamic pm.max_children = 15 pm.start_servers = 6 pm.min_spare_servers = 2 pm.max_spare_servers = 6

На чуть загруженных серверах может не хватать количества процессов. В логах об этом сразу скажут.

# cat /var/log/php7.0-fpm.log WARNING: server reached pm.max_children setting (5), consider raising it

Еще важный файл php.ini. Параметров там много, и можно рассказывать долго. Но изначально следует включить сжатие, установить максимальный размер файла на аплоад, подключить mail(), сессии и очень желательно включить акселератор OPcache.

# nano /etc/php/7.0/fpm/php.ini zlib.output_compression = On upload_max_filesize = 2M sendmail_path = sendmail -t -i session.save_path = "/var/lib/php/sessions" opcache.enable=1 opcache.memory_consumption=128 pcache.max_accelerated_files=2000

Обязательно проверяем права доступа на /var/lib/php/sessions, чтобы туда мог писать nginx, иначе сессии не будут образовываться. Перезапускаем.

# service php7.0-fpm restart

Теперь перенос сайта. Если переносим с другого хостинга, то там создаем бэкап. Если есть хостинговая веб-панель, то можно использовать ее возможности. Или вручную:

# tar -zcvf backup.tar.gz /var/www

И на новом месте распаковываем:

# tar -zxvf backup.tar.gz /var/www

Но для сайта нам нужна СУБД.


Ставим MySQL

C MySQL все очень просто. Вводим

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

Инструкции