Een Python-web-app (Django of Flask) implementeren met PostgreSQL in Azure
In deze zelfstudie implementeert u een gegevensgestuurde Python-web-app (Django of Flask) in Azure-app Service met de relationele Database for PostgreSQL-databaseservice van Azure Database for PostgreSQL. Azure-app Service ondersteunt Python in een Linux-serveromgeving.
U hebt het volgende nodig om deze zelfstudie te voltooien:
- Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
- Kennis van Python met Flask-ontwikkeling of Python met Django-ontwikkeling
- Een Azure-account met een actief abonnement. Als u geen Azure-account hebt, kunt u er gratis een maken.
- Azure Developer CLI geïnstalleerd. U kunt de stappen volgen met De Azure Cloud Shell , omdat Azure Developer CLI al is geïnstalleerd.
- Kennis van Python met Flask-ontwikkeling of Python met Django-ontwikkeling
Naar het einde gaan
Als Azure Developer CLI is geïnstalleerd, kunt u een volledig geconfigureerde voorbeeld-app implementeren die in deze zelfstudie wordt weergegeven en kunt u zien dat deze wordt uitgevoerd in Azure. Voer alleen de volgende opdrachten uit in een lege werkmap:
azd auth login
azd init --template msdocs-flask-postgresql-sample-app
azd up
Voorbeeldtoepassing
Voorbeelden van Python-toepassingen die gebruikmaken van het Flask- en Django-framework, helpen u bij het volgen van deze zelfstudie. Als u ze wilt implementeren zonder ze lokaal uit te voeren, slaat u dit deel over.
Als u de toepassing lokaal wilt uitvoeren, controleert u of Python 3.7 of hoger is geïnstalleerd en PostgreSQL lokaal is geïnstalleerd. Kloon vervolgens de vertakking van starter-no-infra
de voorbeeldopslagplaats en ga naar de hoofdmap van de opslagplaats.
git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app
cd msdocs-flask-postgresql-sample-app
Maak een .env-bestand zoals hieronder wordt weergegeven met behulp van het .env.sample-bestand als richtlijn. Stel de waarde in van DBNAME
de naam van een bestaande database in uw lokale PostgreSQL-exemplaar. Stel de waarden van DBHOST
, DBUSER
en DBPASS
indien van toepassing op uw lokale PostgreSQL-exemplaar in.
DBNAME=<database name>
DBHOST=<database-hostname>
DBUSER=<db-user-name>
DBPASS=<db-password>
Maak een virtuele omgeving voor de app:
py -m venv .venv
.venv\scripts\activate
De afhankelijkheden installeren:
pip install -r requirements.txt
Voer de voorbeeldtoepassing uit met de volgende opdrachten:
# Run database migration
flask db upgrade
# Run the app at http://127.0.0.1:5000
flask run
1. App Service en PostgreSQL maken
In deze stap maakt u de Azure-resources. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service en Azure Database for PostgreSQL. Voor het aanmaakproces geeft u het volgende op:
- De naam voor de web-app. Dit is de naam die wordt gebruikt als onderdeel van de DNS-naam voor uw web-app in de vorm van
https://<app-name>.azurewebsites.net
. - De regio om de app fysiek in de wereld uit te voeren.
- De runtimestack voor de app. Hier selecteert u de versie van Python die u voor uw app wilt gebruiken.
- Het hostingabonnement voor de app. Dit is de prijscategorie die de set functies en schaalcapaciteit voor uw app bevat.
- De resourcegroep voor de app. Met een resourcegroep kunt u alle Azure-resources die nodig zijn voor de toepassing groeperen (in een logische container).
Meld u aan bij Azure Portal en volg deze stappen om uw Azure-app Service-resources te maken.
Stap 1: In Azure Portal:
- Voer 'web-app-database' in de zoekbalk boven aan Azure Portal in.
- Selecteer het item met het label Web App + Database onder de kop Marketplace . U kunt ook rechtstreeks naar de wizard voor het maken navigeren.
Stap 2: Vul op de pagina Web-app en database maken het formulier als volgt in.
- Resourcegroep → Nieuwe maken selecteren en een naam van msdocs-python-postgres-tutorial gebruiken.
- Regio → Elke Azure-regio bij u in de buurt.
- Naam → msdocs-python-postgres-XYZ waarbij XYZ uit drie willekeurige tekens bestaat. Deze naam moet uniek zijn binnen Azure.
- Runtimestack → Python 3.10.
- Database → PostgreSQL - Flexible Server is standaard geselecteerd als de database-engine. De servernaam en databasenaam worden ook standaard ingesteld op de juiste waarden.
- Hostingabonnement → Basic. Wanneer u klaar bent, kunt u later omhoog schalen naar een prijscategorie voor productie.
- Selecteer Controleren + maken.
- Nadat de validatie is voltooid, selecteert u Maken.
Stap 3: Het duurt enkele minuten voordat de implementatie is voltooid. Zodra de implementatie is voltooid, selecteert u de knop Ga naar resource . U wordt rechtstreeks naar de App Service-app gebracht, maar de volgende resources worden gemaakt:
- Resourcegroep → De container voor alle gemaakte resources.
- App Service-plan → Definieert de rekenresources voor App Service. Er wordt een Linux-plan in de Basic-laag gemaakt.
- App Service → Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
- Virtueel netwerk → geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
- Flexibele Azure Database for PostgreSQL-server → alleen toegankelijk vanuit het virtuele netwerk. Er worden een database en een gebruiker voor u gemaakt op de server.
- Privé-DNS zone → Dns-omzetting van de PostgreSQL-server in het virtuele netwerk inschakelen.
2. Verbindingsinstellingen controleren
De wizard Voor het maken zijn de connectiviteitsvariabelen voor u gegenereerd, al als app-instellingen. App-instellingen zijn een manier om verbindingsgeheimen uit uw codeopslagplaats te houden. Wanneer u klaar bent om uw geheimen te verplaatsen naar een veiligere locatie, vindt u hier een artikel over het opslaan in Azure Key Vault.
Stap 1: Selecteer Configuratie in het linkermenu op de pagina App Service.
Stap 2: Controleer of dit AZURE_POSTGRESQL_CONNECTIONSTRING
aanwezig is op het tabblad Toepassingsinstellingen van de pagina Configuratie. Dit wordt als omgevingsvariabele in de runtime-omgeving geïnjecteerd.
Stap 3: Voer in een terminal- of opdrachtprompt het volgende Python-script uit om een uniek geheim te genereren: python -c 'import secrets; print(secrets.token_hex())'
Kopieer de uitvoerwaarde die u in de volgende stap wilt gebruiken.
3. Voorbeeldcode implementeren
In deze stap configureert u gitHub-implementatie met behulp van GitHub Actions. Het is slechts een van de vele manieren om te implementeren in App Service, maar ook een uitstekende manier om continue integratie in uw implementatieproces te hebben. Standaard wordt met elke git push
gitHub-opslagplaats de build- en implementatieactie gestart.
Stap 1: In een nieuw browservenster:
- Meld u aan bij uw GitHub-account.
- Navigeer naar https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app.
- Selecteer Vorken.
- Selecteer Een fork maken.
Stap 2: Open Visual Studio Code op de GitHub-pagina in de browser door op de .
toets te drukken.
Stap 3: Open in Visual Studio Code in de browser azureproject/production.py in de verkenner. Bekijk de omgevingsvariabelen die worden gebruikt in de productieomgeving, inclusief de app-instellingen die u op de configuratiepagina hebt gezien.
Stap 4: Ga terug naar de pagina App Service en selecteer in het linkermenu Implementatiecentrum.
Stap 5: Op de pagina Implementatiecentrum:
- Selecteer GitHub in Bron. GitHub Actions is standaard geselecteerd als buildprovider.
- Meld u aan bij uw GitHub-account en volg de prompt om Azure te autoriseren.
- Selecteer uw account in Organisatie.
- Selecteer in Opslagplaats msdocs-flask-postgresql-sample-app.
- Selecteer in Vertakking de hoofdmap.
- Laat de standaardoptie geselecteerd om een werkstroom toe te voegen.
- Selecteer onder Verificatietype de door de gebruiker toegewezen identiteit.
- Selecteer Opslaan in het bovenste menu. App Service voert een werkstroombestand door in de gekozen GitHub-opslagplaats in de
.github/workflows
map.
Stap 6: Op de pagina Implementatiecentrum:
- Selecteer Logboeken. Er is al een implementatieuitvoering gestart.
- Selecteer build-/deploy-logboeken in het logboekitem voor de implementatieuitvoering.
Stap 7: U gaat naar uw GitHub-opslagplaats en ziet dat de GitHub-actie wordt uitgevoerd. Het werkstroombestand definieert twee afzonderlijke fasen, bouwen en implementeren. Wacht totdat de GitHub-uitvoering de status Voltooid weergeeft. Het duurt ongeveer 5 minuten.
Ondervindt u problemen? Raadpleeg de gids voor probleemoplossing.
4. Databaseschema genereren
Met de PostgreSQL-database die wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om Flask-databasemigraties uit te voeren in een SSH-sessie met de App Service-container.
Stap 1: Terug op de App Service-pagina, in het linkermenu,
- Selecteer SSH.
- Selecteer Go.
Stap 2: Voer flask db upgrade
in de SSH-terminal uit. Als dit lukt, maakt App Service verbinding met de database.
Alleen wijzigingen in bestanden in /home
kunnen zich blijven voordoen na het opnieuw opstarten van de app. Wijzigingen buiten /home
zijn niet behouden.
5. Blader naar de app
Stap 1: Op de App Service-pagina:
- Selecteer Overzicht in het linkermenu.
- Selecteer de URL van uw app. U kunt ook rechtstreeks naar
https://<app-name>.azurewebsites.net
.
Stap 2: Voeg een paar restaurants toe aan de lijst. Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure Database for PostgreSQL.
6. Diagnostische logboeken streamen
Azure-app Service legt alle berichtenuitvoer vast in de console om u te helpen bij het vaststellen van problemen met uw toepassing. De voorbeeld-app bevat print()
instructies om deze mogelijkheid te demonstreren, zoals hieronder wordt weergegeven.
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
Stap 1: Op de App Service-pagina:
- Selecteer App Service-logboeken in het linkermenu.
- Selecteer Bestandssysteem onder Toepassingslogboek.
- Selecteer Opslaan in het bovenste menu.
Stap 2: Selecteer in het menu links de optie Logboekstream. U ziet de logboeken voor uw app, inclusief platformlogboeken en logboeken vanuit de container.
Meer informatie over logboekregistratie in Python-apps in de reeks over het instellen van Azure Monitor voor uw Python-toepassing.
7. Resources opschonen
Wanneer u klaar bent, kunt u alle resources uit uw Azure-abonnement verwijderen door de resourcegroep te verwijderen.
Stap 1: In de zoekbalk boven aan Azure Portal:
- Voer de naam van de resourcegroup in.
- Selecteer de resourcegroep.
Stap 2: Selecteer op de pagina Resourcegroep verwijderen.
Stap 3:
- Voer de naam van de resourcegroep in om uw verwijdering te bevestigen.
- Selecteer Verwijderen.
1. Azure-resources maken en een voorbeeld-app implementeren
In deze stap maakt u de Azure-resources en implementeert u een voorbeeld-app in App Service op Linux. Met de stappen die in deze zelfstudie worden gebruikt, maakt u een set beveiligde standaardbronnen met App Service en Azure Database for PostgreSQL.
Als u dat nog niet hebt gedaan, kloont u de vertakking van
starter-no-infra
de voorbeeldopslagplaats in een lokale terminal.git clone -b starter-no-infra https://github.com/Azure-Samples/msdocs-flask-postgresql-sample-app cd msdocs-flask-postgresql-sample-app
Deze gekloonde vertakking is het uitgangspunt. Het bevat een eenvoudige Flask-toepassing voor gegevensstations.
Voer vanuit de hoofdmap van de opslagplaats de opdracht uit
azd init
.azd init --template python-app-service-postgresql-infra
Geef de volgende antwoorden wanneer u hierom wordt gevraagd:
Vraag Antwoord De huidige map is niet leeg. Wilt u hier een project initialiseren in '<your-directory>'? Y Wat wilt u doen met deze bestanden? Mijn bestaande bestanden ongewijzigd houden Voer een nieuwe omgevingsnaam in Typ een unieke naam. De azd-sjabloon gebruikt deze naam als onderdeel van de DNS-naam van uw web-app in Azure ( <app-name>.azurewebsites.net
). Alfanumerieke tekens en afbreekstreepjes zijn toegestaan.Voer de
azd up
opdracht uit om de benodigde Azure-resources in te richten en de app-code te implementeren. Als u nog niet bent aangemeld bij Azure, wordt de browser gestart en wordt u gevraagd u aan te melden. Met deazd up
opdracht wordt u ook gevraagd om het gewenste abonnement en de gewenste locatie te selecteren waarop u wilt implementeren.azd up
Het kan enkele minuten duren voordat de
azd up
opdracht is voltooid. Uw toepassingscode wordt ook gecompileerd en geïmplementeerd, maar u wijzigt de code later om met App Service te werken. Terwijl deze wordt uitgevoerd, bevat de opdracht berichten over het inrichtings- en implementatieproces, inclusief een koppeling naar de implementatie in Azure. Wanneer deze is voltooid, wordt met de opdracht ook een koppeling naar de implementatietoepassing weergegeven.Deze azd-sjabloon bevat bestanden (azure.yaml en de inframap ) die een standaardarchitectuur met de volgende Azure-resources genereren:
- Resourcegroep → De container voor alle gemaakte resources.
- App Service-plan → Definieert de rekenresources voor App Service. Er wordt een Linux-plan in de B1-laag opgegeven.
- App Service → Vertegenwoordigt uw app en wordt uitgevoerd in het App Service-plan.
- Virtueel netwerk → geïntegreerd met de App Service-app en isoleert back-endnetwerkverkeer.
- Flexibele Azure Database for PostgreSQL-server → alleen toegankelijk vanuit het virtuele netwerk. Er worden een database en een gebruiker voor u gemaakt op de server.
- Privé-DNS zone → Dns-omzetting van de PostgreSQL-server in het virtuele netwerk inschakelen.
- Log Analytics-werkruimte → fungeert als de doelcontainer voor uw app voor het verzenden van de logboeken, waar u ook query's kunt uitvoeren op de logboeken.
2. Gebruik de database verbindingsreeks
De azd-sjabloon die u gebruikt, heeft de connectiviteitsvariabelen voor u al gegenereerd als app-instellingen en voert deze voor uw gemak uit naar de terminal. App-instellingen zijn een manier om verbindingsgeheimen uit uw codeopslagplaats te houden.
Zoek in de azd-uitvoer de app-instellingen en zoek de instellingen
AZURE_POSTGRESQL_CONNECTIONSTRING
enAZURE_REDIS_CONNECTIONSTRING
. Als u geheimen veilig wilt houden, worden alleen de naam van de instelling weergegeven. Ze zien er als volgt uit in de azd-uitvoer:App Service app has the following settings: - AZURE_POSTGRESQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - FLASK_DEBUG - SCM_DO_BUILD_DURING_DEPLOYMENT - SECRET_KEY
AZURE_POSTGRESQL_CONNECTIONSTRING
bevat de verbindingsreeks naar de Postgres-database in Azure enAZURE_REDIS_CONNECTIONSTRING
bevat de verbindingsreeks naar de Redis-cache in Azure. U moet deze code gebruiken om er verbinding mee te maken. Open azureproject/production.py, verwijder opmerkingen bij de volgende regels en sla het bestand op:conn_str = os.environ['AZURE_POSTGRESQL_CONNECTIONSTRING'] conn_str_params = {pair.split('=')[0]: pair.split('=')[1] for pair in conn_str.split(' ')} DATABASE_URI = 'postgresql+psycopg2://{dbuser}:{dbpass}@{dbhost}/{dbname}'.format( dbuser=conn_str_params['user'], dbpass=conn_str_params['password'], dbhost=conn_str_params['host'], dbname=conn_str_params['dbname'] )
Uw toepassingscode is nu geconfigureerd om verbinding te maken met de PostgreSQL-database in Azure. Als u wilt, opent
app.py
u de omgevingsvariabele en bekijkt u hoe deDATABASE_URI
omgevingsvariabele wordt gebruikt.Voer
azd deploy
uit in de terminal.azd deploy
4. Databaseschema genereren
Met de PostgreSQL-database die wordt beveiligd door het virtuele netwerk, is de eenvoudigste manier om Flask-databasemigraties uit te voeren in een SSH-sessie met de App Service-container.
Zoek in de azd-uitvoer de URL voor de SSH-sessie en navigeer ernaar in de browser. Dit ziet er als volgt uit in de uitvoer:
Open SSH session to App Service container at: https://<app-name>.scm.azurewebsites.net/webssh/host
Voer in de SSH-terminal de opdracht uit
flask db upgrade
. Als dit lukt, maakt App Service verbinding met de database.Notitie
Alleen wijzigingen in bestanden in
/home
kunnen zich blijven voordoen na het opnieuw opstarten van de app. Wijzigingen buiten/home
zijn niet behouden.
5. Blader naar de app
Zoek in de azd-uitvoer de URL van uw app en navigeer ernaar in de browser. De URL ziet er als volgt uit in de AZD-uitvoer:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>.azurewebsites.net/
Voeg enkele restaurants toe aan de lijst.
Gefeliciteerd, u voert een web-app uit in Azure-app Service, met beveiligde connectiviteit met Azure Database for PostgreSQL.
6. Diagnostische logboeken streamen
Azure-app Service kan consolelogboeken vastleggen om u te helpen bij het vaststellen van problemen met uw toepassing. Voor het gemak heeft de azd-sjabloon logboekregistratie al ingeschakeld voor het lokale bestandssysteem en deze naar een Log Analytics-werkruimte verzonden.
De voorbeeld-app bevat print()
instructies om deze mogelijkheid te demonstreren, zoals wordt weergegeven in het volgende fragment.
@app.route('/', methods=['GET'])
def index():
print('Request for index page received')
restaurants = Restaurant.query.all()
return render_template('index.html', restaurants=restaurants)
Zoek in de azd-uitvoer de koppeling om App Service-logboeken te streamen en navigeer ernaar in de browser. De koppeling ziet er als volgt uit in de azd-uitvoer:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Meer informatie over logboekregistratie in Python-apps in de reeks over het instellen van Azure Monitor voor uw Python-toepassing.
7. Resources opschonen
Als u alle Azure-resources in de huidige implementatieomgeving wilt verwijderen, voert u uit azd down
.
azd down
Probleemoplossing
Hieronder vindt u problemen die kunnen optreden tijdens het uitvoeren van deze zelfstudie en stappen om deze op te lossen.
Ik kan geen verbinding maken met de SSH-sessie
Als u geen verbinding kunt maken met de SSH-sessie, kan de app zelf niet worden gestart. Controleer de diagnostische logboeken op details. Als u bijvoorbeeld een fout ziet zoals KeyError: 'AZURE_POSTGRESQL_CONNECTIONSTRING'
, kan dit betekenen dat de omgevingsvariabele ontbreekt (mogelijk hebt u de app-instelling verwijderd).
Er treedt een fout op bij het uitvoeren van databasemigraties
Als er fouten optreden met betrekking tot het maken van verbinding met de database, controleert u of de app-instellingen (AZURE_POSTGRESQL_CONNECTIONSTRING
) zijn gewijzigd. Zonder dat verbindingsreeks kan de migratieopdracht niet communiceren met de database.
Veelgestelde vragen
- Hoeveel kost dit instellen?
- Hoe kan ik verbinding maken met de PostgreSQL-server die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?
- Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?
- Hoe wordt het Django-voorbeeld geconfigureerd voor uitvoering op Azure-app Service?
Hoeveel kost dit instellen?
De prijzen voor de gemaakte resources zijn als volgt:
- Het App Service-plan wordt gemaakt in de Basic-laag en kan omhoog of omlaag worden geschaald. Zie Prijzen voor App Service.
- De flexibele PostgreSQL-server wordt gemaakt in de laagste burstable-laag Standard_B1ms, met de minimale opslaggrootte, die omhoog of omlaag kan worden geschaald. Zie de prijzen voor Azure Database for PostgreSQL.
- Voor het virtuele netwerk worden geen kosten in rekening gebracht, tenzij u extra functionaliteit configureert, zoals peering. Zie prijzen voor Azure Virtual Network.
- Voor de privé-DNS-zone worden kleine kosten in rekening gebracht. Zie prijzen voor Azure DNS.
Hoe kan ik verbinding maken met de PostgreSQL-server die is beveiligd achter het virtuele netwerk met andere hulpprogramma's?
- Voor basistoegang vanuit een opdrachtregelprogramma kunt u uitvoeren
psql
vanuit de SSH-terminal van de app. - Als u verbinding wilt maken vanuit een bureaubladhulpprogramma, moet uw machine zich in het virtuele netwerk bevinden. Het kan bijvoorbeeld een Virtuele Azure-machine zijn die is verbonden met een van de subnetten of een machine in een on-premises netwerk met een site-naar-site-VPN-verbinding met het virtuele Azure-netwerk.
- U kunt Azure Cloud Shell ook integreren met het virtuele netwerk.
Hoe werkt het ontwikkelen van lokale apps met GitHub Actions?
Met behulp van het automatisch gegenereerde werkstroombestand van App Service als voorbeeld wordt een git push
nieuwe build- en implementatieuitvoering gestart. Vanuit een lokale kloon van de GitHub-opslagplaats maakt u de gewenste updates en pusht u naar GitHub. Voorbeeld:
git add .
git commit -m "<some-message>"
git push origin main
Hoe wordt het Django-voorbeeld geconfigureerd voor uitvoering op Azure-app Service?
Notitie
Als u deze zelfstudie samen met uw eigen app volgt, bekijkt u de beschrijving van het requirements.txt bestand in het README.md-bestand van elk project (Flask, Django) om te zien welke pakketten u nodig hebt.
De Django-voorbeeldtoepassing configureert instellingen in het bestand azureproject/production.py, zodat deze kan worden uitgevoerd in Azure-app Service. Deze wijzigingen zijn gebruikelijk voor het implementeren van Django in productie en niet specifiek voor App Service.
Django valideert de HTTP_HOST header in binnenkomende aanvragen. De voorbeeldcode maakt gebruik van de
WEBSITE_HOSTNAME
omgevingsvariabele in App Service om de domeinnaam van de app toe te voegen aan de ALLOWED_HOSTS-instelling van Django.# Configure the domain name using the environment variable # that Azure automatically creates for us. ALLOWED_HOSTS = [os.environ['WEBSITE_HOSTNAME']] if 'WEBSITE_HOSTNAME' in os.environ else []
Django biedt geen ondersteuning voor het leveren van statische bestanden in productie. Voor deze zelfstudie gebruikt u WhiteNoise om de bestanden te leveren. Het WhiteNoise-pakket is al geïnstalleerd met requirements.txt en de middleware wordt toegevoegd aan de lijst.
# WhiteNoise configuration MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # Add whitenoise middleware after the security middleware 'whitenoise.middleware.WhiteNoiseMiddleware',
Vervolgens worden de instellingen voor het statische bestand geconfigureerd volgens de Django-documentatie.
SESSION_ENGINE = "django.contrib.sessions.backends.cache" STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
Zie Productie-instellingen voor Django-apps voor meer informatie.
Volgende stappen
Ga naar de volgende zelfstudie voor meer informatie over het beveiligen van uw app met een aangepast domein en certificaat.
Ontdek hoe App Service een Python-app uitvoert: