This is an old revision of the document!
Table of Contents
Docker деплой на VPS
Базовая настройка безопасности VPS
Легенда
- ☁️ — команда запускается на VPS
- 💻 — команда запускается на локальном компьютере
Шаги
Обновить систему полностью
☁️ (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 <your_ssh_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 <your_ssh_port>/tcp ☁️ (root) $ ufw limit <your_ssh_port>/tcp ☁️ (root) $ ufw --force enable
❗️ Открыть порт для PostgreSQL по аналогии с SSH. Это необходимо для подключения к БД при помощи psql со своего компьютера.
Перезапустить SSH
☁️ (root) $ systemctl restart sshd
Проверить, что всё работает (из второго терминала!)
Очень важно — НЕ закрывать текущую SSH-сессию, пока не убедитесь, что вход работает.
С локального компьютера:
💻 $ ssh -p <your_ssh_port> 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
Д/З
Reading assignment (прочитать и понять)
Практика (для зачета)
Обязательная часть
- Выполнить докеризацию 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
(я не пробовл, но пишут что можно)
VPS за 75 ₽ / мес от FirstByte (тариф MSK-KVM-SSD-START), реферальная ссылка: https://firstbyte.ru/?from=125588
Процесс сдачи
- (студент): напишите в ТГ преподавателю одно сообщение, содержащее текст:
Для сдачи Д/з Docker деплой на VPS- Ссылка на гит с исходным кодом бота
- Ссылка на публичный Docker Hub репозиторий, где опубликован образ Вашего чат-бота (пример: https://hub.docker.com/r/olegsklyarov/unn_pizza_bot)
- Креды для подключения к PostgreSQL на вашем VPS: IP сервера, порт PostgreSQL, имя пользователя и пароль к БД. Преподаватель подключиться к БД при помощи psql и проверит содержимое таблиц БД.
- (преподаватель) проверяет Dockerfile, Makefile в гитхаю, а также образ в Docker Hub
- (преподаватель) отправляет с ТГ личку студенту сообщение “ФИО ✅ 🔟”
- (студент) заходит на страницу успеваемости и проверяет корректность своей успеваемости.
