Быстрый старт
Планирование
Для демонстрации особенностей написания и развертывания приложений в Amvera, создадим простое приложение на языке программирования Python с использованием фреймворка Flask. Это будет API для TODO-заметок.
Если вы не знакомы с принципом работы с Git, рекомендуем ознакомится со статьей. Она позволит вам понять, как создавать Git-репозиторий и вносить в него изменения.
Каждая заметка будет определяться следующим образом:
{
"text": "Купить молоко",
"done": true
}
Все заметки будут храниться массивом в файле формата JSON.
Определим API следующим образом.
-
GET /todo
получает список всех TODO. -
GET /todo/<id>
получает TODO с заданным id (индексом в массиве). -
POST /todo
добавляет новую TODO в конец списка. -
PUT /todo/<id>
заменяет TODO с заданным id.
Реализация
Для начала напишем само приложение.
Так как наше приложение использует Flask, создадим файл requirements.txt
:
Flask==2.2.2
Flask-CORS==3.0.10
gunicorn==20.1.0
Напишем код приложения, работающий локально, в файле app.py
:
import json
from flask import Flask, request, abort
from flask_cors import CORS
FILENAME = "todo.json"
def get_data():
try:
with open(FILENAME, "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
return []
def save_data(data):
with open(FILENAME, "w", encoding="utf-8") as f:
json.dump(data, f)
app = Flask(__name__)
cors = CORS(app)
@app.route("/")
def index():
return "TODO App"
@app.route("/todo")
def get_all_todo():
return get_data()
@app.route("/todo/<int:id>")
def get_single_todo(id):
data = get_data()
if id < 0 or id >= len(data):
abort(404)
return data[id]
@app.route("/todo", methods=["POST"])
def add_new_todo():
new_todo = request.json
if new_todo is None:
abort(400)
data = get_data()
data.append(new_todo)
save_data(data)
return "OK", 201
@app.route("/todo/<int:id>", methods=["PUT"])
def update_todo(id):
data = get_data()
if id < 0 or id >= len(data):
abort(404)
updated_todo = request.json
if updated_todo is None:
abort(400)
data[id] = updated_todo
save_data(data)
return "OK"
if __name__ == "__main__":
app.run(port=8080)
Установим зависимости:
pip install -r requirements.txt
Запустим приложение:
python app.py
Убедимся в его работоспособности при помощи Postman.
Подготовка приложения для Amvera
Подготовим приложение для окружения Amvera. Напишем amvera.yml
.
Написать yaml файл можно как самостоятельно, используя инструкцию ниже, так и воспользоваться нашим генератором yaml, перейдя по ссылке.
meta:
environment: python
toolchain:
name: pip
run:
command: gunicorn --bind 0.0.0.0:5000 app:app
containerPort: 5000
Так как для развертывания нашего приложения мы используем gunicorn, добавим его в requirements.txt
:
Flask==2.2.2
Flask-CORS==3.0.10
gunicorn==20.1.0
Осталось решить проблему с сохранением файла с TODO в /data.
Добавим import os
в начало файла app.py
, а также изменим объявление переменной FILENAME
:
FILENAME = "/data/todo.json" if "AMVERA" in os.environ else "todo.json"
Теперь начало файла app.py
выглядит так:
import os
import json
from flask import Flask, request, abort
from flask_cors import CORS
FILENAME = "/data/todo.json" if "AMVERA" in os.environ else "todo.json"
def get_data():
# ... остаток файла
Инициализируем репозиторий git:
git init
Добавим созданные нами файлы в индекс:
git add app.py requirements.txt amvera.yml
Зафиксируем изменения:
git commit -m "TODO App"
Создание проекта в Amvera
Теперь нужно создать проект в Amvera. Откроем страницу https://cloud.amvera.ru/projects и нажмите кнопку "Создать".
Перейдем на страницу проекта: https://cloud.amvera.ru/projects/todo-app. Там нас интересуют команды для привязки проекта к существующему репозиторию:
git remote add amvera https://git.amvera.ru/<имя-пользователя>/todo-app
git push amvera master
После этого начнется сборка и развертывание проекта. Дождитесь появления статуса "Успешно развернуто".
Проверка работоспособности
Снова воспользуемся Postman для отправки запросов.
Для проверки сохранности данных после перезагрузки, перезапустим сервис кнопкой в интерфейсе.
После завершения перезапуска отправим запрос Постманом для проверки наличия TODO заметок. Если они есть, значит мы все сделали правильно.
Поздравляем, вы успешно создали свое первое приложение на Amvera!