Модуль 0.11: Ваш перший сервер — підбиваємо підсумки
Складність:
[СЕРЕДНЯ]— Підсумковий проєктЧас на виконання: 40–50 хвилин
Необхідні знання: Модуль 0.1 до Модуля 0.9 — усі вони
Що ви зможете зробити
Розділ «Що ви зможете зробити»Після завершення цього модуля ви зможете:
- Розгорнути простий вебсервер через термінал і зрозуміти, як він працює «під капотом»
- Відстежити HTTP-запит від браузера до сервера і назад, пояснюючи кожен крок
- Протестувати працюючий сервер за допомогою
curlіз командного рядка - Поєднати концепції з усіх попередніх модулів: файли, мережі, порти, SSH — усе це поєднується тут
Чому це важливо
Розділ «Чому це важливо»Це ваш фінальний іспит. Підсумковий проєкт. Момент, коли все стає на свої місця.
Ви збираєтеся розгорнути вебсайт, який зможе відвідати будь-хто. Використовуючи лише термінал.
Ніяких складних конструкторів сайтів. Жодного WordPress. Жодного Squarespace. Тільки ви, термінал і навички, які ви здобували, починаючи з Модуля 0.1.
Згадайте, з чого ви починали. У Модулі 0.1 ви дізналися, що взагалі таке комп’ютер. А тепер ви збираєтеся використати його, щоб розмістити щось в інтернеті. Це не дрібниця. Це саме те, що професіонали роблять щодня — і ви теж ось-ось це зробите.
У цьому модулі є два варіанти:
- Варіант А: Локально (безкоштовно, реєстрація не потрібна) — Запустіть вебсервер на власній машині за допомогою Docker
- Варіант Б: У хмарі (безкоштовний рівень, потрібна реєстрація) — Розгорніть на справжньому хмарному сервері, до якого матиме доступ увесь інтернет
Варіант А швидший і простіший. Варіант Б ближчий до того, що відбувається в реальному світі. Обидва варіанти правильні. Оберіть той, що вас більше цікавить, або виконайте обидва.
Навички, які ви здобули
Розділ «Навички, які ви здобули»Перед початком давайте підіб’ємо підсумки. Кожен модуль, який ви пройшли, відіграє тут свою роль:
| Модуль | Навичка | Як ви це використаєте |
|---|---|---|
| 0.1 | Як працюють комп’ютери | Розуміння того, що насправді робить сервер |
| 0.2 | Термінал | Ваш єдиний інтерфейс для всього цього проєкту |
| 0.3 | Команди | Навігація, створення файлів, перевірка статусу |
| 0.4 | Файли та директорії | Створення HTML-файлу вашого вебсайту |
| 0.5 | Редагування файлів | Написання вашої вебсторінки за допомогою nano |
| 0.6 | Мережі | Розуміння портів, IP-адрес та того, як браузери знаходять сервери |
| 0.7 | Сервери та SSH | Знання того, що таке сервер (і підключення до нього у Варіанті Б) |
| 0.8 | Пакети | Встановлення ПЗ на сервері |
| 0.9 | Хмара | Розуміння того, де «живе» ваш сервер (Варіант Б) |
Якщо ви пропустили будь-який із цих модулів, поверніться і пройдіть його спочатку. Цей проєкт передбачає, що у вас готові всі дев’ять навичок.
Що таке вебсервер?
Розділ «Що таке вебсервер?»Перш ніж ми щось розгорнемо, переконаймося, що ми чітко розуміємо одну концепцію.
Вебсервер — це програма, яка очікує на запити та надсилає вебсторінки у відповідь. Це все. Коли ви вводите google.com у своєму браузері, браузер надсилає запит до вебсервера Google, а сервер повертає HTML, який ваш браузер відображає.
Найпопулярніший вебсервер у світі називається nginx (вимовляється як «енджин-ікс»). Він забезпечує роботу приблизно третини всіх вебсайтів в інтернеті. Сьогодні ми використаємо саме його.
У нашій аналогії з ресторанною кухнею: nginx — це офіціант. Він приймає замовлення (HTTP-запити від браузерів) і доставляє їжу (HTML-сторінки) назад клієнту.
Варіант А: Локальний сервер з Docker (безкоштовно, без реєстрації)
Розділ «Варіант А: Локальний сервер з Docker (безкоштовно, без реєстрації)»Цей варіант використовує Docker — інструмент, який запускає додатки в ізольованих «контейнерах». Вам не потрібно зараз глибоко розуміти Docker (для цього є курс Cloud Native 101). Поки що просто сприймайте його як спосіб запустити програму без її остаточного встановлення на вашу машину.
Крок 1: Встановіть середовище виконання контейнерів
Розділ «Крок 1: Встановіть середовище виконання контейнерів»Вам потрібен інструмент для запуску контейнерів. Оберіть будь-який із цих — для нашої вправи вони працюють однаково:
| Інструмент | Найкраще для | Ліцензія |
|---|---|---|
| Docker Desktop | Найпопулярніший, найбільша спільнота | Безкоштовно для персонального/малого бізнесу |
| OrbStack | macOS — найшвидший, найлегший, найкращий UX | Безкоштовно для персонального використання |
| Podman Desktop | Без демона, безправний (rootless) за замовчуванням | Безкоштовно та з відкритим кодом |
| Rancher Desktop | Включає вбудований K8s | Безкоштовно та з відкритим кодом |
- macOS/Windows: Завантажте та встановіть будь-який із перелічених вище
- Linux:
(Якщо використовуєте Docker, вийдіть із системи та зайдіть знову після виконання команди usermod.)
Terminal window # Варіант А: Dockersudo apt update && sudo apt install docker.io -ysudo systemctl start dockersudo usermod -aG docker $USER# Варіант Б: Podman (без демона, права root не потрібні)sudo apt update && sudo apt install podman -y
Примітка: Якщо ви встановите Podman, команди будуть ідентичними — просто пишіть
podmanзамістьdocker. Ви навіть можете створити псевдонім:alias docker=podman
Перевірте, чи працює Docker:
docker --versionВи повинні побачити щось на кшталт Docker version 24.x.x або новішу версію. Якщо ви отримали повідомлення «command not found», Docker ще не встановлено.
Крок 2: Запустіть nginx
Розділ «Крок 2: Запустіть nginx»Ось воно. Одна команда, щоб запустити вебсервер:
docker run -d -p 8080:80 --name my-website nginxЗупиніться та подумайте: Ви відображаєте порт 8080 на порт 80. Якщо інша програма на вашому комп’ютері вже використовує порт 8080 (наприклад, інший вебсервер або інструмент локальної розробки), що, на вашу думку, зробить ця команда Docker? Вона перезапише існуючу програму чи видасть помилку?
Давайте розберемо кожну частину цієї команди (тому що розуміння важливіше за запам’ятовування):
| Частина | Що вона робить |
|---|---|
docker run | Запустити новий контейнер |
-d | Запустити у фоновому режимі (detached), щоб повернути доступ до термінала |
-p 8080:80 | З’єднати порт 8080 вашого комп’ютера з портом 80 контейнера |
--name my-website | Дати контейнеру зрозумілу назву |
nginx | Використати образ nginx (Docker завантажить його автоматично) |
Пам’ятаєте Модуль 0.6 про мережі? Порт 80 — це стандартний порт для вебтрафіку. Ми відображаємо його на 8080 вашої машини, щоб він не конфліктував ні з чим іншим.
Поєднайте факти: Прапор
-p 8080:80— це Модуль 0.6 (порти) у дії. Ваш браузер надсилає запит на порт 8080 вашої машини. Docker перенаправляє його на порт 80 всередині контейнера, де очікує nginx. Відповідь повертається тим самим шляхом. Кожна концепція з цих модулів зараз працює разом.
Крок 3: Перевірте роботу
Розділ «Крок 3: Перевірте роботу»Відкрийте веббраузер і перейдіть за адресою:
http://localhost:8080Ви повинні побачити сторінку з написом “Welcome to nginx!”
Це вебсервер, що працює на вашій машині. Ви щойно це зробили. Однією командою.
Крок 4: Створіть власну вебсторінку
Розділ «Крок 4: Створіть власну вебсторінку»Зупиніться та подумайте: Як ви думаєте, що станеться, якщо ви заміните стандартну сторінку nginx власним HTML-файлом всередині контейнера? Вона відобразиться миттєво чи потрібно буде щось перезапустити? Спробуйте вгадати, а потім виконайте кроки та перевірте себе.
Тепер давайте замінимо ту стандартну сторінку на щось створене вами. Відкрийте термінал і створіть HTML-файл:
nano ~/index.htmlНаберіть (або вставте) наступне:
<!DOCTYPE html><html><head> <title>Мій перший сервер</title> <style> body { font-family: Arial, sans-serif; max-width: 600px; margin: 80px auto; text-align: center; background-color: #1a1a2e; color: #eee; } h1 { color: #00d4ff; } p { font-size: 1.2em; line-height: 1.6; } .badge { display: inline-block; background: #00d4ff; color: #1a1a2e; padding: 8px 20px; border-radius: 20px; font-weight: bold; margin-top: 20px; } </style></head><body> <h1>Привіт, Інтернете!</h1> <p>Ця сторінка працює на сервері, який я налаштував самостійно, використовуючи лише термінал.</p> <p>Я пройшов шлях від «що таке комп'ютер» до «я розгорнув вебсайт» за десять модулів.</p> <div class="badge">Від нуля до термінала: Завершено</div></body></html>Збережіть та вийдіть (Ctrl + O, Enter, Ctrl + X).
Крок 5: Скопіюйте сторінку на сервер
Розділ «Крок 5: Скопіюйте сторінку на сервер»Пам’ятайте, вебсервер працює всередині Docker-контейнера. Вам потрібно скопіювати ваш файл у нього:
docker cp ~/index.html my-website:/usr/share/nginx/html/index.htmlЦя команда каже: «Скопіюй index.html з моєї домашньої директорії в контейнер з назвою my-website, розмістивши його за шляхом /usr/share/nginx/html/index.html».
Шлях /usr/share/nginx/html/ — це місце, де nginx шукає вебсторінки для обслуговування. Це просто директорія — точно така ж, як ті, з якими ви працювали в Модулі 0.4.
Крок 6: Перегляньте ВЛАСНУ сторінку
Розділ «Крок 6: Перегляньте ВЛАСНУ сторінку»Поверніться в браузер і оновіть сторінку http://localhost:8080.
Ви повинні побачити свою кастомну сторінку — темний фон, блакитний заголовок, ваші слова.
Ви щойно розгорнули вебсайт.
Ви створили файл (Модуль 0.4), відредагували його за допомогою nano (Модуль 0.5), зрозуміли, що означають порт і localhost (Модуль 0.6), і обслужили його за допомогою запущеного процесу сервера (Модуль 0.7). Усе поєдналося.
Очищення
Розділ «Очищення»Коли закінчите милуватися своєю роботою:
docker stop my-websitedocker rm my-websiteЦе зупинить і видалить контейнер. Ваш файл ~/index.html залишиться на вашій машині.
Варіант Б: Хмарний сервер (безкоштовний рівень)
Розділ «Варіант Б: Хмарний сервер (безкоштовний рівень)»Цей варіант розміщує ваш вебсайт на справжньому сервері в інтернеті з публічною IP-адресою. Будь-хто у світі зможе відвідати його. Саме так працюють справжні вебсайти.
Вам знадобиться безкоштовний обліковий запис у хмарного провайдера. Наведені нижче інструкції використовують загальний підхід, який працює з AWS, GCP або Oracle Cloud.
Крок 1: Отримайте безкоштовну хмарну VM
Розділ «Крок 1: Отримайте безкоштовну хмарну VM»Зареєструйтеся на безкоштовному рівні (free tier) в одного з цих провайдерів:
- Oracle Cloud (найщедріший безкоштовний рівень — постійно безкоштовні VM): cloud.oracle.com/free
- Google Cloud ($300 безкоштовного кредиту на 90 днів): cloud.google.com/free
- AWS (750 годин/місяць t2.micro протягом 12 місяців): aws.amazon.com/free
Створіть найменшу доступну Linux VM (Ubuntu найпростіша для новачків). Під час налаштування:
- Оберіть Ubuntu як операційну систему
- Виберіть найменший безкоштовний екземпляр (наприклад, t2.micro на AWS, e2-micro на GCP)
- Завантажте SSH-ключ, коли з’явиться відповідний запит — він знадобиться для підключення
- Переконайтеся, що група безпеки / брандмауер (firewall) дозволяє порт 22 (SSH) та порт 80 (HTTP)
Запишіть публічну IP-адресу вашого нового сервера. Вона виглядатиме приблизно так: 34.123.45.67.
Крок 2: Підключіться через SSH
Розділ «Крок 2: Підключіться через SSH»Пам’ятаєте Модуль 0.7? Ось де SSH стає реальністю:
chmod 400 ~/Downloads/my-key.pemssh -i ~/Downloads/my-key.pem ubuntu@YOUR_PUBLIC_IPЗамініть YOUR_PUBLIC_IP реальною IP-адресою вашої VM. Замініть шлях до ключа на той, де ви його зберегли.
Якщо все налаштовано правильно, ви побачите вітальне повідомлення Linux і запрошення до введення команд. Тепер ви перебуваєте всередині комп’ютера в центрі обробки даних десь далеко — можливо, на іншому континенті.
Крок 3: Встановіть nginx
Розділ «Крок 3: Встановіть nginx»Тепер скористайтеся навичками управління пакетами з Модуля 0.8:
sudo apt updatesudo apt install nginx -yЦе все. nginx встановлено і запущено. В Ubuntu він запускається автоматично після встановлення.
Перевірте, чи він працює:
sudo systemctl status nginxВи повинні побачити зелений напис active (running).
Зупиніться та подумайте: Ви щойно встановили nginx, і він запустився автоматично. Ще до того, як ви відкриєте веббраузер, яку команду ви могли б запустити прямо тут, у терміналі, щоб переконатися, що сервер справді відповідає на запити на вашій VM?
Крок 4: Протестуйте сторінку за замовчуванням
Розділ «Крок 4: Протестуйте сторінку за замовчуванням»Відкрийте браузер на власному комп’ютері та відвідайте:
http://YOUR_PUBLIC_IPВи повинні побачити стандартну сторінку nginx. Ця сторінка обслуговується машиною в дата-центрі через весь інтернет прямо у ваш браузер. Витратьте хвилину, щоб оцінити це.
Крок 5: Створіть власну сторінку
Розділ «Крок 5: Створіть власну сторінку»Зупиніться та подумайте: Стандартна сторінка nginx знаходиться за шляхом
/var/www/html/index.html. Якщо ви створите другий файл під назвоюabout.htmlу тій самій директорії, яку саме URL-адресу ви введете в браузері, щоб переглянути його?
Все ще перебуваючи в SSH-сесії, відредагуйте стандартну вебсторінку:
sudo nano /var/www/html/index.htmlПримітка: В Ubuntu для nginx шлях —
/var/www/html/, а не/var/share/. Різні системи розміщують вебфайли в трохи різних місцях.
Видаліть усе у файлі (багаторазово натискаючи Ctrl + K) і наберіть власний HTML:
<!DOCTYPE html><html><head> <title>Мій перший хмарний сервер</title> <style> body { font-family: Arial, sans-serif; max-width: 600px; margin: 80px auto; text-align: center; background-color: #1a1a2e; color: #eee; } h1 { color: #00d4ff; } p { font-size: 1.2em; line-height: 1.6; } .badge { display: inline-block; background: #00d4ff; color: #1a1a2e; padding: 8px 20px; border-radius: 20px; font-weight: bold; margin-top: 20px; } </style></head><body> <h1>Привіт, Інтернете!</h1> <p>Ця сторінка працює на справжньому хмарному сервері, який я налаштував самостійно, використовуючи лише SSH та термінал.</p> <p>Я пройшов шлях від «що таке комп'ютер» до «я розгорнув вебсайт в інтернеті» за десять модулів.</p> <div class="badge">Від нуля до термінала: Завершено</div></body></html>Збережіть та вийдіть (Ctrl + O, Enter, Ctrl + X).
Крок 6: Подивіться на свою сторінку в інтернеті
Розділ «Крок 6: Подивіться на свою сторінку в інтернеті»Оновіть http://YOUR_PUBLIC_IP у своєму браузері.
Ваша кастомна сторінка тепер доступна в інтернеті. Ви можете надіслати цю IP-адресу другу, і він теж побачить вашу сторінку. Зі свого телефону, з іншої країни — звідки завгодно.
Ви зробили це за допомогою SSH (Модуль 0.7), управління пакетами (Модуль 0.8), редагування файлів (Модуль 0.5) та розуміння мереж (Модуль 0.6) і хмарних обчислень (Модуль 0.9).
Важливо: Попередження про безкоштовний рівень
Розділ «Важливо: Попередження про безкоштовний рівень»Хмарні VM можуть коштувати грошей, якщо ви перевищите ліміти безкоштовного рівня. Коли закінчите цю вправу:
- Зупиніть або видаліть (terminate) вашу VM через консоль хмарного провайдера
- Або залиште її працювати, якщо ваш безкоштовний рівень це дозволяє (наприклад, Oracle always-free)
- Ніколи не залишайте хмарний ресурс увімкненим, якщо ви про нього забули — це одна з найпоширеніших (і найдорожчих) помилок новачків
Щоб відключитися від SSH:
exitЧи знали ви?
Розділ «Чи знали ви?»-
Найперший вебсайт у світі досі працює. Тім Бернерс-Лі створив його в 1991 році в CERN. Він обслуговувався комп’ютером NeXT із прикріпленою до нього рукописною запискою: «Ця машина — сервер. НЕ ВИМИКАТИ ЖИВЛЕННЯ!!». Ви все ще можете відвідати його за адресою info.cern.ch. Ваше налаштування сервера сьогодні було складнішим, ніж те, з якого почалася Всесвітня павутина.
-
nginx було створено, щоб виграти парі. У 2002 році Ігор Сисоєв поставив собі за мету вирішити «проблему C10K» — обробку 10 000 одночасних з’єднань на одному сервері. На той час Apache (домінуючий вебсервер) мав із цим труднощі. Сисоєв витратив два роки на написання nginx, і він не просто вирішив C10K — сучасний nginx може обробляти понад мільйон одночасних з’єднань. Зараз він обслуговує близько 34% усіх вебсайтів в інтернеті.
-
Ваш вебсайт обслуговується так само, як і Netflix. Серйозно. Netflix, Airbnb та Dropbox використовують nginx як свій вебсервер. Різниця між вашим налаштуванням і їхнім полягає в масштабі (у них тисячі серверів) і конфігурації (у них є цілі команди інженерів, що підбирають налаштування). Але фундаментальна технологія — процес, що очікує на порту 80 і повертає HTML — ідентична.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це проблема | Що робити замість цього |
|---|---|---|
| Забули відкрити порт 80 у хмарному брандмауері | Ваш сервер працює, але ніхто не може до нього достукатися | Перевірте групи безпеки / правила брандмауера; дозвольте вхідний HTTP на порт 80 |
Використання http://localhost для хмарного варіанту | localhost означає вашу машину, а не віддалений сервер | Використовуйте публічну IP-адресу вашої хмарної VM |
Редагування index.html за неправильним шляхом | nginx не покаже ваш файл, якщо він у невірній директорії | Ubuntu використовує /var/www/html/, Docker використовує /usr/share/nginx/html/ |
Забули sudo під час редагування файлів на сервері | Файли вебсервера належать root; ви отримаєте «Permission denied» | Використовуйте sudo nano /var/www/html/index.html |
| Залишили хмарну VM увімкненою після вправи | Безкоштовні рівні мають ліміти; з вас можуть списати гроші | Зупиніть або видаліть VM, коли закінчите експериментувати |
| Не завантажили SSH-ключ під час створення VM | Ви не зможете підключитися до свого сервера без нього | Завжди негайно зберігайте файл ключа; деякі провайдери дозволяють завантажити його лише один раз |
Контрольні запитання
Розділ «Контрольні запитання»-
Ви пояснюєте роль вебсервера колезі, який налаштовує новий додаток. Він запитує: «Я написав свої HTML-файли, навіщо мені цей запущений nginx на сервері?». Як ви поясните конкретну роль, яку відіграє nginx у доставці цих файлів користувачам?
Відповідь
Nginx діє як «офіціант» або посередник між файловою системою сервера та зовнішнім інтернетом. Хоча у вас є HTML-файли на жорсткому диску, браузер не може просто залізти у ваш комп'ютер і прочитати їх. Nginx активно прослуховує конкретний мережевий порт (зазвичай 80 або 443) на предмет вхідних HTTP-запитів. Коли запит надходить, nginx інтерпретує його, знаходить відповідний HTML-файл у файловій системі, упаковує його у валідну HTTP-відповідь і надсилає назад мережею до браузера користувача. Без цього механізму активного очікування та відповіді ваші HTML-файли залишатимуться повністю недоступними для вебу. -
Ви успішно виконали
docker run -d -p 9090:80 nginxна своїй локальній машині. Однак за звичкою ви відкриваєте браузер і переходите за адресоюhttp://localhost:8080. Що саме відбувається і чому зміна першого числа в прапорі-pпризвела до такого результату?Відповідь
Ваш браузер відобразить помилку «connection refused» (відмова у з'єднанні) або «site can't be reached» (сайт недоступний). Прапор `-p 9090:80` каже Docker відобразити порт 9090 на вашій фізичній машині (хості) на порт 80 всередині ізольованого контейнера, де насправді очікує nginx. Відвідуючи `localhost:8080`, ваш браузер стукає в мережеві двері (порт 8080), за якими зараз жоден додаток не стоїть. Nginx весело працює всередині контейнера і чекає на трафік на своєму внутрішньому порту 80, але цей трафік тепер ексклюзивно направляється з порту 9090 вашої локальної машини, а не з 8080. -
Ви розгортаєте вебсайт за допомогою хмарної VM (Варіант Б) і успішно копіюєте свій кастомний
index.htmlу/var/www/html/index.html. Пізніше ви пробуєте метод з Docker (Варіант А) і копіюєте той самий HTML-файл у/var/www/html/index.htmlвсередині контейнера, але браузер все одно показує стандартну сторінку «Welcome to nginx!». Що пішло не так і чого це вчить вас щодо конфігурації ПЗ?Відповідь
Контейнер ігнорує ваш кастомний файл, тому що офіційний образ nginx для Docker налаштований його творцями на пошук вебфайлів в іншій директорії — а саме в `/usr/share/nginx/html/`. ПЗ на кшталт nginx не має одного універсального магічного місця для файлів; натомість воно покладається на файл конфігурації, який диктує точний шлях у файловій системі. Супроводжувачі пакетів для Ubuntu (Варіант Б) обрали `/var/www/html/` як свій стандарт, тоді як супроводжувачі образу Docker обрали `/usr/share/nginx/html/`. Це вчить нас тому, що шляхи — це довільний вибір конфігурації, зроблений системними адміністраторами або авторами пакетів, і ви завжди повинні адаптуватися до конфігурації конкретного середовища, а не припускати наявність універсальних значень за замовчуванням. -
Простежте, що відбувається крок за кроком, коли ви вводите
http://YOUR_PUBLIC_IPу браузері, і ваш сервер nginx повертає вашу кастомну сторінку. Згадайте DNS, TCP, порти, nginx та файлову систему.Відповідь
Коли ви вводите URL, ваш браузер перевіряє, чи потрібно йому розпізнати доменне ім'я через DNS (хоча тут ми використовуємо пряму IP-адресу, пропускаючи розпізнавання DNS). Далі ваш комп'ютер ініціює TCP-з'єднання з цією IP-адресою саме на порт 80, стандартний порт для HTTP-трафіку. Після завершення TCP-рукостискання браузер надсилає HTTP-запит GET, запитуючи кореневий документ (`/`). Вебсервер nginx, що прослуховує порт 80, отримує цей запит, перевіряє свою конфігурацію, щоб знайти відповідну директорію у файловій системі (наприклад, `/var/www/html/`), і читає знайдений там файл `index.html`. Нарешті, nginx надсилає вміст цього файлу назад через TCP-з'єднання як HTTP-відповідь, яку ваш браузер перетворює на видиму вебсторінку. -
Ваш браузер показує «connection refused» при відвідуванні
localhost:8080. Назвіть три можливі причини та як би ви діагностували кожну.Відповідь
«Connection refused» зазвичай означає, що ніщо активно не прослуховує цей порт, що вказує на кілька поширених проблем. По-перше, Docker-контейнер міг впасти або зупинитися; ви можете діагностувати це, запустивши `docker ps`, щоб перевірити, чи ваш контейнер `my-website` все ще працює. По-друге, ви могли вказати неправильні порти у вашій команді запуску, наприклад `-p 8080:8080` замість `-p 8080:80`; перевірте це, переглянувши відображення портів у виводі `docker ps`. По-третє, інший додаток може вже використовувати порт 8080 на вашій хост-машині, заважаючи Docker прив'язатися до нього; ви можете перевірити це за допомогою команди на кшталт `lsof -i :8080` або `netstat`, щоб побачити, який процес тримає порт. -
Ви можете підключитися до своєї хмарної VM через SSH, але не через браузер на порту 80. Яка найімовірніша причина і яку команду ви б запустили для перевірки?
Відповідь
Найімовірніша причина — брандмауер, що блокує вхідний вебтрафік, оскільки хмарні провайдери зазвичай блокують порт 80 за замовчуванням, дозволяючи порт 22 для SSH. Оскільки SSH працює, ми знаємо, що сервер онлайн і доступний, тому проблема стосується саме HTTP-трафіку. Щоб перевірити, чи працює сам сервер коректно всередині, ви можете підключитися через SSH і запустити `curl http://localhost`. Якщо `curl` повертає HTML-контент локально, це підтверджує, що nginx працює ідеально, а проблема точно у зовнішньому брандмауері хмарного провайдера або налаштуваннях групи безпеки, що блокують зовнішній доступ до порту 80. -
Ви розгорнули свій сервер і хочете перевірити, чи повертає він правильний HTML, перш ніж відкривати браузер. Як би ви використали
curlдля перевірки цього і що саме ви шукаєте у виводі?Відповідь
Ви можете використати команду `curl http://localhost:8080` (або `curl http://YOUR_PUBLIC_IP`) прямо у вашому терміналі, щоб симулювати базовий запит браузера. Цей інструмент надсилає HTTP-запит GET і виводить сире тіло відповіді прямо на екран, оминаючи будь-яке графічне відображення. Ви шукаєте сирий HTML-код вашої кастомної сторінки, наприклад ваші теги `Привіт, Інтернете!
`. Якщо він повертає очікуваний HTML, ви знаєте, що сервер успішно обробляє запити та віддає правильний файл, доводячи роботу бекенда ще до залучення браузера.
Практична вправа: Зробіть це своїм
Розділ «Практична вправа: Зробіть це своїм»Ви розгорнули шаблонну сторінку. Тепер зробіть її справді своєю.
Частина 1: Завдання на кастомізацію
Розділ «Частина 1: Завдання на кастомізацію»Налаштуйте вашу вебсторінку, щоб вона містила:
- Ваше ім’я (або псевдонім — це все-таки інтернет)
- Три речі, які ви дізналися в цьому курсі і які вас здивували
- Посилання на будь-який вебсайт, який вам подобається (використовуйте тег
<a href="...">)
Ось підказка щодо синтаксису посилання:
<a href="https://kubedojo.dev" style="color: #00d4ff;">KubeDojo</a>Частина 2: Завдання «Зламайте та полагодьте»
Розділ «Частина 2: Завдання «Зламайте та полагодьте»»Тепер, коли ваш сервер працює, давайте навмисно зламаємо його і потренуємося діагностувати проблему. У реальному світі усунення несправностей (troubleshooting) так само важливе, як і розгортання.
Крок 1: Зламайте ваше розгортання Залежно від обраного варіанту, навмисно внесіть помилку конфігурації:
- Варіант А (Локально): Зупиніть робочий контейнер (
docker stop my-websiteтаdocker rm my-website). Запустіть новий із неправильним відображенням портів:docker run -d -p 9090:80 --name broken-site nginx. - Варіант Б (Хмара): Підключіться до вашої VM і навмисно перейменуйте файл index на той, який nginx не шукатиме:
sudo mv /var/www/html/index.html /var/www/html/broken.html.
Крок 2: Спостерігайте за збоєм
- Варіант А: Спробуйте відвідати
http://localhost:8080у браузері. Яке саме повідомлення про помилку дає ваш браузер та мережа? Чому це сталося? - Варіант Б: Спробуйте відвідати вашу публічну IP-адресу в браузері. Яке саме повідомлення про помилку ви бачите? Чому це сталося?
Крок 3: Діагностуйте та полагодьте Використовуйте свої навички роботи з терміналом для розслідування проблеми. Подумайте, як трафік іде від вашого браузера до порту, потім до сервера і, нарешті, до файлової системи. Як тільки ви зрозумієте місце поломки, виконайте необхідні команди в терміналі, щоб виправити її, аби ваш кастомний сайт знову став доступним за правильною URL-адресою.
Критерії успіху
Розділ «Критерії успіху»- Ваша кастомна сторінка завантажується в браузері (або
localhost:8080, або публічна IP-адреса) - Вона містить ваше ім’я, три речі, які ви дізналися, і принаймні одне посилання
- Ви редагували її за допомогою nano (не просто вставили в текстовий редактор з GUI)
- Ви успішно зламали свій сервер, зафіксували конкретну помилку та повернули його в робочий стан
- Ви можете пояснити комусь, що робить nginx і чому сторінка з’являється
Рубрика самооцінки
Розділ «Рубрика самооцінки»Використовуйте цю рубрику, щоб оцінити глибину вашого розуміння, а не просто за принципом «працює/не працює»:
- Базовий: Ваша кастомна сторінка завантажується з вашим ім’ям та посиланням. Ви успішно зламали сервер і сліпо виконали команди, щоб його полагодити, досягнувши бажаного результату.
- Добре: Ваша кастомна сторінка завантажується, і ви розумієте чому. Ви можете впевнено пояснити різницю між локальним портом (
8080) та портом контейнера (80), пояснити, чомуsudoбув потрібен для хмарного варіанту, та чітко сформулювати точну причину збою у вашому сценарії «Зламайте та полагодьте» перед тим, як ви його виправили. - Відмінно: Ви суттєво змінили команду nginx або HTML (наприклад, додали зображення, змінили порти або підключили локальну директорію замість копіювання файлу). Ви використовували
curlу терміналі для перевірки відповіді сервера перед відкриттям браузера, доводячи, що розумієте базовий механізм HTTP. Ви навмисно зламали сервер новим, непередбаченим способом і успішно усунули проблему за допомогою термінальних інструментів.
Якщо ви це виконали — ви підтвердили кожну навичку з курсу «Від нуля до термінала».
Наступний модуль — Оберіть свій шлях
Розділ «Наступний модуль — Оберіть свій шлях»Ви закінчили курс Від нуля до термінала. Ви пройшли шлях від «що таке комп’ютер» до «я розгорнув вебсайт» за десять модулів. Це справжнє досягнення.
Тепер у вас є вибір. Дорога розділяється на три шляхи, і всі вони правильні.
Шлях А: Глибоке занурення в Linux
Розділ «Шлях А: Глибоке занурення в Linux»Вам сподобався термінал? Йдіть глибше.
Трек Linux проведе вас всередину самої операційної системи — ядро, управління процесами, нутрощі файлової системи, мережеві механізми «під капотом», дозволи та безпека. Це ті знання, що відрізняють того, хто просто користується Linux, від того, хто його справді розуміє.
Якщо ви хочете стати системним інженером, SRE або будь-ким, хто керує інфраструктурою — цей шлях зробить вас небезпечно крутим спеціалістом.
Почніть тут: Основи Linux
Шлях Б: Cloud Native
Розділ «Шлях Б: Cloud Native»Ви хочете створювати та розгортати додатки в масштабі? Це те, куди рухається індустрія.
Трек Cloud Native починається саме там, де ви зупинилися. Ви дізнаєтеся про контейнери (технологію, що стоїть за тією командою Docker, яку ви щойно виконали), потім детально вивчите Docker, а згодом Kubernetes — систему, яка автоматично керує тисячами контейнерів на сотнях серверів.
Якщо ви хочете стати хмарним інженером, DevOps-інженером або platform-інженером — це ваш шлях.
Почніть тут: Cloud Native 101
Шлях В: Обидва
Розділ «Шлях В: Обидва»Більшість старших (senior) інженерів знають обидва шляхи. Вони розуміють внутрішню будову Linux і хмарні інструменти. Почніть із того, що вас більше драйвить. Інший шлях нікуди не зникне, коли ви будете готові.
ВИ ТУТ | Модуль 0.10 (Підсумковий проєкт) | +----------+----------+ | | Шлях А Шлях Б Глибокий Linux Cloud Native 101 | | Ядро, процеси Контейнери, Docker Мережеві нутрощі Основи Kubernetes Безпека, гартенінг Сертифікація CKA | | +----------+----------+ | Platform Engineering (SRE, GitOps, DevSecOps)Обидва шляхи сходяться в Platform Engineering. Обидва цінні. Жоден не є «кращим». Оберіть той, що змушує вас відкрити термінал просто зараз.
Заключне слово
Розділ «Заключне слово»Ви щойно розгорнули вебсайт в інтернеті, використовуючи лише текстові команди.
Десять модулів тому ви не знали, що таке термінал.
Ви дізналися, з чого складається комп’ютер. Ви вперше відкрили термінал. Ви орієнтувалися у файловій системі, створювали файли, редагували їх. Ви дізналися, як мережі переносять дані по всій планеті. Ви підключилися до віддаленого сервера. Ви встановили програмне забезпечення. Ви зрозуміли, що насправді означає «хмара».
А потім ви зібрали все це разом і випустили щось реальне.
Це не рівень новачка. Це інженерія.
Ви тут на своєму місці.
«Експерт у чому завгодно колись був початківцем». — Гелен Гейз