Базовая настройка VPS сервера Ubuntu 16.04

Решил запилить шпаргалку по базовой настройке VPS серверов на Ubuntu. Для себя и не только. Данный мануал пригодится всем начинающим разработчикам Telegram ботов.

Для настройки VPS сервера нам сначала нужен сам сервер на Ubuntu.

Покупка сервера

Где покупать сервер — дело Ваше, однако я все же вставлю свои 5 копеек и порекомендую бесплатный сервис для поиска VPS по параметрам — vds.menu. Для телеграм-ботов советую брать сервера с минимум 512 Мб ОЗУ, SSD диском и технологией виртуализации KVM. Желательно брать сервера не в РФ.

Оптимальные сервера для telegram-ботов по критерию цена/характеристики лично я беру тут: iphoster.net. Для начала подойдет тариф за $1.95 или 121 руб/мес. — цена на момент написания статьи. Процессор на самом дешевом тарифе имеет тактовую частоту 3300 МГц (одно ядро), 7ГБ NVMe SSD, интернет-канал 100 МБит/с, безлимитный трафик — все что нужно для бота.

Сервера расположены в Германии, Польше, Франции (использую именно французские сервера), так что проблемы с блокировкой доступа к телеге не возникнут. Да, я в курсе, что в том же pyTelegramBotAPI есть возможность указать прокси или подменить стандартный URL Telegram Bot API — но это не мой путь. Мое мнение — проще использовать зарубежный сервер.

Итак, сервер мы купили. Логинимся к серваку через SSH.

Можно использовать стандартный ssh-клиент, но я предпочитаю и советую использовать клиент Remmina.

Первоначальная настройка сервера на базе Ubuntu

Обновляемся на всякий случай:

apt-get update -y && apt-get upgrade -y && apt-get dist-upgrade -y && apt-get autoremove -y

Генерируем сложный пароль (его мы будем использовать вместо стандартного пароля пользователя root).

Меняем пароль пользователя root:

passwd

Вводим сгенерированный ранее пароль.

Ставим вспомогательный софт (по желанию):

apt-get install zsh nano htop ufw fail2ban screen git curl wget unzip zip systemd man -y

Правим локали на Ubuntu 16.04

apt-get install language-pack-ru

Открываем файл /etc/default/locale:

nano /etc/default/locale

Вписываем:

LANGUAGE=ru_RU:ru
LANG=ru_RU.UTF-8

Ставим последнюю версию Python (сейчас это версия 3.8)

Подготовка к установке:

apt-get install gcc build-essential make checkinstall libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev

Установка Python 3.8 на Ubuntu:

cd /opt
wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
tar xzf Python-3.8.2.tgz
cd Python-3.8.2
./configure --enable-optimizations
make altinstall

Удаляем лишние файлы:

cd /opt
rm -f Python-3.8.2.tgz

Дополнительные действия:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
nano ~/.zshrc

Вписываем в конец файла:

alias cls="clear"
alias python="python3.8"
alias pip="pip3.8"

Обновляем Pip

pip3.8 install --upgrade pip

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

Генерируем пароль для нового пользователя zzz. После чего добавляем нового пользователя в систему.

adduser zzz

Добавляем привелегий пользователю:
Открываем файл /etc/sudoers:

nano /etc/sudoers

Добавляем строчку:

zzz ALL=(ALL) ALL

Настройка безопасности SSH

Запрещаем root логиниться используя ssh:

nano /etc/ssh/sshd_config

Ищем нужные строки и редактируем файл:

PermitRootLogin no
UseDNS no
AllowUsers zzz

Изменяем стандартный порт SSH :

Port 50383

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

shuf -i 49152-65535 -n 1

Перезагружаем SSH сервер:

service ssh restart

Обмениваемся SSH-ключами

Команда вводится не на VPS, а на нашем личном компьютере

ssh-copy-id zzz@193.77.122.77 -p50383

Настраиваем файрволл с помощью ufw

sudo ufw default deny incoming
sudo ufw default allow outgoing

Добавляем наш нестандартный (50383) порт для подключения через SSH:

sudo ufw allow 50383

Добавляем другие порты, необходимые для работы того же Telegram-бота:

sudo ufw allow 8443

Включаем firewall:

sudo ufw enable

Проверяем статус:

sudo ufw status verbose

Включаем сервис fail2ban:

sudo service fail2ban restart

Перезагружаемся:

reboot now

Обновляемся еще раз, на всякий случай:

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y

Может пригодится — команда установки необходимых библиотек для работы бота:

pip install -r requirements.txt

P.S.: данный пост в будущем будет обновляться

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *