Як запустити Django-сервер на віддаленій машині у режимі debug
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
Вітаю!
Уявіть, що Ви зайшли на новий проєкт, але вся робота ведеться віддалено, тобто десь існує віртуальна машина, і ви отримали логін та пароль вашого користувача або SSH-ключ. Постає питання: а яким саме чином вести розбробку, та більше того, як запустити сервер у режимі відловлювання помилок.
Хотів би розповісти про те, як за допомогою Visual Studio Code можна встановити SSH-підключення до віддаленої (remote) машини та займатися і тим, і іншим.
Цей кейс може бути актуальний для backend-веброзробників.Приклади наводяться з використанням Python та Django, але підхід можна також використовувати з іншими мовами програмування та фреймворками, які мають схожий функціонал.
Для того, аби перевірити цю статтю в дії, вам не знадобиться глибоких знань Python чи Django, стаття покриває лише базові моменти.
Для прикладу я буду користуватися наступними інструментами:
- VirtualBox 6.1.34_Ubuntur150636;
- Ubuntu 22.04;
- Visual Studio Code 1.70.
Додаткові налаштування віртуальної машини
Не буду детально розписувати як правильно налаштовувати віртуальну машину, але хочу звернути увагу не деякі особливості. Після того як базові налаштування встановлено, перейдемо до File/Host Network Manager/ та додаємо новий адаптер (у нашому випадку він називається vboxnet0), в налаштуваннях нічого додатково вказувати не треба, йдемо в налаштування нашої віртуальної машини, а точніше — розділ Network.
Для того, аби наша віртуальна машина мала власну IP-адресу та могла встановити з’єднання з хостом, тобто нашою машиною, а також іншими віртуальними машинами, переходимо до розділу Adapter 2 та заповнюємо наступні поля:
- Attached to: обираємо варіант Host-only Adapter
- Name: обираємо тільки що створений vboxnet0
Натискаємо OK для того, аби зберегти налаштування.
Додаткові налаштування Ubuntu 20.04
Для того, аби не було проблем з операційною системою, нам треба додатково встановити пакет openssh-server, необхідний для віддаленого керування та передачі даних між мережевими комп’ютерами.
Команда для цього наступна:
sudo apt install openssh-server
IP-адресу віддаленої машини дізнаємося за допомогою команди:
ip a
Червоним кольором виділено наш IP:
192.168.56.101
Перевірка налаштувань VS Code
Для роботи з SSH-з’єднанням нам обов’язково знадобиться наступне розширення Remote — SSH від Microsoft.
Переходимо до Remote Explorer та обираємо SSH Targets.
Натискаємо «+» для того, аби додати нове з’єднання. Паттерн для з’єднання наступний:
ssh <ім’я_користувача>@<ip>
Для підключення до віддаленої машини також можна використовувати заздалегідь згенеровані SHH-ключі, але про це якось іншим разом.
Посилання, де можна прочитати про це, — тут.
Також VS Code запропонує вам перелік файлів конфігурації для оновлення, можна обрати будь-який.
Вітаю, хост успішно додано!
Встановимо з’єднання з нашою віддаленою машиною, для цього тиснемо ЛКМ та обираємо один з доступних варіантів:
Вводимо пароль (той самий пароль користувача від віддаленої машини) і тиснемо Enter:
Вітаю! Ми отримали доступ та відкрили VSCode на віддаленій машині! Про це свідчить значення у полі в лівому нижньому куті екрану:
У терміналі, що відкрився, створюємо директорію додатку та перейдемо в неї:
Після того як ви натиснете ОК, редактор перезавантажиться та відкриється на рівні проєкту.
Додаткові налаштування VS Code
Для того щоб користуватися Python y VS Code, необхідно спочатку встановити розширення. Відкривши меню додатків, пишемо Python та знаходимо необхідний. Встановимо його на віддалену машину.
Далі створюємо файл конфігурації, відкриваємо бокове RUN & DEBUG меню, тиснемо create a launch.json file.
У меню, яке з’явиться, обираємо спочатку Python, а потім Django.
Нас попросять вказати шлях до файлу manage.py, залишаємо значення за замовчуванням, але шлях треба відкоригувати згодом. Файл конфігурації має такий вигляд:
Створення проєкту на Django
У цій частині описувати поетапно кожен крок не бачу сенсу, оскільки все вже розписано розробниками фреймворку, скажу лише, що так само можна обрати будь-який інший фреймворк на ваш розсуд.
Джанго quick start — тут. Для наших потреб не потрібно заходити далі етапу зі створенням у views.py першої в’юхи.
Користуючись інструкцією з квік старту, зупиняємося на кроці додавання url з додатку polls до mysite/urls.py
Дійшовши до цього моменту, дерево проєкту має виглядати приблизно так:
Відкриємо config.json файл та відредагуємо місцезнаходження файлу manage.py
За допомогою кнопки RUN запускаємо проєкт.
Для того, аби пересвідчитися, що проєкт запущено, можна подивись у термінал або відкрити 127.0.0.1:8000 на віддаленій машині.
Поглянемо у консоль, сервер запустився:
Відкриємо браузер на віддаленій машині (також можна скористатися Postman або curl).
Підключившись до віддаленої машини за допомогою SHH-з’єднання, ми змогли запустити там Django-сервер. Залишилося лише переконатися в тому, що ми можемо ставити точки зупинки та власне дебажити код. Для цього відкрийте файл mysite/polls/views.py та поставимо точку зупинки на рядку номер 5. Ми хочемо побачити, що містить об’єкт request перед тим, як повернути об’єкт HttpResponse
Переходимо в браузер віддаленої машини та оновлюємо сторінку, у нас спрацьовує breakpoint у VS Code, Achievement Unlocked! Вітаю!
Ми перехопили запит до того, як він відпрацював, та маємо змогу подивитись, що конкретно відбувається під час запиту. В цьому і полягає процес відлагодження (debug) коду та його поведінки. Ми, так би мовити, кажемо інтерпретатору: зупинись, будь ласка, на цьому рядку, я хочу пересвідчитись, що все правильно, чи слідкувати як виконується код.
Таких точок зупинку може бути безліч у різних файлах та модулях. Для того, аби перейти до наступної, треба натиснути F5. Щоб більше детально роздивитися ті чі інше об’єкти чи значення, можна скористатися debug console яка, за замовчуванням, розташована справа від терміналу. Нам також доступний так званий ланцюжок викликів або CALL STACK, який дає змогу подивитися, які саме виклики привели нас в це конкретне місце.
На цьому все! Сподіваюсь, ви знайшли для себе щось корисне, навіть якщо це пов’язано не з віддаленою розробкою, VS Code, Python чи Django.
Якщо ви цікавитеся Python та його фрейворками, доєднуйтесь до нашого товариства, будемо раді бачити усіх!
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів