Решил запилить шпаргалку по базовой настройке 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.: данный пост в будущем будет обновляться