Megosztás a következőn keresztül:


Tárolóalapú Python-webalkalmazás helyi létrehozása és futtatása

Az oktatóanyag-sorozat jelen részében megtudhatja, hogyan hozhat létre és futtathat tárolóalapú Django - vagy Flask Python-webalkalmazást a helyi számítógépen. Az alkalmazás adatainak tárolásához használhat helyi MongoDB-példányt vagy a MongoDB-hez készült Azure Cosmos DB-t. Ez a cikk egy 5 részes oktatóanyag-sorozat 2. része. Javasoljuk, hogy a cikk megkezdése előtt végezze el az 1. részt .

Az alábbi szolgáltatásdiagram a cikkben tárgyalt helyi összetevőket emeli ki. Ebből a cikkből megtudhatja azt is, hogyan használhatja az Azure Cosmos DB for MongdoDB-t helyi Docker-rendszerképpel a MongoDB helyi példánya helyett.

Képernyőkép az Oktatóanyag – Tárolóalapú Python-alkalmazásról az Azure-ban a helyi rész kiemelésével.

A Python-mintaalkalmazás klónozása vagy letöltése

Ebben a szakaszban klónozza vagy letölti a Docker-rendszerkép létrehozásához használt Python-mintaalkalmazást. Django- vagy Flask Python-webalkalmazások közül választhat. Ha saját Python-webalkalmazással rendelkezik, ezt használhatja. Ha saját Python-webalkalmazást használ, győződjön meg arról, hogy az alkalmazás rendelkezik dockerfile-val a gyökérmappában, és csatlakozhat mongoDB-adatbázishoz.

  1. Klónozza a Django- vagy Flask-adattárat egy helyi mappába az alábbi parancsok egyikével:

    # Django
    git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git
    
  2. Keresse meg a klónozott adattár gyökérmappáját.

    # Django
    cd msdocs-python-django-container-web-app
    

Docker-rendszerkép létrehozása

Ebben a szakaszban egy Docker-rendszerképet hoz létre a Python-webalkalmazáshoz a Visual Studio Code vagy az Azure CLI használatával. A Docker-rendszerkép tartalmazza a Python-webalkalmazást, annak függőségeit és a Python-futtatókörnyezetet. A Docker-rendszerkép egy Docker-fájlból épül fel, amely meghatározza a rendszerkép tartalmát és viselkedését. A Dockerfile a klónozott vagy letöltött mintaalkalmazás gyökérmappájában található (vagy saját maga adta meg).

Jótanács

Ha most ismerkedik az Azure CLI-vel, olvassa el az Azure CLI használatának első lépéseit , amelyből megtudhatja, hogyan töltheti le és telepítheti helyileg az Azure CLI-t, vagy hogyan futtathat Azure CLI-parancsokat az Azure Cloud Shellben.

A Docker szükséges a Docker-kép létrehozásához, a Docker CLI használatával. A Docker telepítése után nyisson meg egy terminálablakot, és keresse meg a mintamappát.

Megjegyzés

A szakasz lépéseihez a Docker-démon futtatására van szükség. Bizonyos telepítésekben, például Windows rendszeren, a folytatás előtt meg kell nyitnia a Docker Desktopot, amely elindítja a démont.

  1. Ellenőrizze, hogy a Docker elérhető-e, ha a mintaalkalmazás gyökérmappájában futtatja az alábbi parancsot.

    docker
    

    Ha a parancs futtatása után megjelenik a Docker parancssori felületének súgója, a Docker elérhető. Ellenkező esetben győződjön meg arról, hogy a Docker telepítve van, és hogy a parancssor hozzáfér a Docker CLI-hez.

  2. Hozza létre a Python-webalkalmazás Docker-rendszerképét a Docker buildelési parancsával.

    A parancs általános formája a következő docker build --rm --pull --file "<path-to-project-root>/Dockerfile" --label "com.microsoft.created-by=docker-cli" --tag "<container-name>:latest" "<path-to-project-root>": .

    Ha a projekt gyökérmappájában van, használja az alábbi parancsot a Docker kép létrehozásához. A parancs végén található pont (".") arra az aktuális könyvtárra utal, amelyben a parancs fut. Az újraépítés kényszerítéséhez adja hozzá a elemet --no-cache.

    #!/bin/bash
    docker build --rm --pull \
      --file "Dockerfile" \
      --label "com.microsoft.create-by=docker-cli" \
      --tag "msdocspythoncontainerwebapp:latest" \
        .
    
  3. Ellenőrizze, hogy a rendszerkép sikeresen elkészült-e a Docker-rendszerképek paranccsal.

    docker images
    

    A parancs visszaadja a képek listáját a REPOSITORY neve, a TAG, a CREATED dátum és egyéb képtulajdonságok alapján.

Ezen a ponton van egy helyi Docker-rendszerképe "msdocspythoncontainerwebapp" néven, a "latest" címkével. A címkék segítenek meghatározni a verzió részleteit, a tervezett használatot, a stabilitást és az egyéb releváns információkat. További információkért tekintse meg a tárolólemezképek címkézésére és verziószámozására vonatkozó javaslatokat.

Megjegyzés

A VS Code-ból vagy közvetlenül a Docker CLI használatával készült képek a Docker Desktop alkalmazással is megtekinthetők.

A MongoDB beállítása

A Python-webalkalmazáshoz egy restaurants_reviews nevű MongoDB-adatbázisra van szükség, és egy restaurants_reviews nevű gyűjteményre van szükség az adatok tárolásához. Ebben az oktatóanyagban a MongoDB helyi telepítését és egy MongoDB-példányhoz készült Azure Cosmos DB-példányt is használ az adatbázis és a gyűjtemény létrehozásához és eléréséhez.

Fontos

Ne használjon olyan MongoDB-adatbázist, amelyet éles környezetben is használnak. Ebben az oktatóanyagban a MongoDB kapcsolati sztringet egy környezeti változóban tárolja ezen MongoDB-példányok egyikéhez (amelyet bárki megfigyelhet, aki képes megvizsgálni a tárolót – például a használatával docker inspect).

Helyi MongoDB

Először hozzunk létre egy helyi MongoDB-példányt az Azure CLI használatával.

  1. Telepítse a MongoDB-t (ha még nincs telepítve).

    A MongoDB telepítését a MongoDB Shell (mongosh) használatával ellenőrizheti. Ha a következő parancsok nem működnek, előfordulhat, hogy explicit módon telepítenie kell a mongosh-t , vagy csatlakoznia kell a mongosh-hoz a MongoDB-kiszolgálóhoz.

    • Az alábbi paranccsal nyissa meg a MongoDB-rendszerhéjat, és szerezze be a MongoDB-rendszerhéj és a MongoDB-kiszolgáló verzióját:

      mongosh
      

      Jótanács

      Ha csak a rendszeren telepített MongoDB-kiszolgáló verzióját szeretné visszaadni, zárja be és nyissa meg újra a MongoDB-rendszerhéjat, és használja a következő parancsot: mongosh --quiet --exec 'db.version()'

      Egyes beállításokban közvetlenül is meghívhatja a Mongo démont a bash-rendszerhéjban.

      mongod --version
      
  2. Szerkessze a mongod.cfg fájlt a \MongoDB\Server\8.0\bin mappában, és adja hozzá a számítógép helyi IP-címét a bindIP kulcshoz.

    A bindipMongoD konfigurációs fájlban található kulcs határozza meg azokat a gazdagépneveket és IP-címeket, amelyeket a MongoDB figyel az ügyfélkapcsolatok esetében. Adja hozzá a helyi fejlesztési számítógép aktuális IP-címét. A Docker-tárolóban helyileg futó Python-minta webalkalmazás ezzel a címmel kommunikál a gazdaszámítógéppel.

    A konfigurációs fájl egy részének például így kell kinéznie:

    net:
      port: 27017
      bindIp: 127.0.0.1,<local-ip-address>
    
  3. Mentse a konfigurációs fájl módosításait.

    Fontos

    A konfigurációs fájl módosításainak mentéséhez rendszergazdai jogosultságokra van szüksége.

  4. Indítsa újra a MongoDB-t a konfigurációs fájl módosításainak felvételéhez.

  5. Nyisson meg egy MongoDB parancssort, és futtassa a következő parancsot az adatbázis és a gyűjtemény nevének "restaurants_reviews" beállításához. Létrehozhat adatbázist és gyűjteményt a VS Code MongoDB bővítményével vagy bármely más MongoDB-képes eszközzel is.

    > help
    > use restaurants_reviews
    > db.restaurants_reviews.insertOne({})
    > show dbs
    > exit
    

Az előző lépés elvégzése után a helyi MongoDB kapcsolat sztringje "mongodb://127.0.0.1:27017/", az adatbázis neve "restaurants_reviews", a gyűjtemény neve pedig "restaurants_reviews".

Azure Cosmos DB a MongoDB-hez

Most hozzunk létre egy Azure Cosmos DB-t MongoDB-példányhoz az Azure CLI használatával.

Megjegyzés

Az oktatóanyag-sorozat 4. részében az Azure Cosmos DB for MongoDB-példány használatával futtathatja a webalkalmazást az Azure App Service-ben.

A következő szkript futtatása előtt cserélje le a helyet, az erőforráscsoportot és az Azure Cosmos DB for MongoDB-fiók nevét a megfelelő értékekre (nem kötelező). Javasoljuk, hogy ugyanazt az erőforráscsoportot használja az oktatóanyagban létrehozott összes Azure-erőforráshoz, hogy könnyebben törölhesse őket, ha végzett.

A szkript futtatása néhány percet vesz igénybe.

#!/bin/bash
# LOCATION: The Azure region. Use the "az account list-locations -o table" command to find a region near you.
LOCATION='westus'
# RESOURCE_GROUP_NAME: The resource group name, which can contain underscores, hyphens, periods, parenthesis, letters, and numbers.
RESOURCE_GROUP_NAME='msdocs-web-app-rg'
# ACCOUNT_NAME: The Azure Cosmos DB for MongDB account name, which can contain lowercase letters, hyphens, and numbers.
ACCOUNT_NAME='msdocs-cosmos-db-account-name'

# Create a resource group
echo "Creating resource group $RESOURCE_GROUP_NAME in $LOCATION..."
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

# Create a Cosmos account for MongoDB API
echo "Creating $ACCOUNT_NAME. This command may take a while to complete."
az cosmosdb create --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --kind MongoDB

# Create a MongoDB API database
echo "Creating database restaurants_reviews"
az cosmosdb mongodb database create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --name restaurants_reviews

# Create a MongoDB API collection
echo "Creating collection restaurants_reviews"
az cosmosdb mongodb collection create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --database-name restaurants_reviews --name restaurants_reviews

# Get the connection string for the MongoDB database
echo "Get the connection string for the MongoDB account"
az cosmosdb keys list --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --type connection-strings

echo "Copy the Primary MongoDB Connection String from the list above"

Amikor a szkript befejeződött, másolja az elsődleges MongoDB kapcsolati sztringet az utolsó parancs kimenetéből a vágólapra vagy más helyre.

{
  "connectionStrings": [
    {
      "connectionString": ""mongodb://msdocs-cosmos-db:pnaMGVtGIRAZHUjsg4GJBCZMBJ0trV4eg2IcZf1TqV...5oONz0WX14Ph0Ha5IeYACDbuVrBPA==@msdocs-cosmos-db.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@msdocs-cosmos-db@"",
      "description": "Primary MongoDB Connection String",
      "keyKind": "Primary",
      "type": "MongoDB"
    },

    ...
  ]
}

Az előző lépés elvégzése után egy mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters> formájú Azure Cosmos DB for MongoDB kapcsolati sztringgel, egy restaurants_reviews nevű adatbázissal és egy restaurants_reviews nevű gyűjteménnyel rendelkezik.

Ha többet szeretne tudni arról, hogyan hozhat létre Cosmos DB-t MongoDB-fiókhoz az Azure CLI használatával, valamint hogyan hozhat létre adatbázisokat és gyűjteményeket, olvassa el az Azure Cosmos DB-hez készült MongoDB-adatbázis és -gyűjtemény létrehozása az Azure CLI használatával című témakört. Használhatja a PowerShellt, a VS Code Azure Databases bővítményt és az Azure Portalt is.

Jótanács

A VS Code Azure Databases bővítményében kattintson a jobb gombbal a MongoDB-kiszolgálóra, és kérje le a kapcsolati sztringet.

A rendszerkép helyi futtatása egy tárolóban

Most már készen áll a Docker-tároló helyi futtatására a helyi MongoDB-példány vagy a Cosmos DB for MongoDB-példány használatával. Az oktatóanyag jelen szakaszában megtanulhatja, hogy a VS Code vagy az Azure CLI használatával helyileg futtathatja a rendszerképet. A mintaalkalmazás megköveteli, hogy a MongoDB kapcsolati adatait környezeti változókkal adják át neki. A környezeti változók konténerhez való helyi átadásának több módja is van. Mindegyiknek vannak előnyei és hátrányai a biztonság szempontjából. Kerülje a bizalmas információk ellenőrzését vagy azok kódba való beillesztését a tárolóban.

Megjegyzés

Amikor a webalkalmazás üzembe van helyezve az Azure-ban, a webalkalmazás lekéri a kapcsolati adatokat az App Service konfigurációs beállításaiként beállított környezeti értékekből, és a helyi fejlesztési környezetre vonatkozó egyik módosítás sem érvényes.

MongoDB helyi

A Docker-rendszerkép helyi futtatásához használja az alábbi parancsokat a MongoDB helyi példányával.

  1. Futtassa a kép legújabb verzióját.

    #!/bin/bash
    
    # Define variables
    # Set the port number based on the framework being used:
    # 8000 for Django, 5000 for Flask
    export PORT=<port-number>  # Replace with actual port (e.g., 8000 or 5000)
    
    # Set your computer''s IP address (replace with actual IP)
    export YOUR_IP_ADDRESS=<your-computer-ip-address>  # Replace with actual IP address
    
    # Run the Docker container with the required environment variables
    docker run --rm -it \
      --publish "$PORT:$PORT" \
      --publish 27017:27017 \
      --add-host "mongoservice:$YOUR_IP_ADDRESS" \
      --env CONNECTION_STRING=mongodb://mongoservice:27017 \
      --env DB_NAME=restaurants_reviews \
      --env COLLECTION_NAME=restaurants_reviews \
      --env SECRET_KEY="supersecretkeythatispassedtopythonapp" \
      msdocspythoncontainerwebapp:latest
    
  2. Ellenőrizze, hogy működik-e a tároló. Egy másik konzolablakban futtassa a docker container ls parancsot.

    docker container ls
    

    Tekintse meg az "msdocspythoncontainerwebapp:latest:latest" tárolót a listán. Figyelje meg a NAMES oszlop és a PORTS oszlop kimenetét. Használja a konténer nevét a konténer leállításához.

  3. Tesztelje a webalkalmazást.

    Lépjen a "http://127.0.0.1:8000""-ra Djangohoz és "http://127.0.0.1:5000/""-ra Flaskhoz.

  4. Állítsa le a tárolót.

    docker container stop <container-name>
    

Azure Cosmos DB a MongoDB-hez

A Docker-rendszerkép azure-beli futtatásához használja az alábbi parancsokat az Azure Cosmos DB for MongoDB-példányával.

  1. Futtassa a kép legújabb verzióját.

    #!/bin/bash
    # PORT=8000 for Django and 5000 for Flask
    export PORT=<port-number>
    export CONNECTION_STRING="<connection-string>"
    
    docker run --rm -it \
      --publish $PORT:$PORT/tcp \
      --env CONNECTION_STRING=$CONNECTION_STRING \
      --env DB_NAME=restaurants_reviews \
      --env COLLECTION_NAME=restaurants_reviews \
      --env SECRET_KEY=supersecretkeythatyougenerate \
      msdocspythoncontainerwebapp:latest
    

    A bizalmas információk átadása csak bemutató célokra jelenik meg. A kapcsolati sztring információi a konténert a docker container inspect parancs segítségével vizsgálva tekinthetők meg. A titkos kódok kezelésének másik módja a Docker BuildKit funkciójának használata.

  2. Nyisson meg egy új konzolablakot, és futtassa a következő Docker-tároló ls parancsát annak ellenőrzéséhez, hogy a tároló fut-e.

    docker container ls
    

    Tekintse meg az "msdocspythoncontainerwebapp:latest:latest" tárolót a listán. Figyelje meg a NAMES oszlop és a PORTS oszlop kimenetét. Használja a konténer nevét a konténer leállításához.

  3. Tesztelje a webalkalmazást.

    Lépjen a "http://127.0.0.1:8000""-ra Djangohoz és "http://127.0.0.1:5000/""-ra Flaskhoz.

  4. Állítsa le a tárolót.

    docker container stop <container-name>
    

A tárolót a rendszerképből is elindíthatja, és leállíthatja a Docker Desktop alkalmazással.

Következő lépés