Пошаговый процесс переноса ваших приложений в бесплатную облачную службу.

28 ноября 2022 года Heroku прекратила предоставление бесплатных планов продуктов и бесплатных услуг передачи данных, удалила неактивные учетные записи и соответствующее хранилище для учетных записей, которые неактивны более года.

Решение было принято, чтобы устранить чрезвычайные усилия, затрачиваемые на борьбу с мошенничеством и злоупотреблениями в их бесплатных услугах. Это хорошее решение с точки зрения заинтересованных сторон, но не совсем для студентов. Долгое время студенты использовали Heroku в качестве первого выбора для развертывания, тестирования и демонстрации своих любимых проектов, заданий и портфолио.

Итак, вопрос в том, где они должны развернуть свои проекты, и это тоже БЕСПЛАТНО?

Как следует из названия, это PythonAnywhere.

PythonAnywhere — еще одна бесплатная альтернатива Heroku, где вы можете развернуть свои приложения Django, web2py, Flask и Bottle. Единственным ограничением является то, что вы можете развернуть только одно приложение на одной учетной записи. Но я знаю, что многие из нас могут решить эту проблему (создать несколько учетных записей).

В этом блоге я покажу вам, как вы можете перенести свое приложение flask с Heroku на PythonAnywhere с небольшими изменениями.

Рабочий процесс развертывания

Мы будем использовать код VS для разработки/модификации кодовой базы приложения, Github для управления версиями и PythonAnywhere в качестве службы хостинга.

В платной учетной записи вы можете напрямую отправлять изменения в PythonAnywhere локально через SSH. Но здесь мы сосредоточены на эффективном использовании бесплатных услуг.

Что мы будем внедрять?

У меня есть готовая кодовая база, демонстрирующая землепользование в 10 крупнейших экономиках мира. Приложение использует данные из открытых источников, предоставленные Всемирным банком.

Теперь мы употребили достаточно жаргона, чтобы продолжить. Давайте погрузимся!

Настройка локального

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



Здесь я использую VScode, вы можете использовать любую другую IDE. Убедитесь, что вы используете URL-адрес на основе учетных данных для клонирования репозитория, в противном случае вы столкнетесь с проблемами разрешения при отправке изменений. Вот один пример: git clone https://username:[email protected]/username/repository.git

Изменения в кодовой базе

  • Самым первым изменением является удаление файла Procfile из каталога.

  • Подготовьте, зафиксируйте и отправьте изменения на Github.

Теперь пришло время клонировать эту обновленную кодовую базу в PythonAnywhere. Надеюсь, вы уже создали учетную запись для начинающих. Если нет, то нажмите здесь. Вот как будет выглядеть ваша панель инструментов.

  • Нажмите Bash, чтобы создать экземпляр сеанса Bash.

  • Клонируйте обновленную кодовую базу.

  • Теперь перейдите в Файлы. Вы найдете все папки проекта в главном каталоге.

  • Работа еще не окончена. Мы должны заменить все относительные пути, присутствующие в кодовой базе, на абсолютные пути. Умный способ найти все пути — это искать папку или имя файла, которые в первую очередь импортируются. Вам просто нужно добавить /home/user_name/repository_name/ к относительному пути.

  • После того, как вы это сделаете, выполните постановку, зафиксируйте и отправьте изменения на GitHub.
  • Затем вам нужно вытащить все изменения в PythonAnywhere, а для этого вам нужно снова посетить bash и выполнить команду git pull. Убедитесь, что вы находитесь в правильном каталоге (например, внутри flask-dashboard-heroku).

Настройка среды

Мы только что обновили кодовую базу в соответствии с развертыванием PythonAnywhere. Теперь займемся настройкой окружения.

  • Сначала необходимо создать виртуальную среду. Используйте команду mkvirtualenv environment_name для создания виртуальной среды. (По умолчанию среда будет активирована. Если этого не произойдет, то используйте команду workon для активации среды).

  • Установите все необходимые библиотеки. Используйте pip install -r requirements.txt

  • Создайте новое веб-приложение. Вы найдете эту опцию в разделе Интернет.

  • После этого вам будет предложено указать путь к фляжному приложению. Продолжайте путь по умолчанию.

  • Перейдите в раздел Файлы и удалите только что созданную папку (по умолчанию это будет «mysite»).

  • Затем перейдите в Интернет и измените путь к исходному коду.

  • Затем откройте файл WSGI.

  • Введите правильный путь к проекту и правильное имя скрипта flask. После этого сохраните изменения, нажав кнопку Сохранить в правом верхнем углу.

  • Наше приложение развернуто. Теперь перейдите в раздел Интернет и перезагрузите развернутое приложение.

После всего этого у нас есть развернутое приложение бесплатно, но только на три месяца. Через три месяца вы должны снова перезагрузить приложение, чтобы использовать следующие три месяца действия.

Вот наше развернутое приложение. http://rsharma369007.pythonanywhere.com/

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



Проблемы с бесплатным планом

  • Ваше приложение может работать в течение 100 секунд при 100% загрузке ЦП. Не волнуйтесь, это всего лишь мягкое ограничение. Когда вы достигаете 100%, ваши процессы все еще работают, но с меньшей мощностью процессора. Через 24 часа используемый ресурс ЦП снова обнуляется.
  • 512 МБ файлового хранилища. Кажется, что это много, но в этом пространстве вы также должны установить свои библиотеки и пакеты. Поэтому вы должны установить только необходимые библиотеки, чтобы избежать нехватки места.
  • Вы можете развернуть только одно приложение для каждой учетной записи.
  • Через каждые три месяца вы должны повторно загружать приложение, чтобы получить следующие три месяца действия, в противном случае ваше приложение будет демобилизовано.

Что дальше?

  • Я рассматриваю возможность развертывания приложения в локальной инфраструктуре на базе Raspberry Pi. Это будет разовая инвестиция для студентов, чтобы протестировать и развернуть несколько проектов по науке о данных и машинному обучению удаленно.
  • В дополнение к этому я разверну небольшое приложение НЛП на PythonAnywhere. Я хотел бы увидеть ограничения, которые он предлагает.

Оставайтесь с нами для следующего блога…