====== 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:Таблица успеваемости|на страницу успеваемости]] и проверяет корректность своей успеваемости.