ПРОГРЕС:
0%

VPS Лабораторія 10 ЗАВДАНЬ

Практичний курс з керування власним сервером. Виконуй завдання по порядку — після кожного став галочку. Усі команди можна копіювати й вставляти в термінал. Результати видно одразу.

🔑 Твої дані

Хост (IP):
91.219.61.30
Порт SSH:
22
Твій логін:
<username> (напр. bodko.v)
Твій пароль:
отримав окремо від вчителя
Твоя папка:
/home/<username>/www/
Твій порт сайту:
9000–9042 — подивись у списку біля свого імені
URL сайту:
http://91.219.61.30:<порт>/

👥 Логіни класу 🔐 доступно лише викладачу

Список логінів і паролів учнів — приватна інформація.
Учень: свої дані ви отримали окремо від вчителя. У прикладах нижче замість bodko.v підставляйте свій логін.

⚠️ Учні, після першого входу — зміни пароль командою passwd. Початкові паролі знає вчитель і поки ти їх не змінив — ризик.

🔐 Вхід викладача

Введи пароль викладача, щоб побачити логіни/паролі класу.

📋 Завдання

  1. Перший вхід (SSH)
  2. Перевір, чи сервер живий (ping)
  3. Подивись на свої файли
  4. Завантаж файл через SFTP
  5. Створи й опублікуй веб-сторінку
  6. Напиши Python-скрипт
  7. Перевір, які порти відкриті
  8. Запусти процес у фоні
  9. Знайди й зупини процес
  10. Запусти Telegram-бота
01

Перший вхід на сервер (SSH)

Увійти з термінала або PuTTY
ЛЕГКО

SSH — це захищений спосіб керувати сервером з твого комп'ютера через командний рядок.

Windows (PowerShell або cmd)

ssh [email protected]

Коли запитає пароль

Пароль не відображається, коли ти його вводиш — це нормально, не баг. Набери й натисни Enter.

💡 Перший раз спитає «Are you sure you want to continue connecting?» — набери yes і Enter.

Що має статись

bodko.v@vpsqt8zq:~$ # <-- ти на сервері!

Щоб вийти назад до свого комп'ютера:

exit
02

Перевір, чи сервер живий (ping)

Переконатись, що VPS відповідає
ЛЕГКО

Ping — це команда, яка надсилає маленький пакет на сервер і чекає відповідь. Якщо відповідає — сервер онлайн.

На твоєму комп'ютері (не на сервері!)

ping 91.219.61.30

Відповідь має бути приблизно така:

Reply from 91.219.61.30: bytes=32 time=15ms TTL=58
Reply from 91.219.61.30: bytes=32 time=14ms TTL=58

Time — скільки мілісекунд пакет летів туди і назад. Менше = швидше зʼєднання.

Зупинити ping

На Windows — натисни Ctrl+C. На Linux/Mac — те саме.

Що значать різні результати

  • Reply from… — усе працює ✓
  • Request timed out — сервер не відповідає (або інтернет у тебе не працює)
  • Destination host unreachable — проблема з маршрутом
03

Подивись на свої файли

Основні команди навігації
ЛЕГКО

Увійди на сервер (ssh …), і потренуйся:

pwd                   # print working directory — де я зараз?
ls                    # list — що в поточній папці?
ls -la                # -l = детально, -a = навіть приховані
cd www                # change directory — зайти в папку www
ls
cd task1              # зайти в task1
cat index.html       # показати вміст файлу
cd                    # cd без параметрів = додому
cd ..                 # піднятись на рівень вище
💡 Tab після кількох літер = автодоповнення. Наприклад cd ta+Tab → cd task1/.

Мапа твоїх папок

/home/bodko.v/          # твоя домашня папка ~
├── www/                # <-- усе звідси публікується в інтернет
│   ├── index.html     # головна сторінка :9000/
│   ├── task1/         # /task1/
│   ├── task2/         # /task2/
│   ├── task3/         # /task3/
│   └── task4/         # /task4/
└── (можна створювати свої файли й папки тут)
04

Завантаж файл через SFTP

Найзручніший спосіб передавати файли
ЛЕГКО

SFTP — як звичайний файловий менеджер, тільки для сервера. Ти бачиш ліворуч свої файли, праворуч — серверні, і перетягуєш мишкою.

Варіант A — FileZilla (безкоштовно, кросплатформно)

  1. Завантаж з filezilla-project.org
  2. Запусти → File → Site Manager → New Site
  3. Налаштування:
    Protocol:  SFTP
    Host:      91.219.61.30
    Port:      22
    Logon:     Normal
    User:      bodko.v
    Password:  (твій пароль)
  4. Connect → праворуч побачиш свою папку /home/bodko.v/

Варіант B — WinSCP (лише Windows, схоже)

Завантаж з winscp.net, ті ж дані для логіну.

Тестове завдання

  1. Створи на своєму компʼютері текстовий файл hello.txt із будь-яким текстом
  2. Перетягни його в /home/bodko.v/www/ на сервері
  3. Відкрий в браузері http://91.219.61.30:9000/hello.txt
05

Створи й опублікуй веб-сторінку

Перший свій сайт в інтернеті
ЛЕГКО

Усе що ти кладеш у ~/www/ — одразу доступне на твоєму публічному порту.

Варіант 1 — прямо на сервері через редактор nano

ssh [email protected]
cd ~/www
nano my_page.html

Встав цей код:

<!doctype html>
<html>
<head><meta charset="utf-8"><title>Привіт</title></head>
<body style="font-family:sans-serif;text-align:center;padding:50px">
  <h1>🚀 Моя перша сторінка на сервері</h1>
  <p>Автор: <b>Bodko V.</b></p>
</body>
</html>

Збережи: Ctrl+O → Enter → Ctrl+X (вийти).

Подивись у браузері

http://91.219.61.30:9000/my_page.html
⚠️ Заміни 9000 на свій порт і bodko.v на свій логін у всіх прикладах.
06

Напиши Python-скрипт

Запусти код на сервері
СЕРЕДНЄ

На сервері вже встановлено Python 3. Перевір:

python3 --version

Має вивести щось типу Python 3.10.12.

Створи скрипт

cd ~
nano hello.py

Встав:

import datetime
import platform

print("🐍 Привіт з Python!")
print("Сервер:", platform.node())
print("Python:", platform.python_version())
print("Зараз:", datetime.datetime.now())

for i in range(3):
    print(f"Рядок номер {i+1}")

Збережи (Ctrl+O, Ctrl+X) і запусти:

python3 hello.py
💡 Щоб редагувати зручніше — поставь VS Code з розширенням Remote - SSH. Далі F1 → "Remote-SSH: Connect to Host" → [email protected]. Відкриєш свою папку так, ніби вона на твоєму компʼютері.
07

Перевір, які порти відкриті

Розвідка без спец-інструментів
СЕРЕДНЄ

Порт — це як номер квартири на одному домі. IP — це дім, порт — квартира всередині. Кожна служба слухає свій порт.

На сервері: які порти слухає мій процес?

ss -tlnp 2>/dev/null | grep $USER

З твого компʼютера: чи відповідає порт?

# перевірка веб-порту (твого сайту)
curl -I http://91.219.61.30:9000/

# мають бути рядки на кшталт:
# HTTP/1.1 200 OK
# Server: nginx/1.18.0

На Windows, якщо curl не знайдено — відкрий URL у браузері, ефект той самий.

Таблиця портів цього сервера

22     SSH — вхід по терміналу
80     HTTP — головна (панель оцінок)
9000   Сайт bodko.v
9001   Сайт chukhrai.y
...
9032   Сайт yefimov.o
08

Запусти процес у фоні

Щоб працювало і після виходу з SSH
СЕРЕДНЄ

Коли ти запускаєш python3 script.py — він зупиниться, щойно ти закриєш SSH. Щоб цього не сталось — використай nohup або tmux.

Варіант A — nohup (найпростіший)

# запустити long_worker.py так, щоб не впав після виходу
nohup python3 long_worker.py > log.txt 2>&1 &

# побачити PID (номер процесу) — запамʼятай його
echo $!

# подивитись, чи живий
ps -p <PID>

Розбір команди:

  • nohup — «не вбивай процес при виході з сесії»
  • > log.txt — увесь вивід пиши у файл log.txt
  • 2>&1 — помилки теж у той же файл
  • & — запустити у фоні, одразу повернути термінал

Варіант B — tmux (красивіший)

tmux new -s mybot        # створити сесію "mybot"
# тут запускаєш свою програму нормально: python3 bot.py
# щоб "вийти", але лишити працювати: Ctrl+B, потім D

tmux ls                   # список сесій
tmux attach -t mybot      # повернутись до "mybot"
09

Знайди й зупини процес

Підчистити за собою
СЕРЕДНЄ

Якщо процес повиснув або більше не треба — треба його завершити.

Знайти свої процеси

# усі твої процеси
ps -u $USER

# знайти процес по імʼю
pgrep -af python3

# лише свої + фільтр
ps -u $USER | grep python

Зупинити

# ввічливо попросити закритись
kill <PID>

# якщо не реагує — жорстко
kill -9 <PID>

# убити всі свої процеси python за назвою
pkill -u $USER python3
⚠️ Ти не можеш вбити чужі процеси — тільки свої. Це захист системи.

Огляд навантаження системи

top        # інтерактивний список усіх процесів. Вийти: q
htop       # красивіший варіант (якщо встановлено)
free -h    # скільки памʼяті вільно
df -h      # скільки диска
10

Запусти Telegram-бота

Фінальний бос — свій бот у інтернеті 24/7
ВАЖКО

Зараз ти створиш свого Telegram-бота, напишеш йому код на Python і запустиш його на сервері.

Крок 1 — отримати токен від BotFather

  1. У Telegram знайди @BotFather
  2. Напиши /newbot
  3. Придумай назву (довільна) і username (має закінчуватись на bot, напр. bodko_echo_bot)
  4. BotFather дасть HTTP API token — схожий на 7624517658:AAHNPb2IYL...
  5. Нікому не показуй токен — це пароль бота

Крок 2 — встановити бібліотеку

ssh [email protected]
pip3 install --user python-telegram-bot

Крок 3 — код бота

cd ~
nano bot.py

Встав (заміни YOUR_TOKEN):

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

TOKEN = "YOUR_TOKEN_HERE"

async def start(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text(f"Привіт, {update.effective_user.first_name}! 👋")

async def echo(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text(f"Ти сказав: {update.message.text}")

app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
print("🤖 Bot is running... Ctrl+C to stop")
app.run_polling()

Крок 4 — запустити і перевірити

python3 bot.py

У Telegram знайди свого бота за username і напиши /start. Має відповісти 👋.

Крок 5 — зробити, щоб працював постійно

Зараз бот живе поки відкритий SSH. Застосуй знання з завдання 08:

# зупини поточний (Ctrl+C), потім:
nohup python3 bot.py > bot.log 2>&1 &
echo $!

# перевір логи
tail -f bot.log         # Ctrl+C щоб припинити спостереження
⚠️ Токен у коді = у файлі на сервері. Не вставляй цей файл на GitHub. Краще зчитувати з .env — але для навчання поки і так працює.

Ідеї, куди рости

  • Команда /weather місто — віддає погоду (API openweathermap.org)
  • Команда /uptime — бот читає uptime на сервері й відповідає
  • Команда /joke — випадковий жарт зі списку
  • Inline-кнопки замість текстових команд