Для цього проєкту я вибрав використання Podman замість Docker. Якщо ви не знайомі з Podman, не хвилюйтеся, Podman все одно використовує Dockerfiles та подібні команди. Я працюю на основі базової установки Flask. Ви можете слідувати цим інструкціям, щоб наздогнати:
[
Базова установка Flask з Podman
Мені потрібно було налаштувати Python Flask додаток для бекенд-сервісу.
medium.com
](/@brianmayrose/basic-flask-setup-with-podman-6024ba6769e5?source=post_page-----087966930eee--------------------------------)
Першим кроком є додавання директорії, в якій зберігатимуться всі наші файли бази даних, до кореневої папки.
mkdir mongodb
cd mongodb
Тепер створимо том Podman для постійного зберігання:
podman volume create mongodb_data
У директорії mongodb створіть Dockerfile для MongoDB:
FROM [docker.io/](/docker.io/mongo:6.0)mongo:6.0
# стандартний порт MongoDB
EXPOSE 27017
# Налаштуємо том для постійного зберігання даних
VOLUME ["/data/db"]
CMD ["mongod"]
Створимо мережу Podman, щоб контейнери могли комунікувати:
podman network create interactive-network
Тепер можемо зібрати контейнер MongoDB і запустити його:
podman build -t mongodb:latest -f mongodb/Dockerfile .
podman run --name mongodb \
--network interactive-network \
-p
-d docker.io/mongo:6.0
Це збудує і запустить MongoDB локально, відкриваючи порт 27027.
Давайте встановимо драйвер MongoDB для Flask. Для цього додамо pymongo до файлу requirements.txt у кореневій директорії:
flask
pymongo
Тепер перезіб'ємо контейнер Flask і перевіримо наявність помилок:
podman build -t flask-backend:latest -f backend/Dockerfile .
Тепер ми можемо підключити MongoDB до Flask. Додамо з'єднання MongoDB до файлу backend/app.py:
from pymongo import MongoClient
# підключення до MongoDB
client = MongoClient("mongodb://mongodb:27017/")
db = client["interactive_portfolio"]
Podman автоматично вирішить hostname mongodb
до контейнера MongoDB в межах однієї мережі.
Оскільки ми вже знаходимося у файлі app.py, ми можемо додати два ендпоінти для тестування з'єднання з MongoDB.
Перший ендпоінт буде POST, що додає елемент до бази даних:
@app.route('/add-post', methods=['POST'])
def add_skill():
# Приклад елемента для вставки
item = {"name": "Joe", "level": "Expert"}
db.skills.insert_one(item)
return jsonify({"mesage": "Item added!"})
Другий ендпоінт буде GET, що запитуватиме доданий елемент:
@app.route('/items', methods=['GET'])
def get_items():
items = list(db.items.find({}, {"_id": 0}))
return jsonify(items)
Ось приклад повного файлу app.py:
from flask import Flask, jsonify
from pymongo import MongoClient
app = Flask(__name__)
# підключення до MongoDB
client = MongoClient("mongodb://mongodb:27017/")
db = client["Flask_API"]
@app.route('/')
def home():
return jsonify({"message": "Flask API Home"})
@app.route('/add-item', methods=['POST'])
def add_skill():
# Приклад елемента для вставки
item = {"name": "Joe", "level": "Expert"}
db.items.insert_one(item)
return jsonify({"mesage": "Item added!"})
@app.route('/items', methods=['GET'])
def get_items():
items = list(db.items.find({}, {"_id": 0}))
return jsonify(items)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
Перезіб'ємо і запустимо контейнер Flask:
podman build -t flask-backend:latest -f backend/Dockerfile .
podman run --name flask-backend \
--network interactive-network \
-p 5000:5000 \
flask-backend:latest
Тепер перевіримо, чи все працює. Я використовував Postman, щоб додати елемент і отримати елемент.
Надішліть POST запит до URL http://localhost:5000/add-item, і ви повинні побачити повідомлення "Item added!" (Елемент додано!).
Тепер, якщо ви перейдете через браузер або надішлете GET запит до http://localhost:5000/items.
Тепер ми налаштували та інтегрували MongoDB з дуже простим налаштуванням Flask. Ми створили контейнер MongoDB, підключили його до Flask додатку і реалізували базову інтеграцію для перевірки з'єднання.
Перекладено з: Adding MongoDB to Flask