Найти в Дзене
Computer Pro

Twitter-clone на FastAPI. Развёртывание фронтенда. Итоговый проект python_advanced. Начало.

Нужно реализовать весь бэкенд клона Twitter: поработаете с дизайном API, напишете бэкенд на одном из изученных в рамках курса фреймворков — FastAPI или Flask. Поработаете с базой данных Postgres, покроете приложение unit-тестами и развернёте приложение через Docker Compose. Итак, нам дается архив с фронтендом: ... и техническое задание на десяти страницах. Первым делом необходимо развернуть архив на отдачу через Nginx. В процессе изучения курса python_advanced была похожая тема (module 23), когда взаимодействовали два сервера uwsgi и nginx. Но там нельзя было использовать какие-либо фреймворки, все было нужно написать самому... Дисклеймер. Это не руководство к действию, не список рецептов, а что-то типа лайв-коддинга. Тут могут быть ошибки! Я просто пытаюсь упорядочить свои действия и размышления. Так что - "ПОНЯТЬ И ПРОСТИТЬ" В данной реализации нам ничего не мешает использовать все прелести fastapi, nginx, uvicorn. Поэтому, первым делом, создам python-файл main.py, Вначале рабо
Оглавление

Дипломный проект по курсу "Python Advanced".

Фоточка для карточки.
Фоточка для карточки.

Нужно реализовать весь бэкенд клона Twitter: поработаете с дизайном API, напишете бэкенд на одном из изученных в рамках курса фреймворков — FastAPI или Flask. Поработаете с базой данных Postgres, покроете приложение unit-тестами и развернёте приложение через Docker Compose.

Итак, нам дается архив с фронтендом:

содержимое архива с фронтендом. Если вы просто запустите index.html - получите пустое, белое окно в браузере.
содержимое архива с фронтендом. Если вы просто запустите index.html - получите пустое, белое окно в браузере.

... и техническое задание на десяти страницах.

Первым делом необходимо развернуть архив на отдачу через Nginx. В процессе изучения курса python_advanced была похожая тема (module 23), когда взаимодействовали два сервера uwsgi и nginx. Но там нельзя было использовать какие-либо фреймворки, все было нужно написать самому...

Дисклеймер. Это не руководство к действию, не список рецептов, а что-то типа лайв-коддинга. Тут могут быть ошибки! Я просто пытаюсь упорядочить свои действия и размышления.
Так что - "ПОНЯТЬ И ПРОСТИТЬ"

Итак, поехали!

В данной реализации нам ничего не мешает использовать все прелести fastapi, nginx, uvicorn. Поэтому, первым делом, создам python-файл main.py,

Вначале работы будет только один эндпойнт: /api/users/me который будет отдавать данные по пользователю (скриншот из технического задания данного проекта):

-3

Который я отредактировал уже под себя в файле main.py:

-4

И если этот файл запустить, то можно получить в браузере ответ, по соответствующему эндпойнту:

-5

Но нам нужно чтобы заработала "статика" проекта (которую, по условиям задачи, менять нельзя), для этого нужно запустить веб-сервер Nginx. Создаю новый файл nginx.conf, который будет лежать в корне проекта и отвечать за конфигурацию нашего вебсервера, который и будет отдавать статику фронтенда:

так как все роуты данного приложения будут начинаться с /api, потэтому и location так же начинается с /api
так как все роуты данного приложения будут начинаться с /api, потэтому и location так же начинается с /api

Ну а теперь "нарисуем" то, что будет отвечать за "сборку" и настройку докер-контейнеров. Для FastAPI приложения этим заниматься будет Dockerfile:

-7

Делается это именно в такой последовательности - сначала устанавливаются зависимости, а только затем все файлы проекта копируются в контейнер.

Ну а затем настраиваем взаимодействие контейнера приложения с контейнером nginx, посредством файла docker-compose.yaml:

-8

И если все правильно собрали, всё должно запуститься по адресу http://0.0.0.0

-9

На момент запуска фронтенда, мой проект выглядит примерно так:

Все эти зависимости установила одна команда pip install "fastapi[standard]"
Все эти зависимости установила одна команда pip install "fastapi[standard]"

Если просто попытаться запустить файл "index.html" из скачанного фронтенда то нашему взору предстанет "пустой экран".

Пока я пытался заставить "фронтенд" работать, я опробовал разные варианты "приложения (main.py)", настроек nginx.conf, Dockerfile, docker-compose.yml. В итоге всё сократил до минимально нужных строчек кода. Хотя, возможно, и это можно еще немного уменьшить. Как говорится - ничего лишнего!

Ну а на этом у меня всё, далее нужно будет внедрить базу данных postgres и обработку соответствующих эндпойнтов.

Продолжение следует...