Добавить в корзинуПозвонить
Найти в Дзене
Computer Pro

Деплой приложения FastAPI на TimeWeb без использования docker

Практически завершив написание приложения "Twitter-clone" (до настоящего клона ему очень далеко). Нужно было сделать README.md в котором будет описана процедура развертывания приложения на сервере в интернете. И тут я понял что мой ридми мягко говоря не соответствует действительности. Надо бы все сделать на практике. Регистрация на TimeWeb. Почему именно TimeWeb? Да наверное потому что ценник гуманный - 300 рублей за минимальную виртуальную машину. Есть возможность выбрать Arch Linux (мне она более знакома чем другие Linuxи). Собираем минимально рабочую конфигурацию, я выбрал Arch Linux: Снимаю галочку с "Дополнительных услуг" по бэкапу: Организуем доступ к серверу. Root-password пусть генерируется автоматически, а вот доступ по SSH - надо выбрать либо существующий публичный ключ SSH, либо создать новый: ssh-keygen -t rs и в директории .ssh появится публичный ключ, который можно посмотреть командой: cat .ssh/id_rsa.pub Данный ключ скопировать и вставить в: Создаётся и запускается се
Оглавление
Фоточка для карточки. п.Куликово, Архангельская область, июль 2024. Фото автора
Фоточка для карточки. п.Куликово, Архангельская область, июль 2024. Фото автора

Практически завершив написание приложения "Twitter-clone" (до настоящего клона ему очень далеко).

Нужно было сделать README.md в котором будет описана процедура развертывания приложения на сервере в интернете. И тут я понял что мой ридми мягко говоря не соответствует действительности. Надо бы все сделать на практике.

1. Регистрация

Регистрация на TimeWeb. Почему именно TimeWeb? Да наверное потому что ценник гуманный - 300 рублей за минимальную виртуальную машину. Есть возможность выбрать Arch Linux (мне она более знакома чем другие Linuxи).

Сложного ничего нет. Описывать не буду.
Сложного ничего нет. Описывать не буду.

2. Создание облачного сервера

Собираем минимально рабочую конфигурацию, я выбрал Arch Linux:

Тут я "заблюрил" уже созданную виртуальную машину, дабы не отвлекала взгляд...
Тут я "заблюрил" уже созданную виртуальную машину, дабы не отвлекала взгляд...
-4
-5
смотрим чтобы был публичный IP, иначе наш сервер не будет в интернете... И доступ к нему будет только через браузер
смотрим чтобы был публичный IP, иначе наш сервер не будет в интернете... И доступ к нему будет только через браузер

Снимаю галочку с "Дополнительных услуг" по бэкапу:

-7
-8

Организуем доступ к серверу. Root-password пусть генерируется автоматически, а вот доступ по SSH - надо выбрать либо существующий публичный ключ SSH, либо создать новый: ssh-keygen -t rs и в директории .ssh появится публичный ключ, который можно посмотреть командой: cat .ssh/id_rsa.pub

-9

Данный ключ скопировать и вставить в:

-10
-11
-12

Создаётся и запускается сервер...

3.Подключаемся к серверу по SSH

Для подключения к серверу через SSH в терминале нужно скопировать:

-13

И вставить эту команду в терминале, так как у меня SSH ключ прописан - пароль не потребуется:

-14

Далеее требуются действия по первоначальной настройке системы:

  • обновление ОС: pacman -Syu (sudo не нужно, мы же root). У меня обновление OS не завершилось удачей, пришлось сначала сделать обновление ключей: pacman-key --refresh-keys после чего повторил обновление OS и все завершилось удачей.
  • Установить какой нибудь редактор текстов. Я установил neovim и сразу командную оболочку zsh: pacman -S neovim zsh
  • создать пользователя: useradd <username>
  • назначить созданному пользователю пароль: passwd <username>
  • Установить программу sudo (по-умолчанию её в Arch Linux нет): pacman -S sudo
  • Наделить пользователя правами выполнять запуск программ от sudo: usermod -aG wheel <username>
  • Отредактировать nvim /etc/sudoers где нужно убрать знак комментария:
-15

Вроде бы ничего не забыл. Но если где-то накосячил, можно почитать мою статью:

В ходим в систему под созданным пользователем и донастраиваем систему, чтобы она была более удобна для запуска приложений.

-16

Здесь у меня уже настроен шелл (zsh), а кому это нужно, можно почтитать тут:

Заодно я настроил текстовый редактор nvim чтобы он мог правильно подсвечивать код на python'e

4. Устанавливаем, настраиваем и запускаем Postgres

sudo pacman -S postgresql
sudo -iu postgres
initdb -D /var/lib/postgres/data
exit
sudo systemctl start postgresql.service



5.Клонируем код приложения с гитхаба (или где он у вас)

Так как на голом Arch Linux почти ничего нет то нужно доустановить git и curl (а если вы уже по пунктам выше настраивали zsh и nvim), то не нужно...

git clone https://github.com/sejeenn-vk/twitter_clone_without_docker.git

6.Устанавливаем, настраиваем и запускаем Nginx

sudo pacman -S nginx

Заходим в директорию с клонированным приложением у меня это:

-17

Копируем директорию со статикой в /usr/share/nginx:

sudo cp -r static /usr/share/nginx

Создаём в скопированной директории каталог для изображений images:

sudo mkdir /usr/share/nginx/static/images

Разрешаем любые операции для всех с этим каталогом:

sudo chmod 777 /usr/share/nginx/static/images

Настраиваем nginx.conf:

-18

Ну собственно, вроде бы и всё, можно попытаться запустить nginx:

sudo systemctl start nginx.service

7. Запуск FastAPI приложения на хостинге

Если всё норм, то можно приступать к подготовке к запуску приложения. Подготовить файлы переменных сред .env и .test.env где будут прописаны URL'ы для доступа к тестовой и рабочей базе данных.

-19

Где после двойного слеша записываются //имя_пользователя:пароль@localhost:5432/имя_базы_данных.

Файлы переменных сред нужно поместить .test.env в корень проекта, а именно в twitter_clone_without_docker, а файл .env в директорию src.

Теперь нужно создать соответствующих пользователей и базы данных в psql:

-20

У меня уже соответствующие базы данных и пользователи созданы:

-21

Пользователь test, как можно видеть, не является суперюзером... Я просто переназначил владельца базы test на пользователя test:

alter database test owner to test;

Ну и создание юзеров и баз данных:

create database test;
create user test with password 'test';

После того как созданы базы и пользователи ДБ, можно создать виртуальную переменную среду для python'a:

Находясь в директории с проектом выполняем команду:

python -m venv .venv

После её создания, надо её активировать:

-22

И теперь можно запустить приложение:

-23

Переходим по ip-адресу в строке браузера и радуемся результату:

-24

Наш проект успешно стартанул, и пока мы не "убъем" этот процесс он будет работать, я его пока оставлю запущенным пусть поработает... Но это самая первая рабочая версия и она очень сырая.

Ну вот пожалуй и всё. Довольно таки много телодвижений для деплоя приложения на сервере. Но, по идее, можно написать что-то типа bash-скрипта который сам всё сделает и запустит приложение. Либо останется несколько небольших ручных вмешательств.

ЗЫ. Тесты так же могут выполняться во время работы приложения:

-25

На этом у меня всё, надеюсь публикация была полезна.

Не забываем ставить лайкос!
Не забываем ставить лайкос!