Пошаговый процесс переноса ваших приложений в бесплатную облачную службу.
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. Я хотел бы увидеть ограничения, которые он предлагает.
Оставайтесь с нами для следующего блога…