01. Ментальна модель Linux¶
Довідник бонус-уроку «Linux для розробника»
Розділ перевірено: кожну команду виконано в контейнерах Ubuntu, Debian і python:3.12-slim. Урок з вправами — Бонус. Linux.
Навіщо це потрібно¶
Перш ніж запускати будь-яку команду, потрібно зрозуміти: що таке Linux і чому він важливий для backend-розробника?
Більшість Django-додатків, API-сервісів, баз даних і веб-серверів у світі працюють на Linux. Якщо ти пишеш Python/Django-код, рано чи пізно тобі доведеться його запустити не лише на своєму ноутбуці, а й на реальному сервері. Цей сервер майже напевно буде Linux.
Просте пояснення¶
Linux-сервер — це як орендована кімната в датацентрі, де твій Django-додаток має жити постійно, навіть коли твій ноутбук вимкнений.
Твій ноутбук — це твоя особиста машина. Ти вмикаєш її, коли потрібно, і вимикаєш, коли закінчив. Але сайт має бути доступний 24/7. Для цього потрібен сервер — комп'ютер, який ніколи не вимикається і завжди підключений до інтернету.
На більшості таких серверів встановлений Linux. Не тому що він ідеальний, а тому що він:
- безкоштовний — можна встановити без ліцензії;
- стабільний — може працювати роками без перезавантаження;
- гнучкий — можна налаштувати під будь-яке завдання;
- ефективний — потребує менше ресурсів, ніж Windows Server;
- відкритий — тисячі розробників по всьому світу вдосконалюють його.
Ключові терміни¶
| Термін | Що означає |
|---|---|
| Операційна система (OS) | Програма, яка керує залізом і дозволяє запускати інші програми |
| Linux | Ядро операційної системи (kernel), написане Лінусом Торвальдсом у 1991 р. |
| Дистрибутив | Linux-ядро + набір інструментів + пакетний менеджер. Наприклад: Ubuntu, Debian, Rocky Linux |
| Ubuntu | Найпопулярніший дистрибутив для серверів і для початківців |
| WSL | Windows Subsystem for Linux — Linux-термінал всередині Windows |
| Сервер | Комп'ютер (або хмарна VM), який постійно підключений до мережі і запускає сервіси |
| Деплой | Процес переносу коду з розробки на сервер |
| Термінал | Текстовий інтерфейс для роботи з операційною системою |
Як влаштований Linux¶
Linux складається з кількох шарів:
+---------------------------------------------------+
| Твої програми (User Space) |
| Django, PostgreSQL, Nginx, Python, pip... |
+---------------------------------------------------+
| Shell (bash, zsh, sh) |
| Інтерфейс між тобою і ядром |
+---------------------------------------------------+
| Linux Kernel (Ядро) |
| Управляє пам'яттю, процесами, файлами, мережею |
+---------------------------------------------------+
| Залізо (Hardware) |
| CPU, RAM, диск, мережева карта |
+---------------------------------------------------+
Kernel — це серце системи. Він безпосередньо спілкується із залізом. Твої програми ніколи не звертаються до заліза напряму — вони просять kernel через системні виклики (syscalls).
Shell — це як перекладач між тобою і kernel. Ти пишеш команди у терміналі → shell їх розуміє → shell просить kernel щось зробити.
User Space — це де живуть усі програми: Django, PostgreSQL, Nginx, твої Python-скрипти.
Чим Linux відрізняється від Windows¶
| Linux | Windows | |
|---|---|---|
| Ціна | Безкоштовний | Платна ліцензія |
| Управління | Переважно через термінал | Переважно через GUI |
| Сервери | ~70% серверів у світі | Менша частка |
| Файлова система | Регістрозалежна (File.txt ≠ file.txt) |
Регістронезалежна |
| Оновлення | Без перезавантаження (здебільшого) | Часто вимагає restart |
| Docker | Native | Потребує WSL або VM |
Що таке дистрибутив¶
Linux — це тільки ядро. Але щоб ним користуватися, потрібні ще інструменти, файловий менеджер, пакетний менеджер, утиліти командного рядка. Набір ядра + інструментів = дистрибутив.
Популярні дистрибутиви:
| Дистрибутив | Для чого використовують |
|---|---|
| Ubuntu | Сервери, розробка, найлегший старт |
| Debian | Стабільні сервери, довгострокова підтримка |
| Rocky Linux / AlmaLinux | Корпоративні сервери (наступники CentOS Linux, підтримку якого завершено у 2024) |
| Arch Linux | Досвідчені користувачі, максимальний контроль |
| Alpine Linux | Docker-образи (дуже маленький розмір) |
Для цього уроку ми будемо використовувати Ubuntu — найпоширеніший вибір для Django-розробників і хмарних серверів.
Що таке WSL¶
Якщо ти на Windows, можна встановити WSL — Windows Subsystem for Linux. Це повноцінне Linux-середовище всередині Windows.
# Встановити WSL (у Windows PowerShell з правами адміністратора)
wsl --install
# Запустити Ubuntu
wsl
WSL дає тобі справжній Ubuntu-термінал без потреби купувати окремий сервер або встановлювати VM. Це найпростіший спосіб почати практикувати Linux на Windows-машині.
Шлях коду від ноутбука до користувача¶
flowchart LR
classDef step fill:#eceff1,stroke:#546e7a,stroke-width:1px,color:#1a1a1a;
classDef decision fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#1a1a1a;
classDef success fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1a1a1a;
classDef error fill:#ffebee,stroke:#c62828,stroke-width:3px,color:#1a1a1a;
classDef warning fill:#fff8e1,stroke:#e65100,stroke-width:2px,color:#1a1a1a;
Dev["Твій ноутбук<br>(Python/Django)"] --> Git["GitHub / GitLab<br>(сховище коду)"]
Git --> Server["Linux server<br>(Ubuntu)"]
Server --> App["Django app<br>(Gunicorn/Uvicorn)"]
App --> Users["Користувачі сайту<br>(браузер)"]
class Dev,Git,Server,App step
class Users success
Ось як виглядає типовий шлях:
- Ти пишеш код на ноутбуці.
- Пушиш у Git-репозиторій (GitHub/GitLab).
- На сервері виконуєш
git pull— завантажуєш нову версію. - Запускаєш Django через Gunicorn або Uvicorn.
- Nginx приймає запити від користувачів і передає їх до Django.
- Користувачі бачать твій сайт.
Архітектура Linux-сервера для Django¶
flowchart TD
classDef step fill:#eceff1,stroke:#546e7a,stroke-width:1px,color:#1a1a1a;
classDef decision fill:#e3f2fd,stroke:#1565c0,stroke-width:2px,color:#1a1a1a;
classDef success fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px,color:#1a1a1a;
classDef error fill:#ffebee,stroke:#c62828,stroke-width:3px,color:#1a1a1a;
classDef warning fill:#fff8e1,stroke:#e65100,stroke-width:2px,color:#1a1a1a;
Internet["Інтернет"] --> Nginx["Nginx<br>(port 80/443)"]
Nginx --> Gunicorn["Gunicorn / Uvicorn<br>(port 8000)"]
Gunicorn --> Django["Django Application"]
Django --> DB["PostgreSQL<br>(port 5432)"]
Django --> Cache["Redis<br>(port 6379)"]
Django --> Static["Static files<br>(/var/www/static)"]
class Internet,Nginx,Gunicorn,DB,Cache,Static step
class Django success
Кожен компонент — окрема програма на сервері. Всі вони запущені паралельно і спілкуються між собою через мережу або файлову систему.
Типові помилки початківців¶
Помилка 1: Думати, що Linux і термінал — це одне і те ж.
Linux — це операційна система. Термінал — це лише один зі способів нею керувати.
Помилка 2: Боятися, що "щось зламаю".
На своєму WSL або тестовому сервері можна сміливо практикувати. Для важливих операцій завжди є бекапи і питання підтвердження.
Помилка 3: Думати, що треба вивчити всі команди напам'ять.
Насправді треба розуміти логіку і знати де шукати (
man,--help, Google). З часом потрібні команди запамʼятаються самі.
Помилка 4: Запускати runserver в production.
python manage.py runserver— лише для локальної розробки. На сервері треба Gunicorn/Uvicorn + Nginx.
Практичне завдання¶
Завдання 1¶
Відкрий WSL або Ubuntu-термінал і введи:
Прочитай вивід і знайди: яке ядро Linux у тебе встановлено?Завдання 2¶
Введи:
Яку Ubuntu ти використовуєш?Завдання 3¶
Намалюй від руки або в нотатках схему: як твій Django-проєкт потрапляє від ноутбука до браузера користувача. Використай терміни: ноутбук, Git, сервер, Nginx, Django, база даних.
Самоперевірка¶
- [ ] Я можу пояснити, що таке Linux і чому він використовується на серверах
- [ ] Я розумію різницю між Linux-ядром і дистрибутивом
- [ ] Я знаю, що таке Ubuntu і WSL
- [ ] Я можу описати шлях коду від ноутбука до користувача
- [ ] Я розумію, чому
runserverне можна використовувати в production
Короткий підсумок¶
Linux — це фундамент більшості сучасних серверів. Як Python/Django-розробник, ти будеш регулярно підключатися до Linux-серверів, запускати сервіси, читати логи і деплоїти свої додатки. Наступний файл — про термінал і shell: як взагалі спілкуватися з Linux.