Настройка хостинга на VDS под Ubuntu. Настраиваем свой первый VDS сервер в роли веб-сервера

Данное руководство описывает полный процесс настройки 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 лет опыта в администрировании сетевых и веб-проектов. В реальной жизни работаю системным администратором. Первичная консультация бесплатно! Свяжитесь со мной удобным для вас способом через раздел .

Управление осуществляется с помощью командной строки. Для этих целей удобнее всего использовать бесплатную программу PuTTy . Она не требует установки: скачав и запустив утилиту, вы можете тут же подключиться к VDS по протоколу SSH, введя IP-адрес (номер порта по умолчанию - 22) и нажав на кнопку “Open”. После этого на экране появится окно консоли с приглашением к авторизации “login as:”. Введите root, нажмите “Enter”, далее укажите полученный при заказе услуги пароль и вновь подтвердите действие клавишей ввода. Теперь можно начинать работу.

Сама процедура настройки VDS представляет собой ввод в консоль текстовых команд, с помощью которых можно осуществлять практически любые операции над сервером. Ниже рассмотрена последовательность базовых действий, которые необходимо осуществить сразу после запуска виртуальной машины, а также пошаговая установка связки программного обеспечения , необходимого для размещения веб-сайтов. Примеры адаптированы для двух наиболее распространенных семейств Линукс: Debian (к ней относится, например популярный Ubuntu) и Centos (в него входит сам Centos, Fedora и ряд других).

Внимание! Для ОС версии Bitrix 6, устанавливаемой на VDS, установка LEMP не требуется!

Первоначальная настройка VDS

Обновление программного обеспечения

Начинать настройку VDS необходимо с глобального обновления. Запустить апдейт в Debian-подобных операционных системах можно следующим образом:

Apt-get update && apt-get upgrade

для Centos команда иная:

В процессе обновления вас спросят о том, хотите ли вы установить новые пакеты. Отвечайте утвердительно, используя клавишу Y, и подтвердите свой выбор, нажав “Enter”.

Добавление нового пользователя

Работать с сервером под учетной записью root настоятельно не рекомендуется - лучше всего создать нового пользователя и передать ему необходимые права. В Debian-подобных системах это делается командой:

Adduser username

где username следует заменить на желаемое имя пользователя. После ее выполнения вас попросят задать пароль, а затем предложат заполнить дополнительные поля (делать это необязательно - их можно оставить пустыми).

При работе с Centos также используется команда:

Adduser username

Однако пароль задается отдельно:

Passwd username

Передача привилегий root

После создания нового пользователя ему необходимо передать права суперадминистратора, в противном случае вы не сможете полноценно настроить VDS. Делается это через добавление вновь созданной учетной записи в соответствующую группу. Для Debian-подобных:

Gpasswd -a username sudo

для Centos-подобных:

Gpasswd -a username wheel

Управление SSH

В целях безопасности необходимо проделать ряд манипуляций с конфигурационным файлом sshd_config, который, как легко догадаться, отвечает за настройку удаленного подключения к серверу по SSH. В разных дистрибутивах Линукс для редактирования используются различные утилиты, соответственно, и команды для них будут несколько различаться. В Debian-подобных применяется nano:

Nano /etc/ssh/sshd_config

Для сохранения внесенных изменений необходимо нажать комбинацию клавиш Ctrl+X, затем Y и “Enter”. Centos имеет в своем составе редактор vi:

Vi /etc/ssh/sshd_config

Сохранение информации осуществляется командой:x, после чего необходимо нажать “Enter”.

В sshd_config следует запретить вход с помощью учетной записи root, заменив

PermitRootLogin yes

PermitRootLogin no

а также поменять порт SSH, используемый по умолчанию, заменив

например, на

Номер порта лучше выбирать из диапазона 49152-65535 - это позволит избежать возможных конфликтов с различными службами и сервисами Линукс. После описанных манипуляций необходимо перезапустить SSH. В Debian это делается так:

Service ssh restart

Systemctl reload sshd

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

Установка и настройка LEMP

Большинство современных CMS написаны на языке программирования PHP. Это означает, что для размещения практически любого сайта, независимо от типа и функционала, нам понадобится LEMP. Данная аббревиатура обозначает связку современного и очень быстрого веб-сервера Nginx, интерпретатора php-fpm и системы управления базами данных MySQL. Процедура установки достаточно проста и не займет много времени.

Установка Nginx

Начнем с установки Nginx. В Debian-подобных дистрибутивах это делается одной строчкой:

Sudo apt-get install nginx

после чего сервер будет автоматически запущен.

В Centos сперва необходимо добавить репозиторий EPEL:

Sudo yum install epel-release

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

Sudo yum install nginx

Финальный этап - запуск Nginx:

Sudo systemctl start nginx

Установка MySQL

В Debian-подобных операционных системах сервис баз данных устанавливается командой:

Sudo apt-get install mysql-server mysql-client

В процессе вас попросят задать пароль администратора MySQL.

В Centos-подобных дистрибутивах вместо MySQL используется форк MariaDB, обладающий теми же функциональными возможностями. После его установки:

Sudo yum install mariadb-server mariadb

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

Sudo systemctl start mariadb sudo systemctl enable mariadb

Настройка MySQL

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

Sudo mysql_secure_installation

После запуска вас попросят ввести пароль администратора MySQL, который мы задали на предыдущем этапе, а затем зададут ряд вопросов, отвечать на которые необходимо кнопками Y (да) и N (нет), подтверждая выбор клавишей “Enter”:

  • Хотите ли вы сменить пароль? (Change the root password?) - Нет (N)
  • Удалить анонимных пользователей? (Remove anonymous users?) - Да (Y)
  • Запретить удаленную авторизацию с правами суперпользователя? (Disallow root login remotely?) - Да (Y)
  • Удалить тестовую базу данных? (Remove test database and access to it?) - Да (Y)
  • Перезагрузить таблицу привилегий? (Reload privilege tables now?) - Да (Y)

Добавление новой базы данных

Управление базами данных осуществляется через консоль MySQL. Чтобы в нее войти, необходимо ввести команду:

Для размещения динамического сайта необходимо создать базу данных, с которой будет работать движок. Обычно для каждого проекта создается отдельная БД и отдельный пользователь, который может ей управлять. Давайте создадим базу данных sitedb, пользователя site_user, а затем передадим последнему права на управление sitedb (вы можете заменить предложенные имена на любые другие).

Делается это следующим образом:

Создаем базу данных:

CRE ATE DATABASE sitedb;

Создаем пользователя (вместо password укажите уникальный пароль)

CREATE USER site_user@localhost IDENTIFIED BY "password";

Передаем права управления sitedb пользователю site_user:

GRANT ALL PRIVILEGES ON sitedb.* TO site_user@localhost IDENTIFIED BY "password";

Обновляем данные о привилегиях:

FLUSH PRIVILEGES;

По завершении всех операций выйдите из консоли MySQL:

Установка PHP

Важный этап настройки VDS - установка и конфигурирование интерпретатора PHP. Команды для разных дистрибутивов Линукс отличаются. Инсталляция в Debian осуществляется так:

Sudo apt-get install php5-fpm php5-mysql

В Centos - немного иначе:

Sudo yum install php php-mysql php-fpm

Конфигурация PHP

Первый шаг - редактирование файла php.ini. В Debian и Ubuntu он располагается здесь:

Sudo nano /etc/php5/fpm/php.ini

В Centos-подобных дистрибутивах - непосредственно в каталоге etc:

Sudo vi /etc/php.ini

В обеих системах сперва необходимо раскомментировать и поменять значение в следующей строчке:

;cgi.fix_pathinfo=1

Cgi.fix_pathinfo=0

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

Sudo service php5-fpm restart

В Centos же необходимо отредактировать и файл www.conf:

Sudo vi /etc/php-fpm.d/www.conf

Здесь требуется найти строчку

Listen = 127.0.0.1:9000

и заменить на

Listen = /var/run/php-fpm/php-fpm.sock

Также меняем

Listen.owner = nobody listen.group = nobody

Sudo systemctl start php-fpm sudo systemctl enable php-fpm

Создание директории

Теперь необходимо создать каталог, в котором будут располагаться файлы вашего ресурса. В любой операционной системе Линукс это делается следующей командой:

Sudo mkdir /var/www/sitename.ru/public_html

В данном примере sitename.ru необходимо заменить на доменное имя сайта. Что касается файлов CMS, их следует загрузить в папку public_html. По завершении загрузки необходимо передать права управления веб-серверу. Здесь есть различия в именах, используемых для обозначения Nginx. Для Debian-подобных дистрибутивов команда будет выглядеть так:

Sudo chown -R www-data:www-data /var/www/html/*

В Centos иначе:

Sudo chown -R nginx:nginx /var/www/html/*

Добавление нового хоста Nginx

Последний этап настройки VDS для размещения сайта - добавление виртуального хоста Nginx. Нам достаточно отредактировать файл default. В семействе Debian это делается так:

Sudo nano /etc/nginx/sites-available/default

Sudo vi /etc/nginx/conf.d/default.conf

Открыв файл, удалите из него всю информацию, заменив на код, представленный ниже (вместо sitename.ru подставьте актуальное имя сайта), и сохраните результат:

Server { listen 80; server_name sitename.ru; server_name_in_redirect off; access_log /var/log/nginx/sitename.access_log; error_log /var/log/nginx/sitename.error_log; root /var/www/sitename.ru/public_html; index index.php index.html index.htm default.html default.htm; location / { try_files $uri $uri/ /index.php?$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }

Осталось перезапустить Nginx. Команда для дистрибутивов Debian:

Sudo service nginx restart

Sudo systemctl restart nginx

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

Обновляшечки! Данный набор шпор для разворота хостинга обновлен 28.03.2015, теперь по ним можно развернуть относительно свежий хостинг под Ubuntu 14.04LTS.

Вчера заметил, что Hetzner недавно «обновил тарифы» и выкатил конфигурацию VX18 всего за 18€ c VAT (для нерезидентов по 15.8€). По характеристикам — всего в 2 раза больше, чем на моем старом тарифе VQ19, по качеству ничего не ясно, предполагаю что такое же десктопное железо. Саппорт не сознается, говорит «просто новые тарифы, надо же нам что-то предлагать». Решил вот попробовать. Прогнал unixbench на старом сервере и новом , остался пока доволен и начал перенос сайтов. За одно решил поправить эти шпаргалки для настройки хостинга. (кстати, со временем показатели сервера ухудшатся при «заселении» сервера или смены ноды на более вялую, как было у меня с VQ19, для сравнения — удивительно бодрее чем VQ19).

Задача
Развернуть под Ubuntu 14.04 LTS легкий виртуальный вебхостинг для работы в nginx , PHP-5.5 , MySQL , а так же поднять почтовый сервер Dovecot2/Postfix и настроить почту. Apache я разворачивать не буду, ибо не вижу в нем смысла - под мои нужды nginx подходит ничуть не хуже, а оперативную память расходует значительно меньше. Неймсервер использоваться будет хетзнеровский, как более стабильный.

Формат изложения
Ниже вы можете увидеть список действий, которые будут озвучены в последующих постах. Когда этот момент случается — данная страница будет обновлена и итем станет ссылкой 🙂

  • Установка средств мониторинга сервера Munin.
  • Резервное копирование данных.
  • Скрипты упрощающие добавление нового сайта.

Внимание! Я не являюсь матерым админом и все излагаемое может быть оспорено профессионалами в любом виде. Рад всяческим поправкам, комментариям и советам.

Покупка хостинга в hetzner.de

В этом деле я вам особо не помощник, т.к. справится с этой задачей любой. Заходим сюда , выбираем понравившийся тариф, жмем «Order now». Будете средирекчены на https://robot.your-server.de/order . Далее выбираете заново свой продукт — у меня это был «vServer VX18» и жмете «Order product». На следующей странице выбираете Ubuntu 14.04 LTS 64bit minimal , архитектура 64бит , число серверов 1. Все мои изложения далее идут для Ubuntu 14.04 LTS 64bit. Далее жмем «Add to shopping cart». На следующей странице проверяем то ли мы заказали и жмем «Checkout». Далее если имеем аккаунт в роботе — логинимся, если не имеем — заполняем все поля и регистрируемся. Заполнять надо на английском языке (Ф.И.О. транслитом). Необходимо, чтобы ваше Ф.И.О. совпало с транслитом на вашей кредитной карте, которой вы будете платить. После жмете «Create new account». Где-то дальше вас спросят про кредитку … Вообщем все как в обычном интернет-магазине.

Какой тарифный план выбрать?

Сейчас я пользуюсь тарифом VX18 за 18€ (vServer VX18), т.к. потребности постепенно растут, но до реального сервера пока не дотягивают. Данный тариф позволяет довольно бодро тянуть десяток-другой не сильно нагруженых сайтов. Если вы хотите пока попробовать что-то попроще — можно для начала взять тариф VX6, но на нем совсем мало памяти, архитектуру надо будет брать 32bit. Так же не стоит забывать, что у hetzner нельзя на лету сменить тариф — надо покупать еще один сервер и переносить все на него.

Как быть с nameserver?

А очень просто. Свой поднимать накладно, надо 2 IP, нагрузка на сервер всякими ботами нам тоже не нужна, поэтому воспользуемся неймсерверами самого hetzner. Правда услуга эта платная, стоит 0.5€ в год за 1 домен. Эту услугу лучше подключить сразу, как только вам поставят сервер (об этом вы будете уведомлены по EMail), т.к. подключается она не быстрее сервера (т.е. ручками через операторов). Как я уже описывал.

Подготовка окружения сервера.

Ну вот нам уже и сервер включили, SSH дали — можем пользоваться. Первым делом обновим установленный софт:

Sudo apt-get update sudo apt-get upgrade

Если появились ошибки в стиле blah blah blah …Hash Sum mismatch , выполняем следующее:

Sudo rm /var/lib/apt/lists/* sudo apt-get update sudo apt-get upgrade

Поставим Midnight Comander (что-то типа FAR), для запуска mc.

Sudo apt-get install mc


Теперь пропишем имя хоста (все ниже описанные действия я буду проводить для сайта koteika.ru , вы же можете заменять на свой домен, ну или придумать имя хоста себе по вкусу.)

Sudo echo "koteika" > /etc/hostname sudo hostname -F /etc/hostname

Пропишем fqdn (нужен для почты), правим /etc/hosts , чтобы получилось примерно так:

### Hetzner Online AG installimage # nameserver config # IPv4 127.0.0.1 localhost.localdomain localhost 78.47.88.87 koteika.koteika.ru koteika # # IPv6::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts 2a01:4f8:d16:4346::2 koteika.koteika.ru koteika

Вся прелесть в строках 78.47.88.87 koteika.ru koteika и 2a01:4f8:d16:4346::2 koteika.koteika.ru koteika , где первое значение - IP вашего сервера, второе - доменное имя сервера в формате (FQDN) и третье - имя хоста.

Если все правильно сделали, то посмотреть результаты можно так:

Hostname hostname -f

P.S. Файлы лучше редактировать в чем-то простом типа , но простые изменения можно делать и в mc. В дальнейшем нам придется править очень много конфигов, т.ч. vi лучше освоить.

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

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

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

Ситуация самая жизненная. Интернет-магазин, размещенный на шаред-хостинге, после запуска начал получать клиентов, но появились пожелания к функциональности, и разработчики активно занялись доработкой сайта. Выяснилось, что, когда в этом участвует несколько человек, постоянно копировать файлы через 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!

Когда ваш сайт расширяется вы задумываетесь об аренде уже чего-то более серьёзного, чем просто хостинг. Выделенные сервера в наше время удовольствие дорогое и им на замену хорошо подходят 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

Итог.

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