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. A cikk megkezdése előtt el kell végeznie az 1. részt .

Az alábbi szolgáltatásdiagram a cikkben tárgyalt helyi összetevőket emeli ki. Ebben a cikkben azt is megtudhatja, hogyan használhatja a MongoDB-hez készült Azure Cosmos DB helyi Docker-rendszerképekkel 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. Nyissa 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épet egy Olyan Docker-fájlból hozhatja létre, 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.

Ha a Docker-rendszerképet a Docker parancssori felületével szeretné létrehozni, szüksége van a Dockerre. A Docker telepítése után nyisson meg egy terminálablakot, és nyissa meg a mintamappát.

Megjegyzés

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

  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.

    Megjegyzés

    A mintaadattár a Python 3.8-at használja. Ha saját Dockerfile-t hoz létre, használjon támogatott Python verziót, például a 3.12-es vagy a 3.13-as verziót. A jelenleg támogatott verziókról lásd a Python verziótámogatást.

    #!/bin/bash
    docker build --rm --pull \
      --file "Dockerfile" \
      --label "com.microsoft.created-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 a Docker CLI-vel közvetlenül a Docker Desktop alkalmazással készített képeket is megtekintheti.

A MongoDB beállítása

A Python webalkalmazáshoz mongoDB-adatbázisra és 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 tárolja az egyik ilyen MongoDB-példányhoz tartozó MongoDB-kapcsolati karakterláncot egy környezeti változóban. Bárki, aki meg tudja vizsgálni a tárolóját – például a(z) docker inspect használatával –, láthatja ezt a kapcsolati karakterláncot.

Helyi MongoDB

Hozzon létre egy helyi MongoDB-példányt a Azure CLI használatával.

  1. Ha még nincs telepítve, telepítse a MongoDB-t .

    Annak ellenőrzéséhez, hogy a MongoDB telepítve van-e, használja a MongoDB Shellt (mongosh). Ha a következő parancsok nem működnek, előfordulhat, hogy explicit módon telepítenie kell a mongosh-t , vagy csatlakoztatnia kell a mongosh-t 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.

    Megjegyzés

    A konfigurációs fájl elérési útja az operációs rendszertől és a MongoDB-verziótól függően változik. MacOS rendszeren keresse meg /usr/local/etc/mongod.conf vagy /opt/homebrew/etc/mongod.conf. Linux rendszeren ellenőrizze a /etc/mongod.conf.

    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 for MongoDB

Most hozzon létre egy Azure Cosmos DB a MongoDB-példányhoz a 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ő). Használja ugyanazt az erőforráscsoportot 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 ezen szakaszában megtanulhatja, hogyan használhatja a VS Code-ot vagy az Azure CLI-t a lemezkép helyi futtatásához. A mintaalkalmazás elvárja, hogy a MongoDB kapcsolati adatai környezeti változók használatával legyenek átadva. Számos módszer létezik a környezeti változók helyi tárolóba történő továbbítására. Minden módszernek vannak előnyei és hátrányai a biztonság szempontjából. Kerülje a bizalmas információk becsekkolását vagy benne hagyását a tárolóban lévő kódban.

Megjegyzés

Amikor telepíti a webalkalmazást az Azure-ba, a webalkalmazás az App Service-konfigurációs beállításként megadott környezeti változók értékeiből szerzi be a csatlakozási adatokat. A helyi fejlesztési környezethez tartozó módosítások egyike 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" \
      --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
    

    A konténer msdocspythoncontainerwebapp:latest megjelenik Ön előtt a listában. 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.

    A Django esetében keresse fel a http://127.0.0.1:8000 oldalt, a Flask esetében pedig a http://127.0.0.1:5000/ oldalt.

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

    docker container stop <container-name>
    

Azure Cosmos DB for MongoDB

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
    

    Bemutató célokra ez a példa bizalmas információk átadását mutatja be. A kapcsolati karakterlánc információkat a tároló vizsgálatával tekintheti meg a docker container inspect paranccsal. 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
    

    A konténer msdocspythoncontainerwebapp:latest megjelenik Ön előtt a listában. 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.

    A Django esetében keresse fel a http://127.0.0.1:8000 oldalt, a Flask esetében pedig a http://127.0.0.1:5000/ oldalt.

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

    docker container stop <container-name>
    

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

Következő lépés