Найти тему
Computer Pro

Развёртывание (deploy) django-приложения. Создал виртуальную машину на timeweb.cloud, что дальше?! Инструкция для новичков.

Оглавление

Созданное приложение на фреймворк Django - перенести на сервер. На выбор два облака - яндекс и таймвеб. Я зачем-то создал на обоих серверах виртуальные машины. Попихавшись вчера в созданной ВМ на яндексе - мне показалось что он лучше, но там нету арч.линукс как у меня. Но в яндексе удобней, там уже все необходимые приложения есть "из коробки" ничего не нужно доустанавливать. Или мне так показалось. По крайней мере я очень быстро развернул приложение на сервере. Но синтаксис убунту мне мало знаком. Поэтому перешел на ТВ.

Я не зафиксировал то, как я создавал "виртуальную машину" (возможно это было бы полезно для таких же новичков, как и я). Ну да ладно. Едем дальше.

Итак - вот она, моя ВМ, на основе Arch Linux :

Запустил машину, машина назначила ip-адрес
Запустил машину, машина назначила ip-адрес

Нужно войти, для этого я создавал ssh ключи (один, который ".pub", я указывал при создании ВМ) второй остается на моём компьютере, и будет использоваться при подключении к ВМ через SSH.

Создать ключи можно командой:

ssh-keygen -t rsa -b 2048 -C <"любое имя"> -f <как мы назовем файл>

выглядит это так:

ssh-keygen -t rsa -b 2048 -C "Timeweb Machine" -f timeweb

В домашней папке у нас появятся два файла, один из них посредством команды cat timeweb.pub выведем на экран терминала

это публичный ключ его нужно сохранить на виртуальной машине
это публичный ключ его нужно сохранить на виртуальной машине

Его надо было скопировать и вставить в настройки виртуальной машины при её создании.

Ну раз ВМ создана, подключимся, нужно находиться в той директории где лежат ssh-ключи (верней один ключ, timeweb):

ssh -i timeweb root@217.18.63.218

-3

При первом подключении будет дурацкий вопрос, что-то из разряда "а вы точно хотите подключиться к этой сети?!". Отвечаем "yes" и после чего нас система спрашивает о root пароле. Его можно скопировать тут (нажимаю "скопировать":

-4

А в терминале - сочетание клавиш Shift + Insert вставляет этот пароль. Ни звездочек, ничего, что бы сигнализировало о том что я вставил пароль, как будто ничего не произошло, поэтому у меня первая попытка была не успешной (х.з. чего там в буфере обмена содержалось). Пришлось снова нажать "скопировать" на сайте timeweb.cloud (возможно я хотел нажать, но не нажал в первый раз).

Вот мы вошли в систему, под root'ом. Система абсолютно пустая (как оказалось позже - даже редактора vi нет). Нужно установить всё необходимое программное обеспечение для развертывания созданного мною django приложения (сайта).

Первые шаги в свежесозданной системе

Начинаю с создания пользователя, с уровнем доступа sudo (надеюсь не надо объяснять это). Создаю:

-5

Пользователь создан, необходимо отредактировать файл /etc/sudoers, куда необходимо внести этого пользователя. Но в процессе понял, редактора vi в системе нет и надо было, для начала, обновить систему командой:

pacman -Syu

пошло обновление...
пошло обновление...

После завершения обновления установил vim (типа улучшенная версия vi, есть еще neovim, но об этом в другой раз).

-7

Теперь можно редактировать /etc/sudoers, открываем файл и переходим в самый низ до строчки # %wheel ALL=(ALL:ALL) ALL

-8

Теперь созданному пользователю eugene необходимо задать пароль, делаем:

-9

После чего меняем пользователя на созданного eugene и пробуем установить какую-нибудь программу, например mc (midnight commander)

-10
-11

Ну вот, пользователь создан, он может при помощи sudo устанавливать программы, идем дальше.

Нужен git, устанавливаем: sudo pacman -S git

Затем создаем директорию под проекты, например projects: mkdir projects

Переходим в нее: cd projects

Клонируем репозиторий приложения django, ссылку на него я взял из своего репозитория:

git clone git@gitlab.skillbox.ru:evgenii_vorontsov_1/20-prod.git

-12

Клонирование завершилось неудачей

-13

Я еще не создавал ssh-key для этой виртуальной машины и GitLab просто с ней не знаком, для этого создаём ключ:

ssh-keygen -t rsa

-14
-15

Ну вот, теперь гитлаб знаком с виртуальной машиной, можно повторить git clone

-16

Проект теперь на виртуальной машине

-17

Пока я что-то делал и комп пустовал, меня выкинуло из системы, теперь я уже захожу под созданным ранее пользователем и паролем:

-18

Теперь по идее нужно установить docker compose дабы собрать приложение django на виртуальной машине. Делаю поиск в pacman, дабы узнать что же нам предлагается по имени "docker"

sudo pacman -Ss docker

-19

В Pycharm у меня всё работало, следовательно нужно проверить версии docker и docker compose, их и выберу для установки

хотя в пайчарм используется более новая версия docker-compose, она взята из установленного docker-desktop, ладно, поставим что есть и посмотрим что будет
хотя в пайчарм используется более новая версия docker-compose, она взята из установленного docker-desktop, ладно, поставим что есть и посмотрим что будет

Установка прошла успешно:

-21
-22

Вот и первая ошибка при попытке создать докер-билд, я забыл сделать файл .env из которого будут браться переменные с ключами.

-23

исправляем это недоразумение, у меня в репозитории есть шаблон: .env_template, из него я создам файл .env, с помощью команды копирования "ср":

cp .env_template .env

и отредактирую его в VIM

ip адрес указан тот что в настройках виртуальной машины, DJANGO_SECRET_KEY - чото от балды
ip адрес указан тот что в настройках виртуальной машины, DJANGO_SECRET_KEY - чото от балды

Пробую снова собрать билд и опять проблемы, немного погуглив решаю. Снова ошибки. Форумы говорят надо сделать перезагрузку, делаю. И вот сервис докер запустился!!!

-25

Запускаю сборку. Пока "полёт" нормальный.

-26

Сборка завершена

-27

Пробую запустить. Запустилось...

-28

Неужели и в браузере откроется?! Офигеть, открылось!

-29

Но работает не совсем корректно, стили CSS не подгружаются и выглядит совершенно не так как при запуске на локальной машине командой python manage runserver. Тут уже какая то недоработка в docker, ибо и на локальной машине запускалось docker compose up app точно так же.

Задача была выложить проект на сервер и запустить и чтобы он был доступен. Это я сделал.

Но осталось огромное "НО", после запуска приложения на удаленном сервере. Я попытался войти под админом и у меня всё упало. Ладно, время обед, надо прогуляться.

Я всё забываю что я не на локальном компе, а где-то там... и что тут еще ничего нет. Нужно после гит клона установить все зависимости, сделать миграции, создать суперпользователя баз данных.

Вот что прогулка животворящая делает!
Вот что прогулка животворящая делает!

Пришел с прогулки и тут же принялся за работу. Тут я приведу лишь скриншот того чего я делал... Были ошибки, почему-то папка (и сама база данных) баз данных создалась с неполными правами, то есть только superuser мог читать и править это дело.

-31

Всё снова пересобрал, запустил и всё работает. Почти правильно. Но не работают стили CSS, не знаю почему в docker они теряются, а в python manage.py runserver все работает. Но тема занятия была не об этом...

Так оно в докер, на удаленном сервере
Так оно в докер, на удаленном сервере

Для сравнения, запуск без докера, на локальном компьютере.

-33

И от же локальный компьютер но уже в собранном докером пакете

-34

Ну вот в общем такие дела, кому интересно - ссылка на сайт с приложением. Не известно как долго она будет активна. Но сервер пока не выключаю...

Народ, просьба - подписка, лайк.

Да пребудет с вами СИЛА!