Практически завершив написание приложения "Twitter-clone" (до настоящего клона ему очень далеко).
Нужно было сделать README.md в котором будет описана процедура развертывания приложения на сервере в интернете. И тут я понял что мой ридми мягко говоря не соответствует действительности. Надо бы все сделать на практике.
1. Регистрация
Регистрация на TimeWeb. Почему именно TimeWeb? Да наверное потому что ценник гуманный - 300 рублей за минимальную виртуальную машину. Есть возможность выбрать Arch Linux (мне она более знакома чем другие Linuxи).
2. Создание облачного сервера
Собираем минимально рабочую конфигурацию, я выбрал Arch Linux:
Снимаю галочку с "Дополнительных услуг" по бэкапу:
Организуем доступ к серверу. Root-password пусть генерируется автоматически, а вот доступ по SSH - надо выбрать либо существующий публичный ключ SSH, либо создать новый: ssh-keygen -t rs и в директории .ssh появится публичный ключ, который можно посмотреть командой: cat .ssh/id_rsa.pub
Данный ключ скопировать и вставить в:
Создаётся и запускается сервер...
3.Подключаемся к серверу по SSH
Для подключения к серверу через SSH в терминале нужно скопировать:
И вставить эту команду в терминале, так как у меня SSH ключ прописан - пароль не потребуется:
Далеее требуются действия по первоначальной настройке системы:
- обновление ОС: 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 где нужно убрать знак комментария:
Вроде бы ничего не забыл. Но если где-то накосячил, можно почитать мою статью:
В ходим в систему под созданным пользователем и донастраиваем систему, чтобы она была более удобна для запуска приложений.
Здесь у меня уже настроен шелл (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
Заходим в директорию с клонированным приложением у меня это:
Копируем директорию со статикой в /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:
Ну собственно, вроде бы и всё, можно попытаться запустить nginx:
sudo systemctl start nginx.service
7. Запуск FastAPI приложения на хостинге
Если всё норм, то можно приступать к подготовке к запуску приложения. Подготовить файлы переменных сред .env и .test.env где будут прописаны URL'ы для доступа к тестовой и рабочей базе данных.
Где после двойного слеша записываются //имя_пользователя:пароль@localhost:5432/имя_базы_данных.
Файлы переменных сред нужно поместить .test.env в корень проекта, а именно в twitter_clone_without_docker, а файл .env в директорию src.
Теперь нужно создать соответствующих пользователей и базы данных в psql:
У меня уже соответствующие базы данных и пользователи созданы:
Пользователь test, как можно видеть, не является суперюзером... Я просто переназначил владельца базы test на пользователя test:
alter database test owner to test;
Ну и создание юзеров и баз данных:
create database test;
create user test with password 'test';
После того как созданы базы и пользователи ДБ, можно создать виртуальную переменную среду для python'a:
Находясь в директории с проектом выполняем команду:
python -m venv .venv
После её создания, надо её активировать:
И теперь можно запустить приложение:
Переходим по ip-адресу в строке браузера и радуемся результату:
Наш проект успешно стартанул, и пока мы не "убъем" этот процесс он будет работать, я его пока оставлю запущенным пусть поработает... Но это самая первая рабочая версия и она очень сырая.
Ну вот пожалуй и всё. Довольно таки много телодвижений для деплоя приложения на сервере. Но, по идее, можно написать что-то типа bash-скрипта который сам всё сделает и запустит приложение. Либо останется несколько небольших ручных вмешательств.
ЗЫ. Тесты так же могут выполняться во время работы приложения:
На этом у меня всё, надеюсь публикация была полезна.