Настраиваем
Итак, у нас есть свежеустановленная на VPS система и доступ по SSH. Логинимся на сервер под рутом.
Русифицируем
sudo apt install language-pack-ru
sudo update-locale LANG=ru_RU.UTF-8
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 на выбранный вами порт.
ClientAliveInterval 60 ClientAliveCountMax 5
Далее проматываем кнопкой PgDn до самого низа файла и дописываем каждую команду с новой строки:
AddressFamily inet PermitRootLogin no AllowUsers user
Первая команда ограничивает подключения только стандартом IPv4, отключая не нужный IPv6. Вторая запрещает логиниться в терминал под рутом. Третья запрещает вообще кому либо логиниться, кроме вас — подставляйте свой логин вместо user.
Сохраняем и закрываем, как я показывал выше. Впредь все редактирования файлов будут проходить по такому сценарию. Перезапустим удаленный терминал, чтобы настройки применились:
sudo service sshd restart
5. Разлогинтесь из терминала (logout), и подключитесь к серверу заново, используя новый порт.
6. Обновим источники приложений и сами приложения:
sudo apt update && sudo apt upgrade
Соглашаемся на установку обновлений нажав Y и Enter.
7. Если у вас не самой последней версии система, имеет смысл обновить дистрибутив до последнего подрелиза (необязательный шаг):
sudo apt dist-upgrade
8. Ускоряем общую работу системы — Prelink и Preload. Prelink нужен для создания статичных адресов для библиотек, Preload — это небольшое приложение, которое следит за файлами наиболее часто используемых приложений, и предзагружает их в память, пока система простаивает.
sudo apt install prelink sudo apt install preload
Далее, нужно включить Prelink:
sudo nano /etc/default/prelink
Откроется знакомый Nano, и там измените строку с PRELINKING=unknown на PRELINKING=yes. Не забываем сохранять перед закрытием, вы же запомнили уже, ага? Следующий шаг — добавляем в планировщик cron ежедневный запуск:
sudo /etc/cron.daily/prelink
9. C системными предустановками пока закончим, ставим апач:
sudo apt install apache2
Также, включим mod_rewrite. Почему-то по умолчанию в большинстве систем он отключен. Отвечает за переписывание билибердовых ссылок под красивые короткие. Критично для работы многих сайтов.
sudo a2enmod rewrite
10. Далее, MySQL-сервер:
sudo apt install mysql-server
Установка может спросить адрес вашего сервера, указываем localhost, если вы пока не назначили внешний домен. Также задаем главный пароль базы данных, сложный, буквы-цифры-разный регистр. Если вы еще не догадались, напоминаю — все логины-пароли нужно записать и хранить в безопасном месте.
MySQL сервер последних версий корректно настроен для работы в нашем окружении, принимает запросы только от localhost. Поэтому, не лезем в конфиг.
11. Ставим php последней версии:
sudo apt-get install php-cli php-common libapache2-mod-php php php-mysql php-fpm php-mbstring php-gd php-curl
Набор модулей тут мной определен эксперементально. Во всех источниках указаны разные, где-то нет mbstring, но он нужен для phpmyadmin, админки для MySQL. Где-то отсутствует curl и gd, но они нужны для капчи и некоторых плагинов CMS. В любом случае, дополнительные модули можно всегда доставить после.
12. Поднастроим Apache. Отредактируем главный конфигурационный файл:
sudo nano /etc/apache2/apache2.conf
Уже установленные переменные не трогаем, проматываемся в конец файла. Там добавляем каждую команду с новой строки:
ServerName localhost ServerSignature Off
Это задаст хост по умолчанию для самоопределения апача (localhost) и отключит отображение версии системы и сервера на страницах ошибок. Это небезопасно. Как всегда, сохраняем, закрываем.
13. Поднастроим PHP.
sudo nano /etc/php/7.2/apache2/php.ini
Многие скрипты используют короткий тэг открытия, вместо полного, поэтому включим эту опцию, заменив Off на On (отсюда и далее указываю то, как должно быть, а не как было):
short_open_tag = On
Раздвинем ограничения по памяти и загрузке файлов:
memory_limit = 128M
post_max_size = 64M
14. Установим phpmyadmin. Это графическая панель управления базами данных MySQL.
sudo apt install phpmyadmin
Все готово, перезапустим апач:
sudo service apache2 restart
15. После всех манипуляций, у нас будет тестовая страница апача открываться в браузере по адресу вашего сервера, а phpmyadmin будет доступен по адресу http://вашсайт/phpmyadmin . Логин туда root, пароль — указанный при установке MySQL.
16. Создадим старницу phpinfo для проверки работы сервера:
sudo nano /var/www/html/info.php
Вставляем такой код в Nano и сохраняем:
<?php phpinfo();
Теперь по адресу http://вашсайт/phpinfo должна открываться сервисная страница с информацией о PHP.
Если все работает и отображается, можно файл удалить:
sudo rm -f /var/www/html/info.php
Прямой доступ по известному пути — дыра в безопасности VPS.
17. Поставим FTP. Используем vsftpd:
sudo apt install vsftpd
Правим конфигурацию:
sudo nano /etc/vsftpd.conf
Убедитесь, что параметры в этом файле соответствуют приведенным ниже. Если параметры закомментированы знаком #, раскомментируйте его, удалив #. Если параметра нет, добавьте вручную в конец файла:
local_umask=002
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.
sudo find /var/www/ -type f -exec chmod 664 {} \;
sudo find /var/www/ -type d -exec chmod 775 {} \;