====== Docker деплой на VPS ======
===== Базовая настройка безопасности VPS =====
==== Легенда ====
* ☁️ — команда запускается на VPS
* 💻 — команда запускается на локальном компьютере
==== Шаги ====
⚠️ Ниже даны команды для ОС [[https://www.debian.org/releases/trixie|Debian 13]]. Но с большой вероятностью все будет работать и на ОС Ubuntu.
=== Обновить систему полностью ===
☁️ (root) $ apt update && apt upgrade -y && apt autoremove -y
=== Создать нового пользователя ===
☁️ (root) $ adduser oleg
Создайте надежный пароль, СОХРАНИТЕ его!
☁️ (root) $ usermod -aG sudo oleg
=== Установить свой SSH-ключ ===
☁️ (oleg) $ mkdir -p /home/oleg/.ssh
☁️ (oleg) $ chmod 700 /home/oleg/.ssh
С локального компьютера:
💻 $ ssh-keygen -t rsa -b 4096 -C "my-vps-key"
# При создании:
# - укажите имя файла (например: ~/.ssh/vps_key)
💻 $ ssh-copy-id -i ~/.ssh/vps_key oleg@SERVER_IP
=== Запретить SSH-логин под root ===
☁️ (root) $ sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
=== Запретить логин по паролю ===
☁️ (root) $ sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
=== Изменить SSH порт ===
☁️ (root) $ sed -i 's/^#\?Port .*/Port /' /etc/ssh/sshd_config
=== Настроить firewall UFW ===
☁️ (root) $ apt install -y ufw
☁️ (root) $ ufw default deny incoming
☁️ (root) $ ufw default allow outgoing
☁️ (root) $ ufw allow /tcp
☁️ (root) $ ufw limit /tcp
# открываем порт для подключения к БД при помощи ''psql'' с локального компьютера
☁️ (root) $ ufw allow /tcp
☁️ (root) $ ufw --force enable
=== Перезапустить SSH ===
☁️ (root) $ systemctl restart sshd
=== Проверить, что всё работает (из второго терминала!) ===
Очень важно — **НЕ закрывать** текущую SSH-сессию, пока не убедитесь, что вход работает.
С локального компьютера:
💻 $ ssh -p alice@SERVER_IP
===== Установка Docker =====
☁️ (root) $ curl -fSL https://get.docker.com -o get-docker.sh
☁️ (root) $ sh ./get-docker.sh
☁️ (root) $ apt install docker-compose-plugin
☁️ (root) $ usermod -aG docker oleg
☁️ (root) $ su - oleg
# проверка, что пользователь в группе docker
☁️ (oleg) $ groups
# теперь можно запускать docker без root
☁️ (oleg) $ docker ps
===== Д/З =====
==== Практика (для зачета) ====
=== Обязательная часть ===
- Выполнить докеризацию Pizza Bot
- Удалить docker-compose.yml файл полностью
- Написать Dockerfile для создания Docker-образа (docker image) чат-бота Pizza Bot
- Если нет учетной записи на https://hub.docker.com, то создать
- Создать новый Docker Hub репозиторий (**публичный**) для публикации образа своего бота
- Авторизовать локальной Docker с учеткой Docker Hub, чтобы можно было делать ''docker push''
- Дополнить Makefile командами Docker:
- Создать Volume и Network
- Запустить / остановить контейнер БД postgres
- Билд + пуш образа чат-бота в Docker Hub
- Запустить / остановить контейнер с чат-ботом
- Выполнить билд и пуш своего Pizza Bot на Docker Hub
=== Рекомендуемая часть ===
- Арендовать VPS (или VDS). Есть бесплатные тестовые варианты (см. ниже)!
- Получить IP адрес и рутовый доступ по SSH
- Выполнить базовую настройку безопасности VPS
- Установить docker на VPS
- Выполнить деплой своего бота и postgres на VPS
P.S. Если студент против регистрации на сайте хостинга с предоставлением личного номера сотового или из-за необходимости оплаты услуг хостинга, то по этой причине можно легально отказаться от выполнения данной части Д/з без потери зачета. Однако выполнение данной части Д/з крайне рекомендуется и пригодиться на всех этапах будущей карьеры в ИТ!
==== Бесплатные VPS ====
(я не пробовл, но пишут что можно)
* https://sweb.ru/web/testvps/
* https://www.1gb.ru/price_free_hv.php
VPS за 75 ₽ / мес от FirstByte (тариф MSK-KVM-SSD-START), реферальная ссылка: https://firstbyte.ru/?from=125588
=== Процесс сдачи ===
- (студент): напишите в ТГ [[https://t.me/olegsklyarov|преподавателю]] **одно** сообщение, содержащее текст:
- ''Для сдачи Д/з Docker деплой на VPS''
- Ссылка на гит с исходным кодом бота
- Ссылка на публичный Docker Hub репозиторий, где опубликован образ Вашего чат-бота (пример: https://hub.docker.com/r/olegsklyarov/unn_pizza_bot)
- (рекомендуемая часть) Креды для подключения к PostgreSQL на вашем VPS: IP сервера, порт PostgreSQL, имя пользователя и пароль к БД. Преподаватель подключиться к БД при помощи psql и проверит содержимое таблиц БД.
- (преподаватель) проверяет Dockerfile, Makefile в гитхаю, а также образ в Docker Hub
- (преподаватель) отправляет с ТГ личку студенту сообщение "ФИО ✅ 🔟"
- (студент) заходит [[chat-bots:Таблица успеваемости|на страницу успеваемости]] и проверяет корректность своей успеваемости.