User Tools

Site Tools


chat-bots-2025-fall:docker_deploj_na_vps

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
chat-bots-2025-fall:docker_deploj_na_vps [2026/03/02 12:34] – removed - external edit (Unknown date) 127.0.0.1chat-bots-2025-fall:docker_deploj_na_vps [2026/03/02 12:34] (current) – ↷ Links adapted because of a move operation olegsklyarov
Line 1: Line 1:
 +====== Docker деплой на VPS ======
 +
 +
 +===== Базовая настройка безопасности VPS =====
 +
 +==== Легенда ====
 +
 +  * ☁️ — команда запускается на VPS
 +  * 💻 — команда запускается на локальном компьютере
 +
 +==== Шаги ====
 +
 +⚠️ Ниже даны команды для ОС [[https://www.debian.org/releases/trixie|Debian 13]]. Но с большой вероятностью все будет работать и на ОС Ubuntu.
 +
 +=== Обновить систему полностью ===
 +
 +<code bash>
 +☁️ (root) $ apt update && apt upgrade -y && apt autoremove -y
 +</code>
 +
 +=== Создать нового пользователя ===
 +
 +<code bash>
 +☁️ (root) $ adduser oleg
 +Создайте надежный пароль, СОХРАНИТЕ его!
 +☁️ (root) $ usermod -aG sudo oleg
 +</code>
 +
 +=== Установить свой SSH-ключ ===
 +
 +<code bash>
 +☁️ (oleg) $ mkdir -p /home/oleg/.ssh
 +☁️ (oleg) $ chmod 700 /home/oleg/.ssh
 +</code>
 +
 +С локального компьютера:
 +<code bash>
 +💻 $ ssh-keygen -t rsa -b 4096 -C "my-vps-key"
 +# При создании:
 +# - укажите имя файла (например: ~/.ssh/vps_key)
 +💻 $ ssh-copy-id -i ~/.ssh/vps_key oleg@SERVER_IP
 +</code>
 +
 +=== Запретить SSH-логин под root ===
 +
 +<code bash>
 +☁️ (root) $ sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
 +</code>
 +
 +=== Запретить логин по паролю ===
 +
 +<code bash>
 +☁️ (root) $ sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
 +</code>
 +
 +
 +=== Изменить SSH порт ===
 +
 +<code bash>
 +☁️ (root) $ sed -i 's/^#\?Port .*/Port <your_ssh_port>/' /etc/ssh/sshd_config
 +</code>
 +
 +=== Настроить firewall UFW ===
 +
 +<code bash>
 +☁️ (root) $ apt install -y ufw
 +☁️ (root) $ ufw default deny incoming
 +☁️ (root) $ ufw default allow outgoing
 +☁️ (root) $ ufw allow <your_ssh_port>/tcp
 +☁️ (root) $ ufw limit <your_ssh_port>/tcp
 +# открываем порт для подключения к БД при помощи ''psql'' с локального компьютера
 +☁️ (root) $ ufw allow <your_postgresql_port>/tcp
 +☁️ (root) $ ufw --force enable
 +</code>
 +
 +=== Перезапустить SSH ===
 +
 +<code bash>
 +☁️ (root) $ systemctl restart sshd
 +</code>
 +
 +=== Проверить, что всё работает (из второго терминала!) ===
 +
 +
 +Очень важно — **НЕ закрывать** текущую SSH-сессию, пока не убедитесь, что вход работает.
 +
 +С локального компьютера:
 +<code bash>
 +💻 $ ssh -p <your_ssh_port> alice@SERVER_IP
 +</code>
 +
 +
 +===== Установка Docker =====
 +
 +<code bash>
 +☁️ (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 
 +</code>
 +
 +
 +
 +===== Д/З =====
 +
 +
 +
 +==== Практика (для зачета) ====
 +
 +=== Обязательная часть ===
 +
 +  - Выполнить докеризацию 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-2025-fall:tablica_uspevaemosti|на страницу успеваемости]] и проверяет корректность своей успеваемости.
 +
 +