An open API service indexing awesome lists of open source software.

https://github.com/viktorsvertoka/goit-cs-hw-02

Home task for Computer Systems and Their Fundamentals course💾
https://github.com/viktorsvertoka/goit-cs-hw-02

bash curl docker goit goit-cs-hw-02 postgresql

Last synced: 9 days ago
JSON representation

Home task for Computer Systems and Their Fundamentals course💾

Awesome Lists containing this project

README

        

# Домашнє завдання до модуля “Основи операційних систем”

Готові до тренування? 🤩

Сьогоднішнє домашнє завдання складається з двох незалежних завдань і спрямоване на використання командного рядка Bash для автоматизації процесів та поглиблення розуміння Docker і контейнеризації.

У цьому домашньому завданні ви попрактикуєтесь:

- взаємодіяти з операційною системою через командний рядок, а саме навчитесь створювати bash-скрипти та використовувати команду `curl` — потужний інструмент командного рядка для взаємодії з вебсерверами, зокрема для виконання HTTP-запитів;
- налаштовувати та використовувати Docker Compose для керування середовищем, що містить не тільки застосунок, але й базу даних PostgreSQL.

Ви отримаєте практичні навички, які можна використовувати в реальних сценаріях роботи з операційними системами та мережами, практичний досвід роботи контейнеризації FastAPI застосунку разом з його базою даних PostgreSQL.

Нумо починати?! 💪🏼

### Підготовка та завантаження домашнього завдання

1. Створіть публічний репозиторій goit-cs-hw-02.

2. Виконайте завдання та відправте його у свій репозиторій.

3. Завантажте робочі файли на свій комп’ютер та прикріпіть їх в LMS у форматі zip. Назва архіву повинна бути у форматі ДЗ2_ПІБ.

4. Прикріпіть посилання на репозиторій goit-cs-hw-02 та відправте на перевірку.

#### Формат оцінювання

- Залік/незалік

#### Формат здачі

- Прикріплені файли репозиторію у форматі `zip` з назвою `ДЗ2_ПІБ`.
- Посилання на репозиторій.

> [!IMPORTANT]
>
> 💡 ВАЖЛИВО Перегляньте Інструкцію щодо завантаження робочого файлу з репозиторію на `Github`

## Технічний опис завдань

### Завдання 1

Напишіть скрипт, який автоматично перевіряє, чи доступні певні вебсайти. Скрипт повинен використовувати команду curl для надсилання HTTP GET запитів до кожного сайту у списку та перевірки відповіді.

#### Покрокова інструкція

1. Список вебсайтів. У вашому скрипті має бути визначений масив з URL вебсайтів, які потрібно перевірити. Наприклад, `https://google.com,` `https://facebook.com`, `https://twitter.com`.

2. Перевірка доступності. Скрипт має перевіряти кожен сайт зі списку за допомогою `curl`, переконуючись, що сайт відповідає з HTTP статус-кодом 200, що вказує на успішну доступність сайту.

3. Запис результатів у файл. Для кожного сайту результат перевірки (доступний чи недоступний) має бути записаний у файл логів. Назва файлу логів має бути визначена у скрипті.

4. Форматування виходу. Результати мають бути чітко сформульовані, наприклад: `"[](https://google.com/) is UP"` або `"[](https://twitter.com/) is DOWN"`.

5. Вивід інформації. Після виконання скрипту має бути виведено повідомлення, що результати записано у файл логів із його назвою.

#### Приклад виконання скрипту

Скрипт виконує команди та виводить результати у файл `website_status.log`. Записи у файлі логів будуть відображати статус кожного сайту (UP або DOWN) на момент запуску скрипту.

```bash
is UP
is UP
is UP
```

#### Критерії прийняття

- Скрипт написано на Bash.
- Скрипт повинен опрацьовувати переадресацію.
- Використано цикл для обходу всіх сайтів у списку.
- Використано команду `curl` для перевірки HTTP-відповідей.
- Результати перевірки записані у файл логів, виведено про це повідомлення.
- Форматування коду чітке та акуратне.

> [!TIP]
>
> Критерії прийняття домашнього завдання є обов’язковою умовою розгляду домашнього завдання ментором. Якщо якийсь з критеріїв не виконано, ДЗ відправляється ментором на доопрацювання без оцінювання.
> Якщо вам “тільки уточнити”😉 або ви “застопорилися” на якомусь з етапів виконання— звертайтеся до ментора у Slack

### Завдання 2

Клонуйте FastAPI застосунок, налаштуйте і запустіть його в Docker контейнері. Перевірте правильність роботи застосунку та підключення до бази даних.

#### Покрокова інструкція

1. Використовуючи команду `git clone`, клонуйте репозиторій за адресою `https://github.com/GoIT-Python-Web/Computer-Systems-hw02`. Перейдіть у клонований каталог.

2. Створіть `Dockerfile` із вказівками для створення образу Docker застосунку.

3. Напишіть `docker-compose.yaml` з конфігурацією для застосунку та PostgreSQL.

4. Використайте Docker Compose для побудови середовища, команду `docker-compose up` для запуску середовища.

> [!NOTE]
>
> 💡 Підказка:
> Внесіть зміни в рядку підключення до бази даних SQLALCHEMY_DATABASE_URL: вона знаходиться у файлі \\conf\\db.py. Замість localhost вставте ім'я сервісу PostgreSQL з вашого файлу docker-compose.yaml .

```bash
SQLALCHEMY_DATABASE_URL = f"postgresql+psycopg2://postgres:567234@localhost:5432/hw02"
```

Коли ви використовуєте Docker Compose, кожен сервіс (контейнер) має власну мережу, і вони зазвичай не можуть звертатися один до одного за допомогою `localhost`. Замість цього, ви маєте використовувати назву сервісу в якості імені хоста.

5. Перевірте функціональність застосунку та доступність бази даних.

> [!NOTE]
>
> 💡 Підказка:
>
> Після запуску контейнера із застосунком вигляд у браузері повинен бути наступним:

![Results](./assets/print-screen-1.png)

Якщо все правильно налаштовано у файлі `docker-compose.yaml`, натиснувши кнопку Перевірити БД, ви повинні побачити наступне:

![Results](./assets/print-screen-2.png)

Якщо замість `"Welcome to FastAPI!”` ви бачите червоне віконце з повідомленням про помилку, значить ви неправильно налаштували `docker-compose.yaml`

#### Критерії прийняття

- Клоновано репозиторій, створено `Dockerfile` для створення образу `Docker`застосунку.

- Написано `docker-compose.yaml` з конфігурацією для застосунку та `PostgreSQL`.

- Використано `Docker Compose`, команду `docker-compose up` для побудови та запуску середовища.

- Застосунок є функціональним, а база даних — доступною, що підтверджується натисканням кнопки `Перевірити БД`.

### Результат виконаного завдання № 1

![Results](./task_01/print_screen.png)

### Результат виконаного завдання № 2

![Results](./task_02/print_screen.png)