JavaRush /Курси /JAVA 25 SELF /Розгортання коду на сервері

Розгортання коду на сервері

JAVA 25 SELF
Рівень 10 , Лекція 6
Відкрита

1. Вносимо зміни в код

Як уже згадувалося, розробка програмного забезпечення зводиться до внесення невеликих змін у код. Над цим процесом мільйони програмістів працюють десятиліттями. Тож його ретельно відшліфували, стандартизували та формалізували всіма можливими способами.

Для зберігання коду використовують спеціальну систему — Git. Git — це розподілена система керування версіями. Вона не просто зберігає код, а відстежує всі зміни в ньому й допомагає розробникам працювати над проєктами разом, не заважаючи один одному 🤝.

За допомогою Git розробники можуть створювати різні версії проєкту (гілки), зберігати повну історію змін і навіть повертатися до будь‑якого моменту в минулому. Це як машина часу для коду! Git допомагає об’єднувати зміни та розв’язувати конфлікти, тож він став головним інструментом командної роботи в сучасній розробці. 👩‍💻

2. Збираємо проєкт

Перш ніж тестувати або завантажувати проєкт на сервер, його потрібно зібрати.

🏗️ Збірка проєктів — це процес компіляції вихідного коду проєкту у виконувані програми або інші формати, що запускаються, нерідко із запуском тестів і підготовкою до розгортання. Це ключовий аспект розробки програмного забезпечення, який гарантує готовність програми до використання.

Збірка — це не просто компіляція, хоча компіляція часто входить до процесу збірки. Після завершення збірки у вас можуть бути десятки або навіть сотні файлів, які треба перенести на різні сервери.

Інструменти збірки можуть бути низькорівневими, наприклад:

  • Maven і Gradle — широко використовують у проєктах на Java для керування залежностями та збіркою проєктів.
  • 🐜 Apache Ant — ще один інструмент для збірки проєктів на Java, надає велику гнучкість у написанні сценаріїв збірки.
  • 🖥️ MSBuild — інструмент для збірки проєктів, створених у Microsoft Visual Studio.
  • ⚙️ Make — класичний інструмент збірки, що використовує Makefile для визначення правил збірки, особливо популярний у проєктах на C та C++.
  • 🌐 Webpack — часто застосовується для збірки JavaScript‑застосунків і керує залежностями та модулями.
  • 📜 Gulp і Grunt — інструменти, які допомагають автоматизувати часто виконувані завдання у розробці вебзастосунків, такі як мініфікація файлів і компіляція SCSS у CSS.

Також є й високорівневі інструменти збірки. Про них — нижче.

3. CI/CD

🔄 CI/CD (Continuous Integration/Continuous Delivery) — методологія, що передбачає безперервне злиття змін із усіх гілок розробки в основну гілку, а також автоматичне тестування та розгортання цих змін. Це дає змогу швидко виявляти й виправляти помилки, підвищуючи ефективність і швидкість розробки.

Однією з найпоширеніших, хоч і дещо застарілих, CI/CD‑систем є Jenkins. Якщо ви працюєте в невеликій компанії, то, ймовірно, саме її й використовують.

🤖 Jenkins — популярна автоматизована система, що використовується для безперервної інтеграції та доставки (CI/CD). Jenkins дає змогу автоматизувати різні стадії розробки програмного забезпечення, включно зі збіркою, тестуванням і розгортанням, що покращує якість коду та пришвидшує процес розробки.

Якщо ви потрапите до великої компанії, там може бути на вибір ще кілька систем:

  • 🚦 TeamCity — потужна комерційна система від JetBrains, що пропонує глибоку інтеграцію з різними середовищами розробки та тестування.
  • 📝 GitLab CI — вбудована частина GitLab, яка забезпечує безперервну інтеграцію та доставку з можливістю налаштування через YAML‑файли.
  • ☁️ CircleCI — хмарний сервіс CI/CD, який підтримує автоматизацію тестування та розгортання для багатьох проєктів.
  • 🦑 Travis CI — один із перших хмарних CI‑сервісів, який використовують у багатьох відкритих проєктах; добре інтегрується з GitHub.
  • 🎍 Bamboo — продукт Atlassian, який тісно інтегрується з іншими інструментами цієї компанії, такими як Jira та Bitbucket.

Знати всі ці системи у деталях вам не потрібно — зазвичай у компанії є DevOps‑фахівці, які налаштовують усі процеси. Вам достатньо знати, що вони існують, і розуміти, про що йдеться, якщо в розмові згадується Jenkins, CI/CD або термін «continuous integration».

4. Доставляємо проєкт на сервер

Замало просто написати проєкт — його ще треба розгорнути на сервері. Загалом розгортання (деплой, deploy) проєкту на сервер — це процес розміщення й активації вебзастосунку на сервері таким чином, щоб він був доступний користувачам через інтернет 🚚.

Цей процес охоплює перенесення файлів проєкту на сервер, налаштування серверного середовища, баз даних і залежностей, а також конфігурацію мережевих налаштувань і безпеки 😅.

А ви думаєте, ваш код сам потрапить на сервер? Хтось його просто завантажить? Або ви підʼєднаєтеся через SSH до віддаленого сервера, передасте туди кілька файлів і налаштовуватимете усе вручну? Розслабтеся: так більше ніхто не робить. Тепер є Docker.

🐳 Docker — це платформа для розробки, доставки й запуску застосунків за допомогою контейнерів. Docker спрощує створення, розгортання та виконання застосунків, пакуючи їх разом із усіма залежностями й необхідним середовищем в один компактний об’єкт. Це забезпечує консистентність середовища на всіх етапах: від розробки до тестування та продакшну.

Docker дає змогу запакувати ваш проєкт або кілька проєктів у Docker‑контейнер. Це можна уявити як легший варіант віртуальної машини.

Хоча на технічних форумах вам можуть зазначити, що називати Docker «віртуальною машиною» не цілком коректно, для простоти можна думати про Docker‑контейнер саме як про віртуальну машину — тільки набагато легшу.

По суті, Docker‑контейнер — це «віртуальна машина». Віртуальні машини містять повну копію операційної системи, ядро ОС і віртуальне апаратне забезпечення, тоді як Docker‑контейнери спільно використовують ядро хоста й можуть бути легшими та швидшими .

Розгортання проєкту за допомогою Docker суттєво спрощує процес, забезпечуючи швидкість і надійність. Проєкт пакують у Docker‑контейнери, які легко переміщати та запускати на будь‑якій системі, що підтримує Docker 🚢.

Це усуває проблеми, пов’язані з відмінностями в серверних середовищах, і дає змогу легко масштабувати застосунок, додаючи або видаляючи контейнери залежно від навантаження. Багато команд перейшли на Docker — це зручно й ефективно.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ