Модуль 36

Linux у production-середовищі

Ось готовий урок, створений спеціально за вашим запитом, у стилі енергійних та наочних лекцій CS50.


🎓 УРОК: Linux у Production-середовищі

(Або: Чому ваш код має жити не на вашому ноутбуці)


1. 🔥 Вступ: Проблема та мотивація

Привіт, друзі! 👋

Уявіть ситуацію. Ви написали геніальний веб-сайт. На вашому ноутбуці (localhost) все літає: кнопки натискаються, база даних відповідає, виглядає — цукерочка. Ви закриваєте кришку ноутбука, йдете спати... і ваш сайт зникає для всього світу.

Питання: Чи може ваш ноутбук працювати 24/7 без перерви на сон, оновлення Windows, розрядки батареї та випадково розлитої кави? Відповідь очевидна: Ні.

Саме тут на сцену виходить Production (або "прод"). Це місце, де ваш код живе "по-дорослому". І в 90% випадків це місце керується операційною системою Linux.

Чому не Windows чи macOS? Уявіть, що ваш ноутбук — це домашня кухня. Тут затишно, є красиві шпалери, музика, і ви готуєте їжу (код) для себе. A Linux-сервер у продакшені — це професійна кухня величезного ресторану. * Там немає "шпалер" (графічного інтерфейсу), бо це зайві ресурси. * Там немає "відволікаючих факторів" (спливаючих вікон). * Там усе підпорядковано одній меті: стабільність та швидкість.

Якщо ви хочете бути розробником, а не просто "кодером на локалхості", ви зобов'язані розуміти, як працює ця професійна кухня. Погнали розбиратися! 🚀


2. 🧠 Теоретична база (Що під капотом?)

Забудьте про мишку. У продакшені ми працюємо з текстом. Це називається CLI (Command Line Interface).

Ось три кити, на яких тримається Linux у проді:

1. Віддалений доступ (SSH) — Телепорт

Ви сидите в Києві, а ваш сервер — у Франкфурті. Як ним керувати? Ми використовуємо SSH (Secure Shell). Це як захищений тунель крізь інтернет. * Інтуїтивно: Ви відкриваєте термінальне вікно, і воно "стає" екраном того далекого комп'ютера. * Головне: Ніколи не передавайте паролі відкритим текстом. SSH використовує криптографічні ключі (публічний і приватний). Це ваші цифрові відбитки пальців.

2. Права доступу (Permissions) — Фейс-контроль

У Linux все є файлом. І у кожного файлу є бейджі: * r (read) — можна читати. * w (write) — можна змінювати. * x (execute) — можна запускати як програму.

Є "Бог" системи — користувач root. Він може видалити все. * Залізне правило: Ніколи не запускайте ваші програми від імені root без крайньої потреби! Якщо вашу програму зламають, хакер отримає права "Бога". Ми створюємо звичайних користувачів для кожного сервісу.

3. Демони (Daemons/Services) — Невидимі працівники

Коли ви запускаєте програму в терміналі й закриваєте його — програма помирає. У проді нам потрібно, щоб програма оживала сама, навіть якщо сервер перезавантажився. Цим займається Systemd (менеджер системи). Він запускає "демонів" — фонові процеси, які тихо роблять свою роботу.


3. 🧪 Приклади (Від простого до реального)

Приклад 1: "Привіт, Сервере" (Вхід)

Чого ми очікуємо? Що ми потрапимо всередину іншого комп'ютера.

ssh user@192.168.1.50

Результат: Замість імені вашого ноутбука в терміналі з'явиться user@production-server:~$. Вітаю, ви "всередині". Тут немає папок "Мої документи", тут сувора ієрархія /var, /etc, /home.


Приклад 2: "Хто тут головний?" (Права доступу)

Уявіть, що у нас є скрипт deploy.sh. Спробуємо його запустити.

./deploy.sh
# Результат: Permission denied (Доступ заборонено)

Чому? Linux каже: "Я бачу цей файл, але я не знаю, чи це програма". Йому бракує атрибуту x (execute).

Виправляємо (як це роблять профі):

chmod +x deploy.sh
./deploy.sh
# Результат: Script started... Success!

Ми буквально наклеїли на файл бейдж "Можна виконувати".


Приклад 3: Реальний кейс (Вічний двигун)

Ви запустили свій Python-сервер:

python3 app.py

Сайт працює. Але як тільки ви натиснете Ctrl+C або закриєте вікно — сайт впаде.

Як це робиться у проді? Ми створюємо файл конфігурації для systemd. Назвемо його myapp.service.

[Unit]
Description=My Genious App

[Service]
ExecStart=/usr/bin/python3 /home/user/app.py
Restart=always  <-- Оце найважливіше!

[Install]
WantedBy=multi-user.target

Тепер кажемо системі:

sudo systemctl enable myapp
sudo systemctl start myapp

Що сталося? Тепер, навіть якщо програма "впаде" через помилку, Linux (завдяки рядку Restart=always) миттєво підніме її знову. Ваші користувачі навіть не помітять збою. Це і є resilience (стійкість).


4. 🛠 Практична частина

Час забруднити руки! (Можна виконувати на віртуальній машині або в WSL).

  1. 🕵️‍♂️ Розвідка:

    • Зайдіть у термінал.
    • Напишіть whoami (хто я?) і pwd (де я?).
    • Перейдіть у кореневу папку cd / і подивіться вміст ls -la. Знайдіть папку, куди вам не можна писати.
  2. 🛡 Гра з правами:

    • Створіть файл secret.txt.
    • Заберіть у себе ж право його читати (chmod -r secret.txt).
    • Спробуйте прочитати (cat secret.txt). Що отримали?
    • Поверніть права назад.
  3. 🔍 Полювання на логи:

    • Уявіть, що щось зламалося.
    • Введіть команду dmesg | tail або подивіться cat /var/log/syslog (якщо є права). Це "чорна скринька" вашого літака. Спробуйте знайти там хоч одне слово error або warn.
  4. 🧟 Зомбі-апокаліпсис:

    • Запустіть команду sleep 1000 & (вона працюватиме у фоні).
    • Знайдіть її процес за допомогою ps aux | grep sleep.
    • "Вбийте" її командою kill [PID].
  5. 🧠 Міні-кейс:

    • Вам дали сервер, на якому закінчилося місце.
    • Знайдіть команду, яка показує вільне місце на диску (підказка: disk free... df).
    • Який ключ (флаг) треба додати, щоб цифри були читабельні для людини (наприклад, "5GB", а не "5242880")?

5. 💡 Мислення як у розробника

Як відрізнити новачка від досвідченого DevOps/Backend інженера?

🚫 Новачок: * Використовує chmod 777 (дозволити все всім), щоб "просто запрацювало". Це як залишити двері квартири відчиненими, бо ліньки діставати ключ. * Редагує код прямо на сервері у продакшені ("я швиденько поправлю"). * Запускає все від root.

✅ Досвідчений інженер: * Принцип найменших привілеїв: Дає програмі лише ті права, які їй необхідні для виживання, і не більше. * Імутабельність: Якщо треба змінити код, ми деплоїмо нову версію, а не правимо стару наживо. * Читає логи: Перше, що він робить при помилці — tail -f /var/log/myapp.log. Логи — це єдиний спосіб дізнатися правду, коли немає монітора.

Порада Девіда: Не бійтеся чорного екрану терміналу. Це не порожнеча, це полотно. І пам'ятайте: sudo — це чарівне слово, але з великою силою приходить велика відповідальність.


6. 🧩 Підсумок

Отже, що ми сьогодні зрозуміли? 1. Linux у проді — це про стабільність, безпеку і відсутність зайвого (GUI). 2. Права доступу — це критично важливо. Не будьте root без потреби. 3. Сервіси (Systemd) — це те, що робить ваш код безсмертним.

Тепер ви знаєте, де живе ваш код, коли він покидає батьківський дім (вашу IDE).

🔜 Що далі? Зараз ми налаштовували сервер вручну. Це цікаво, але довго. А що, як нам треба 100 серверів? Не будемо ж ми на кожному писати команди? На наступному уроці ми поговоримо про Docker і Контейнеризацію — як запакувати вашу "кухню" в коробку і розгорнути її будь-де за секунду!

А поки що... це був CS50 (умовно 😉). До зустрічі!