Kurz: Sestavení a nasazení webové aplikace v Pythonu pomocí Azure Container Apps a PostgreSQL
Tento článek je součástí série kurzů o kontejnerizaci a nasazení webové aplikace v Pythonu do Azure Container Apps. Container Apps umožňuje nasazovat kontejnerizované aplikace bez nutnosti spravovat složitou infrastrukturu.
V tomto kurzu:
- Vytvoření kontejneru ukázkové webové aplikace v Pythonu (Django nebo Flask) sestavením image kontejneru v cloudu
- Nasaďte image kontejneru do Azure Container Apps.
- Definujte proměnné prostředí, které aplikaci kontejneru umožňují připojit se k flexibilnímu serveru Azure Database for PostgreSQL instanci, ve které ukázková aplikace ukládá data.
Následující diagram znázorňuje úlohy v tomto kurzu: sestavení a nasazení image kontejneru.
Požadavky
Pokud nemáte předplatné Azure, vytvořte si bezplatný účet předtím, než začnete.
Příkazy Azure CLI můžete spouštět v Azure Cloud Shellu nebo na pracovní stanici s nainstalovaným Azure CLI.
Pokud používáte místně, přihlaste se a nainstalujte potřebné moduly pro tento kurz podle těchto kroků:
V případě potřeby se přihlaste k Azure a ověřte:
az login
Ujistěte se, že používáte nejnovější verzi Azure CLI:
az upgrade
Nainstalujte nebo upgradujte
containerapp a rozšíření Azure CLI rdbms-connect pomocí příkazuaz extension add :az extension add --name containerapp --upgrade az extension add --name rdbms-connect --upgrade
Poznámka:
Pokud chcete zobrazit seznam rozšíření nainstalovaných ve vašem systému, můžete použít příkaz az extension list. Například:
az extension list --query [].name --output tsv
Získání ukázkové aplikace
Vytvoření forku a naklonování ukázkového kódu do vývojového prostředí:
Přejděte do úložiště GitHub ukázkové aplikace (Django nebo Flask) a vyberte Fork.
Postupujte podle pokynů k vytvoření odnože úložiště do vašeho účtu na GitHubu. Úložiště kódu si také můžete stáhnout přímo na místní počítač bez forku nebo účtu GitHubu. Pokud ale použijete metodu stahování, v dalším kurzu této série nebudete moct nastavit kontinuální integraci a průběžné doručování (CI/CD).
Pomocí příkazu git clone naklonujte forkované úložiště do složky python-container:
# Django git clone https://github.com/<github-username>/msdocs-python-django-azure-container-apps.git python-container # Flask # git clone https://github.com/<github-username>/msdocs-python-flask-azure-container-apps.git python-container
Změňte adresář:
cd python-container
Sestavení image kontejneru z kódu webové aplikace
Po provedení těchto kroků budete mít instanci služby Azure Container Registry, která obsahuje image kontejneru Dockeru sestavenou z ukázkového kódu.
Pomocí příkazu az group create vytvořte skupinu prostředků:
az group create \ --name pythoncontainer-rg \ --location <location>
Nahraďte <lokace> jednou z hodnot lokace Azure
Name
z výstupu příkazuaz account list-locations -o table
.Vytvořte registr kontejneru pomocí příkazu az acr create:
az acr create \ --resource-group pythoncontainer-rg \ --name <registry-name> \ --sku Basic \ --admin-enabled
Název, který používáte pro <název registru> musí být jedinečný v rámci Azure a musí obsahovat 5 až 50 alfanumerických znaků.
Přihlaste se k registru pomocí příkazu az acr login:
az acr login --name <registry-name>
Příkaz přidá do názvu "azurecr.io", aby se vytvořil plně kvalifikovaný název registru. Pokud je přihlášení úspěšné, zobrazí se zpráva Přihlášení bylo úspěšné. Pokud přistupujete k registru z předplatného, které se liší od předplatného, ve kterém jste registr vytvořili, použijte přepínač
--suffix
.Pokud se přihlášení nezdaří, ujistěte se, že démon Dockeru běží ve vašem systému.
Sestavte image pomocí příkazu az acr build:
az acr build \ --registry <registry-name> \ --resource-group pythoncontainer-rg \ --image pythoncontainer:latest .
Platí tyto aspekty:
Tečka (
.
) na konci příkazu označuje umístění zdrojového kódu, který se má sestavit. Pokud tento příkaz nespouštíte v kořenovém adresáři ukázkové aplikace, zadejte cestu ke kódu.Pokud spouštíte příkaz v Azure Cloud Shellu, použijte
git clone
k prvnímu načtení úložiště do prostředí Cloud Shell. Potom změňte adresář na kořen projektu tak, aby tečka (.
) byla interpretována správně.Pokud možnost (stejná jako
--image
) vynecháte-t
, příkaz zařadí do fronty sestavení místního kontextu bez toho, aby ho nasdílel do registru. Sestavení bez nabízení může být užitečné ke kontrole sestavení image.
Pomocí příkazu az acr repository list ověřte, že image kontejneru byla vytvořena:
az acr repository list --name <registry-name>
Poznámka:
Kroky v této části vytvoří registr kontejneru na úrovni služby Basic. Tato úroveň je optimalizovaná pro náklady s sadou funkcí a propustností určenou pro scénáře vývojářů a je vhodná pro požadavky tohoto kurzu. V produkčních scénářích byste pravděpodobně použili úroveň služby Standard nebo Premium. Tyto úrovně poskytují vylepšené úrovně úložiště a propustnosti.
Chcete-li se dozvědět více, viz úrovně služby Azure Container Registry. Pro informace o cenách se podívejte na ceník služby Azure Container Registry.
Vytvoření instance flexibilního serveru PostgreSQL
Ukázková aplikace (Django nebo Flask) ukládá data kontroly restaurace v databázi PostgreSQL. V těchto krocích vytvoříte server, který bude obsahovat databázi.
K vytvoření serveru PostgreSQL v Azure použijte příkaz az postgres flexible-server create. Není neobvyklé, že se tento příkaz spustí několik minut, než se dokončí.
az postgres flexible-server create \ --resource-group pythoncontainer-rg \ --name <postgres-server-name> \ --location <location> \ --admin-user demoadmin \ --admin-password <admin-password> \ --active-directory-auth Enabled \ --tier burstable \ --sku-name standard_b1ms \ --public-access 0.0.0.0
Použijte tyto hodnoty:
pythoncontainer-rg
: Název skupiny prostředků, kterou tento kurz používá. Pokud jste použili jiný název, změňte tuto hodnotu.<postgres-server-name>: Název databázového serveru PostgreSQL. Tento název musí být jedinečný ve všech Azure. Koncový bod serveru je
https://<postgres-server-name>.postgres.database.azure.com
. Povolené znaky jsouA
Z
,0
9
a pomlčky (-
).<umístění>: Použijte stejné umístění, které jste použili pro webovou aplikaci. <umístění> je jednou z hodnot
Name
umístění Azure z výstupu příkazuaz account list-locations -o table
.<uživatelské jméno správce>: Uživatelské jméno pro účet správce. Nemůže to být
azure_superuser
,admin
,administrator
,root
,guest
anipublic
. Pro účely tohoto kurzu použijtedemoadmin
.<heslo správce>: Heslo uživatele správce. Musí obsahovat 8 až 128 znaků ze tří z následujících kategorií: velká písmena anglické abecedy, malá písmena anglické abecedy, číslice a jiné než alfanumerické znaky.
Důležité
Při vytváření uživatelských jmen nebo hesel nepoužívejte znak dolaru ($). Později při vytváření proměnných prostředí s těmito hodnotami má tento znak speciální význam v kontejneru Linuxu, který používáte ke spouštění aplikací v Pythonu.
--active-directory-auth
: Tato hodnota určuje, jestli je na serveru PostgreSQL povolené ověřování Microsoft Entra. Nastavte ho naEnabled
.--sku-name
: Název cenové úrovně a konfigurace výpočetních prostředků; napříkladStandard_B1ms
. Další informace najdete v tématu o cenách služby Azure Database for PostgreSQL. Pokud chcete zobrazit seznam dostupných úrovní, použijteaz postgres flexible-server list-skus --location <location>
.--public-access
: Použijte0.0.0.0
. Umožňuje veřejný přístup k serveru z jakékoli služby Azure, jako je kontejnerové aplikace.
Poznámka:
Pokud plánujete pracovat se serverem PostgreSQL z vaší místní pracovní stanice pomocí nástrojů, je nutné přidat pravidlo brány firewall pro IP adresu vaší pracovní stanice pomocí příkazu az postgres flexible-server firewall-rule create.
Pomocí příkazu az ad signed-in-user show získejte ID objektu vašeho uživatelského účtu. Toto ID použijete v dalším příkazu.
az ad signed-in-user show --query id --output tsv
Pomocí příkazu az postgres flexible-server ad-admin create přidejte svůj uživatelský účet jako správce Microsoft Entra k serveru PostgreSQL.
az postgres flexible-server ad-admin create \ --resource-group pythoncontainer-rg \ --server-name <postgres-server-name> \ --display-name <your-email-address> \ --object-id <your-account-object-id>
Jako ID objektu účtu použijte hodnotu, kterou jste získali v předchozím kroku.
Poznámka:
Kroky v této části vytvoří server PostgreSQL s jedním virtuálním jádrem a omezenou pamětí v cenové úrovni Burstable. Úroveň Burstable je cenově nižší možností pro úlohy, které nepotřebují nepřetržitě plný procesor a jsou vhodné pro požadavky tohoto kurzu. U produkčních úloh můžete upgradovat na cenovou úroveň Pro obecné účely nebo Optimalizováno pro paměť. Tyto úrovně poskytují vyšší výkon, ale zvyšují náklady.
Další informace naleznete v části Možnosti výpočtů v Azure Database for PostgreSQL - flexibilní server. Informace o cenách najdete v tématu ceny služby Azure Database for PostgreSQL.
Vytvoření databáze na serveru
V tuto chvíli máte server PostgreSQL. V této části vytvoříte na serveru databázi.
Pomocí příkazu az postgres flexible-server db create vytvořte databázi s názvem restaurants_reviews:
az postgres flexible-server db create \
--resource-group pythoncontainer-rg \
--server-name <postgres-server-name> \
--database-name restaurants_reviews
Použijte tyto hodnoty:
-
pythoncontainer-rg
: Název skupiny prostředků, kterou tento kurz používá. Pokud jste použili jiný název, změňte tuto hodnotu. -
<postgres-server-name>
: Název serveru PostgreSQL.
K připojení k databázi můžete použít také příkaz az postgres flexible-server connect a pak pracovat s příkazy psql . Při práci s psql je často jednodušší používat Azure Cloud Shell, protože prostředí obsahuje všechny závislosti pro vás.
Můžete se také připojit k flexibilnímu serveru Azure Database for PostgreSQL a vytvořit databázi pomocí psql nebo integrovaného vývojového prostředí, které podporuje PostgreSQL, například Azure Data Studio. Postup použití psql najdete v tématu Konfigurace spravované identity v databázi PostgreSQL dále v tomto článku.
Vytvoření spravované identity přiřazené uživatelem
Vytvořte spravovanou identitu přiřazenou uživatelem, která se použije jako identita pro aplikaci kontejneru, když je spuštěná v Azure.
Poznámka:
Pokud chcete vytvořit spravovanou identitu přiřazenou uživatelem, potřebuje váš účet přispěvatele spravované identity přiřazení role.
Pomocí příkazu az identity create vytvořte spravovanou identitu přiřazenou uživatelem:
az identity create --name my-ua-managed-id --resource-group pythoncontainer-rg
Konfigurace spravované identity v databázi PostgreSQL
Nakonfigurujte spravovanou identitu jako roli na serveru PostgreSQL a udělte jí potřebná oprávnění pro restaurants_reviews databázi. Bez ohledu na to, jestli používáte Azure CLI nebo psql, musíte se připojit k serveru Azure PostgreSQL pomocí uživatele, který je nakonfigurovaný jako správce Microsoft Entra ve vaší instanci serveru. Spravované identity a další role správce Microsoftu na vašem serveru můžou konfigurovat jenom účty Microsoft Entra nakonfigurované jako správce PostgreSQL.
Získejte přístupový token pro váš účet Azure pomocí příkazu az account get-access-token. Přístupový token použijete v dalších krocích.
az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken
Vrácený token je dlouhý. Nastavte jeho hodnotu v prostřední proměnné tak, aby se používala v příkazech v dalším kroku:
MY_ACCESS_TOKEN=<your-access-token>
Přidejte spravovanou identitu přiřazenou uživatelem jako roli databáze na serveru PostgreSQL pomocí příkazu az postgres flexible-server execute:
az postgres flexible-server execute \ --name <postgres-server-name> \ --database-name postgres \ --querytext "select * from pgaadauth_create_principal('"my-ua-managed-id"', false, false);select * from pgaadauth_list_principals(false);" \ --admin-user <your-Azure-account-email> \ --admin-password $MY_ACCESS_TOKEN
Použijte tyto hodnoty:
Pokud jste pro spravovanou identitu použili jiný název, nahraďte
my-ua-managed-id
v příkazupgaadauth_create_principal
názvem vaší spravované identity.Jako hodnotu
--admin-user
použijte e-mailovou adresu vašeho účtu Azure.Pro
--admin-password
hodnotu použijte přístupový token z výstupu předchozího příkazu bez uvozovek.Ujistěte se, že je název databáze
postgres
.
Poznámka:
Pokud na místní pracovní stanici spouštíte příkaz
az postgres flexible-server execute
, ujistěte se, že jste přidali pravidlo brány firewall pro IP adresu pracovní stanice. Pravidlo můžete přidat pomocí příkazu az postgres flexible-server firewall-rule create. Stejný požadavek existuje také pro příkaz v dalším kroku.Udělte spravované identitě přiřazené uživatelem potřebná oprávnění k databázi restaurants_reviews pomocí následujícího příkazu az postgres flexible-server execute:
az postgres flexible-server execute \ --name <postgres-server-name> \ --database-name restaurants_reviews \ --querytext "GRANT CONNECT ON DATABASE restaurants_reviews TO \"my-ua-managed-id\";GRANT USAGE ON SCHEMA public TO \"my-ua-managed-id\";GRANT CREATE ON SCHEMA public TO \"my-ua-managed-id\";GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"my-ua-managed-id\";ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO \"my-ua-managed-id\";" \ --admin-user <your-Azure-account-email> \ --admin-password $MY_ACCESS_TOKEN
Použijte tyto hodnoty:
Pokud jste pro spravovanou identitu použili jiný název, nahraďte všechny instance
my-ua-managed-id
v příkazu názvem vaší spravované identity. V řetězci dotazu je pět instancí.Jako hodnotu
--admin-user
použijte e-mailovou adresu vašeho účtu Azure.Pro
--admin-password
hodnotu použijte přístupový token z předchozího výstupu bez uvozovek.Ujistěte se, že je název databáze
restaurants_reviews
.
Tento příkaz Azure CLI se připojí k databázi restaurants_reviews na serveru a vydá následující příkazy SQL:
GRANT CONNECT ON DATABASE restaurants_reviews TO "my-ua-managed-id"; GRANT USAGE ON SCHEMA public TO "my-ua-managed-id"; GRANT CREATE ON SCHEMA public TO "my-ua-managed-id"; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "my-ua-managed-id"; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "my-ua-managed-id";
Nasazení webové aplikace do Container Apps
Kontejnerové aplikace se nasazují do prostředí azure Container Apps , která fungují jako zabezpečená hranice. V následujících krocích vytvoříte prostředí a kontejner uvnitř prostředí. Kontejner pak nakonfigurujete tak, aby byl web viditelný externě.
Tyto kroky vyžadují rozšíření Azure Container Apps containerapp.
Vytvořte prostředí Container Apps pomocí příkazu az containerapp env create:
az containerapp env create \ --name python-container-env \ --resource-group pythoncontainer-rg \ --location <location>
<umístění> je jednou z hodnot pro umístění Azure
Name
z výstupu příkazuaz account list-locations -o table
.Pomocí příkazu az acr credential show získejte přihlašovací údaje pro instanci služby Azure Container Registry:
az acr credential show -n <registry-name>
Uživatelské jméno a jedno z hesel vrácených z výstupu příkazu použijete při vytváření aplikace kontejneru v kroku 5.
Pomocí příkazu az identity show získejte ID klienta a ID prostředku spravované identity přiřazené uživatelem:
az identity show --name my-ua-managed-id --resource-group pythoncontainer-rg --query "[clientId, id]" --output tsv
Při vytváření aplikace kontejneru v kroku 5 použijete hodnotu ID klienta (GUID) a ID prostředku z výstupu příkazu. ID prostředku má následující formát:
/subscriptions/<subscription-id>/resourcegroups/pythoncontainer-rg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/my-ua-managed-id
.Spuštěním následujícího příkazu vygenerujte hodnotu tajného klíče:
python -c 'import secrets; print(secrets.token_hex())'
Hodnotu tajného klíče použijete k nastavení proměnné prostředí při vytváření aplikace kontejneru v kroku 5.
Poznámka:
Příkaz, který tento krok ukazuje, je pro Bash shell. V závislosti na vašem prostředí možná budete muset vyvolat Python pomocí
python3
. Ve Windows musíte příkaz uzavřít do parametru-c
do dvojitých uvozovek místo jednoduchých uvozovek. V závislosti na vašem prostředí můžete také potřebovat vyvolat Python pomocípy
nebopy -3
.Vytvořte v prostředí kontejnerovou aplikaci pomocí příkazu az containerapp create:
az containerapp create \ --name python-container-app \ --resource-group pythoncontainer-rg \ --image <registry-name>.azurecr.io/pythoncontainer:latest \ --environment python-container-env \ --ingress external \ --target-port <5000 for Flask or 8000 for Django> \ --registry-server <registry-name>.azurecr.io \ --registry-username <registry-username> \ --registry-password <registry-password> \ --user-assigned <managed-identity-resource-id> \ --query properties.configuration.ingress.fqdn \ --env-vars DBHOST="<postgres-server-name>" \ DBNAME="restaurants_reviews" \ DBUSER="my-ua-managed-id" \ RUNNING_IN_PRODUCTION="1" \ AZURE_CLIENT_ID="<managed-identity-client-id>" \ AZURE_SECRET_KEY="<your-secret-key>"
Nezapomeňte nahradit všechny hodnoty v hranatých závorkách hodnotami, které používáte v tomto kurzu. Mějte na paměti, že název vaší aplikace kontejneru musí být jedinečný v rámci Azure.
Hodnota parametru
--env-vars
je řetězec složený z hodnot oddělených mezerami v key="value" formátu s následujícími hodnotami:DBHOST="\<postgres-server-name>"
DBNAME="restaurants_reviews"
DBUSER="my-ua-managed-id"
RUNNING_IN_PRODUCTION="1"
AZURE_CLIENT_ID="\<managed-identity-client-id>"
AZURE_SECRET_KEY="\<your-secret-key>"
Hodnota
DBUSER
je název uživatelem přiřazené spravované identity.Hodnota
AZURE_CLIENT_ID
je ID klienta uživatelsky přiřazené spravované identity. Tuto hodnotu jste získali v předchozím kroku.Hodnota
AZURE_SECRET_KEY
je hodnota tajného klíče, kterou jste vygenerovali v předchozím kroku.Pouze pro Django migrujte a vytvořte schéma databáze. (V ukázkové aplikaci Flask se provádí automaticky a můžete tento krok přeskočit.)
Připojte se pomocí příkazu az containerapp exec:
az containerapp exec \ --name python-container-app \ --resource-group pythoncontainer-rg
Potom na příkazové řádce shellu zadejte
python manage.py migrate
.Pro revize kontejneru nemusíte migrovat.
Otestujte web.
Příkaz
az containerapp create
, který jste zadali dříve, vypíše adresu URL aplikace, kterou můžete použít k procházení aplikace. Adresa URL končíazurecontainerapps.io
. Přejděte na adresu URL v prohlížeči. Alternativně můžete použít příkaz az containerapp browse .
Tady je příklad ukázkového webu po přidání restaurace a dvou recenzí.
Řešení potíží s nasazením
Zapomněli jste adresu URL aplikace pro přístup k webu.
Na webu Azure Portal:
- Přejděte na stránku Přehled aplikace kontejneru a vyhledejte adresu URL aplikace .
V editoru VS Code:
- Přejděte na zobrazení Azure (Ctrl+Shift+A) a rozbalte předplatné, ve kterém právě pracujete.
- Rozbalte uzel Container Apps, rozbalte spravované prostředí, klikněte pravým tlačítkem na python-container-appa poté zvolte Procházet. VS Code otevře prohlížeč s adresou URL aplikace.
V Azure CLI:
- Použijte příkaz
az containerapp show -g pythoncontainer-rg -n python-container-app --query properties.configuration.ingress.fqdn
.
V aplikaci VS Code úloha sestavení image v Azure vrátí chybu.
Pokud se zobrazí zpráva Chyba: Nepodařilo se stáhnout kontext. Zkontrolujte, jestli adresa URL není správná" v okně Výstup VS Code aktualizujte registr v rozšíření Dockeru. Pro obnovení vyberte rozšíření Docker, přejděte do části Registry, najděte registraci a vyberte ji.
Pokud znovu spustíte úlohu Build Image v Azure, zkontrolujte, jestli existuje registr z předchozího spuštění. Pokud ano, použijte ho.
Na webu Azure Portal se během vytváření aplikace kontejneru zobrazí chyba přístupu.
Chyba přístupu obsahující "Nelze získat přístup k ACR '<název>.azurecr.io'" nastane, když jsou zakázány přihlašovací údaje správce na instanci Azure Container Registry.
Pokud chcete zkontrolovat stav administrátora na portálu, přejděte do instance služby Azure Container Registry, vyberte prostředek přístupové klíče a ujistěte se, že je povolený uživatel správce.
Vaše image kontejneru se nezobrazuje v instanci služby Azure Container Registry
- Zkontrolujte výstup příkazu Azure CLI nebo výstupu VS Code a vyhledejte zprávy, které potvrdí úspěch.
- Zkontrolujte, jestli se název registru správně zadal v příkazu sestavení pomocí Azure CLI nebo v výzev k úlohám VS Code.
- Ujistěte se, že nevypršela platnost vašich přihlašovacích údajů. Například ve VS Code vyhledejte cílový registr v rozšíření Dockeru a aktualizujte ho. V Azure CLI spusťte
az login
.
Web vrátí chybný požadavek (400).
Pokud se zobrazí chyba Chybný požadavek (400), zkontrolujte proměnné prostředí PostgreSQL předané do kontejneru. Chyba 400 často značí, že kód Pythonu se nemůže připojit k instanci PostgreSQL.
Vzorový kód použitý v tomto kurzu kontroluje existenci proměnné prostředí kontejneru RUNNING_IN_PRODUCTION
, která se dá nastavit na libovolnou hodnotu (například 1
).
Webová stránka vrátí "Nenalezena (404)"
- Na stránce Přehled kontejneru zkontrolujte hodnotu adresy URL aplikace. Pokud adresa URL aplikace obsahuje slovo "internal," nastavení ingressu není správné.
- Zkontrolujte příchozí přenos dat kontejneru. Například v portálu Azure přejděte k prostředku Ingress kontejneru. Ujistěte se, že je povolen přístup HTTP a je vybráno přijímání provozu odkudkoli.
Webová stránka se nespustí, dostanete časový limit streamu, nebo se nevrátí žádné výsledky.
- Zkontrolujte protokoly:
- V Azure portálu přejděte do prostředku správy revizí kontejnerové aplikace a zkontrolujte, stav zřízení kontejneru:
- Pokud je stav zřizování, vyčkejte, až se zřizování dokončí.
- Pokud je stav Nepodařilo se, vyberte revizi a zobrazte protokoly konzole. Zvolte pořadí sloupců pro zobrazení Čas generování, Stream_sa Log_s. Seřaďte protokoly podle nejnovějších položek a vyhledejte
stderr
Pythonu astdout
zprávy ve sloupci Stream_s. Výstupprint
Pythonu jestdout
zpráv.
- V Azure CLI použijte příkaz az containerapp logs show.
- V Azure portálu přejděte do prostředku správy revizí kontejnerové aplikace a zkontrolujte, stav zřízení kontejneru:
- Pokud používáte architekturu Django, zkontrolujte, jestli v databázi existují restaurants_reviews tabulky. Pokud ne, použijte konzolu pro přístup ke kontejneru a spusťte
python manage.py migrate
.