Практичний курс з керування власним сервером. Виконуй завдання по порядку — після кожного став галочку. Усі команди можна копіювати й вставляти в термінал. Результати видно одразу.
91.219.61.3022<username> (напр. bodko.v)/home/<username>/www/9000–9042 — подивись у списку біля свого іменіhttp://91.219.61.30:<порт>/
Список логінів і паролів учнів — приватна інформація.
Учень: свої дані ви отримали окремо від вчителя. У прикладах нижче замість bodko.v підставляйте свій логін.
passwd. Початкові паролі знає вчитель і поки ти їх не змінив — ризик.Введи пароль викладача, щоб побачити логіни/паролі класу.
SSH — це захищений спосіб керувати сервером з твого комп'ютера через командний рядок.
ssh [email protected]
Пароль не відображається, коли ти його вводиш — це нормально, не баг. Набери й натисни Enter.
yes і Enter.bodko.v@vpsqt8zq:~$ # <-- ти на сервері!
Щоб вийти назад до свого комп'ютера:
exit
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 — скільки мілісекунд пакет летів туди і назад. Менше = швидше зʼєднання.
На Windows — натисни Ctrl+C. На Linux/Mac — те саме.
Увійди на сервер (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 .. # піднятись на рівень вище
cd ta+Tab → cd task1/./home/bodko.v/ # твоя домашня папка ~ ├── www/ # <-- усе звідси публікується в інтернет │ ├── index.html # головна сторінка :9000/ │ ├── task1/ # /task1/ │ ├── task2/ # /task2/ │ ├── task3/ # /task3/ │ └── task4/ # /task4/ └── (можна створювати свої файли й папки тут)
SFTP — як звичайний файловий менеджер, тільки для сервера. Ти бачиш ліворуч свої файли, праворуч — серверні, і перетягуєш мишкою.
Protocol: SFTP Host: 91.219.61.30 Port: 22 Logon: Normal User: bodko.v Password: (твій пароль)
/home/bodko.v/Завантаж з winscp.net, ті ж дані для логіну.
hello.txt із будь-яким текстом/home/bodko.v/www/ на серверіhttp://91.219.61.30:9000/hello.txtУсе що ти кладеш у ~/www/ — одразу доступне на твоєму публічному порту.
nanossh [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
На сервері вже встановлено 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
Remote - SSH. Далі F1 → "Remote-SSH: Connect to Host" → [email protected]. Відкриєш свою папку так, ніби вона на твоєму компʼютері.Порт — це як номер квартири на одному домі. 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
Коли ти запускаєш python3 script.py — він зупиниться, щойно ти закриєш SSH. Щоб цього не сталось — використай nohup або tmux.
# запустити long_worker.py так, щоб не впав після виходу nohup python3 long_worker.py > log.txt 2>&1 & # побачити PID (номер процесу) — запамʼятай його echo $! # подивитись, чи живий ps -p <PID>
Розбір команди:
nohup — «не вбивай процес при виході з сесії»> log.txt — увесь вивід пиши у файл log.txt2>&1 — помилки теж у той же файл& — запустити у фоні, одразу повернути терміналtmux new -s mybot # створити сесію "mybot" # тут запускаєш свою програму нормально: python3 bot.py # щоб "вийти", але лишити працювати: Ctrl+B, потім D tmux ls # список сесій tmux attach -t mybot # повернутись до "mybot"
Якщо процес повиснув або більше не треба — треба його завершити.
# усі твої процеси 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 # скільки диска
Зараз ти створиш свого Telegram-бота, напишеш йому код на Python і запустиш його на сервері.
/newbotbot, напр. bodko_echo_bot)7624517658:AAHNPb2IYL...ssh [email protected] pip3 install --user python-telegram-bot
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()
python3 bot.py
У Telegram знайди свого бота за username і напиши /start. Має відповісти 👋.
Зараз бот живе поки відкритий SSH. Застосуй знання з завдання 08:
# зупини поточний (Ctrl+C), потім: nohup python3 bot.py > bot.log 2>&1 & echo $! # перевір логи tail -f bot.log # Ctrl+C щоб припинити спостереження
.env — але для навчання поки і так працює./weather місто — віддає погоду (API openweathermap.org)/uptime — бот читає uptime на сервері й відповідає/joke — випадковий жарт зі списку