Déployer des applications Web Python 3.6 / Django / Postgres sur Azure

J'ai essayé de déployer une application Django en utilisant PostgreSQL sur l'App Service de Microsoft Azure, mais j'ai eu beaucoup de problèmes, je vais donc l'écrire.

Notions de base

Ce que j'ai trouvé

J'ai découvert grâce à divers essais et erreurs avec le document.

Il est naturel que l'OS soit Windows parce que c'est Microsoft, mais il est facile d'oublier le fait que Linux est une personne qui a grandi dans le monde du bon sens.

Documentation officielle

Documentation Azure Web Apps

Quand j'ai cherché la page sur Python dans le menu, j'ai trouvé les quatre suivantes.

Je pense qu'il est préférable d'essayer d'abord 1, puis de voir 4. 2 est un tutoriel, mais soyez prudent car il s'agit d'une utilisation particulière du déploiement avec une image Docker sur la version préliminaire de Linux. Vous n'avez pas besoin de regarder 3 si vous n'utilisez pas Visual Studio.

1. Démarrage rapide> Créer une application Python

** Créer une application Web Python sur Azure **

--Procédures de déploiement d'une application simple à l'aide de Flask.

2. Tutoriels> 1 --Python et PostgreSQL

** [Création d'applications Docker Python et PostgreSQL sur Azure](https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-tutorial-docker-python-postgresql -app) **

3. Guide pratique> Développement d'applications> Python> Application Django utilisant MySQL

** [Django et MySQL sur Azure avec Python Tools 2.2 pour Visual Studio](https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-python-ptvs- django-mysql) **

4. Guide pratique> Développement d'applications> Configuration d'exécution> Python

** Configuration de Python avec les applications Web Azure App Service **

Déployer des applications Web Python3.6 / Django / PostgreSQL

J'ai pu déployer avec la procédure suivante avec les informations du document officiel + α.

  1. Créez une application Django localement --Créer une base de données PostgreSQL sur Azure --Créer un service d'application sur Azure --Installez Python 3.6 en tant qu'extension sur App Service --Créer un fichier de déploiement --Déployer l'application Django

1. Créez une application Django localement

Je crée généralement une application Django. Les paramètres suivants sont requis lors du déploiement.

settings.py


DEBUG = False
ALLOW_HOST = ['*']
STATIC_ROOT = 'static'

2. Créez une base de données PostgreSQL sur Azure

Création d'applications Docker Python et PostgreSQL sur Azure, Créez une base de données PostgreSQL dans Azure en vous référant à «Création d'une base de données PostgreSQL opérationnelle».

AZ_GROUP="<resource_group>"
AZ_LOCATION="japanwest"
AZ_PG="<postgresql_name>"
AZ_PG_USER="<admin_username>"
AZ_PG_PASS="<admin_password>"

az postgres server create -g $AZ_GROUP -n $AZ_PG -l $AZ_LOCATION -u $AZ_PG_USER -p $AZ_PG_PASS
az postgres server firewall-rule create -g $AZ_GROUP --server-name $AZ_PG --start-ip-address=0.0.0.0 --end-ip-address=255.255.255.255 --name AllowAllIPs

Créez une base de données et un utilisateur.

$ psql -h ${AZ_PG}.postgres.database.azure.com -U ${AZ_PG_USER}@${AZ_PG} postgres

python


CREATE DATABASE <database_name>;
CREATE USER <user> WITH PASSWORD '<password>';
GRANT ALL PRIVILEGES ON DATABASE <database_name> TO <user>;

3. Créez un service d'application sur Azure

Reportez-vous à Créer une application Web Python dans Azure et suivez les étapes ci-dessous. Exécutez la commande.

AZ_GROUP="<resource_group>"
AZ_LOCATION="japanwest"
AZ_APPSERVICE_PLAN="<plan_name>"
AZ_APPSERVICE_PLAN_TYPE="Free"
AZ_APP_NAME="<app_name>"

az group create -n $AZ_GROUP -l $AZ_LOCATION
az appservice plan create -n $AZ_APPSERVICE_PLAN -g $AZ_GROUP --sku $AZ_APPSERVICE_PLAN_TYPE
az webapp create -n $AZ_APP_NAME -g $AZ_GROUP --plan $AZ_APPSERVICE_PLAN --deployment-local-git

4. Installez Python 3.6 en tant qu'extension sur App Service

Upgrading Python on Azure App Service – Python Engineering at Microsoft

Sélectionnez le service d'application que vous avez créé à partir de l'écran du portail Azure> Sélectionnez les extensions> Sélectionnez la version Python que vous souhaitez installer et installez-la.

5. Créez un fichier pour le déploiement

Créez le fichier suivant.

requirements.txt


Django
psycopg2

.deployment


[config]
command = deploy.cmd

deploy.cmd copie celui par défaut et modifie le chemin de python.exe et pip selon la version.

deploy.cmd


@if "%SCM_TRACE_LEVEL%" NEQ "4" @echo off

:: ----------------------
:: KUDU Deployment Script
:: Version: 1.0.15
:: ----------------------

SET PYTHON_HOME=D:\home\python361x86
SET PYTHON=%PYTHON_HOME%\python.exe
SET PIP=%PYTHON% -m pip

:: Prerequisites
:: -------------

:: Verify node.js installed
where node 2>nul >nul
IF %ERRORLEVEL% NEQ 0 (
  echo Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment.
  goto error
)

:: Setup
:: -----

setlocal enabledelayedexpansion

SET ARTIFACTS=%~dp0%..\artifacts

IF NOT DEFINED DEPLOYMENT_SOURCE (
  SET DEPLOYMENT_SOURCE=%~dp0%.
)

IF NOT DEFINED DEPLOYMENT_TARGET (
  SET DEPLOYMENT_TARGET=%ARTIFACTS%\wwwroot
)

IF NOT DEFINED NEXT_MANIFEST_PATH (
  SET NEXT_MANIFEST_PATH=%ARTIFACTS%\manifest

  IF NOT DEFINED PREVIOUS_MANIFEST_PATH (
    SET PREVIOUS_MANIFEST_PATH=%ARTIFACTS%\manifest
  )
)

IF NOT DEFINED KUDU_SYNC_CMD (
  :: Install kudu sync
  echo Installing Kudu Sync
  call npm install kudusync -g --silent
  IF !ERRORLEVEL! NEQ 0 goto error

  :: Locally just running "kuduSync" would also work
  SET KUDU_SYNC_CMD=%appdata%\npm\kuduSync.cmd
)
goto Deployment

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Deployment
:: ----------

:Deployment
echo Handling python deployment.

:: 1. KuduSync
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
  call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd"
  IF !ERRORLEVEL! NEQ 0 goto error
)

IF NOT EXIST "%DEPLOYMENT_TARGET%\requirements.txt" goto postPython

pushd "%DEPLOYMENT_TARGET%"

:: 4. Install packages
echo Pip install requirements.

%PIP% install -r requirements.txt
IF !ERRORLEVEL! NEQ 0 goto error

REM Add additional package installation here
REM -- Example --
REM env\scripts\easy_install pytz
REM IF !ERRORLEVEL! NEQ 0 goto error

:: 5. Copy web.config
IF EXIST "%DEPLOYMENT_SOURCE%\web.%PYTHON_VER%.config" (
  echo Overwriting web.config with web.%PYTHON_VER%.config
  copy /y "%DEPLOYMENT_SOURCE%\web.%PYTHON_VER%.config" "%DEPLOYMENT_TARGET%\web.config"
)

:: 6. Django collectstatic
IF EXIST "%DEPLOYMENT_TARGET%\manage.py" (
  echo Collecting Django static files. You can skip Django specific steps with a .skipDjango file.
  IF NOT EXIST "%DEPLOYMENT_TARGET%\static" (
    MKDIR "%DEPLOYMENT_TARGET%\static"
  )
  %PYTHON% manage.py collectstatic --noinput --clear
)

popd

:postPython

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
goto end

:: Execute command routine that will echo out when error
:ExecuteCmd
setlocal
set _CMD_=%*
call %_CMD_%
if "%ERRORLEVEL%" NEQ "0" echo Failed exitCode=%ERRORLEVEL%, command=%_CMD_%
exit /b %ERRORLEVEL%

:error
endlocal
echo An error has occurred during web site deployment.
call :exitSetErrorLevel
call :exitFromFunction 2>nul

:exitSetErrorLevel
exit /b 1

:exitFromFunction
()

:end
endlocal
echo Finished successfully.

web.config


<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
    <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
    <add key="WSGI_LOG" value="D:\home\LogFiles\wfastcgi.log" />
    <add key="DJANGO_SETTINGS_MODULE" value="project.settings" />
  </appSettings>
  <system.webServer>
    <handlers>
      <remove name="Python27_via_FastCGI" />
      <remove name="Python34_via_FastCGI" />
      <add name="Python FastCGI"
           path="handler.fcgi"
           verb="*"
           modules="FastCgiModule"
           scriptProcessor="D:\home\python361x86\python.exe|D:\home\python361x86\wfastcgi.py"
           resourceType="Unspecified"
           requireAccess="Script" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="Static Files" stopProcessing="true">
          <conditions>
            <add input="true" pattern="false" />
          </conditions>
        </rule>
        <rule name="Configure Python" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{REQUEST_URI}" pattern="^/static/.*" ignoreCase="true" negate="true" />
          </conditions>
          <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Veuillez changer la partie de DJANGO_SETTINGS_MODULE selon le projet Django.

6. Déployez l'application Django

AZ_USER="<user>"
AZ_PASS="<password>"
az webapp deployment user set --user-name $AZ_USER --password $AZ_PASS
git remote add azure <git_url>
git push azure master

L'URL git sera affichée lorsque vous "une webapp create". Vous pouvez également consulter la présentation d'App Service sur le portail.

ブラウザで<app_name>.azurewebsites.net/adminにアクセスしてadminのログイン画面が表示されれば完了です。

Impressions

Il a été assez influencé par la structure de la documentation officielle. J'étais confus parce que la partie du tutoriel expliquait d'une manière complètement différente. .. ..

Recommended Posts

Déployer des applications Web Python 3.6 / Django / Postgres sur Azure
Déployer l'application Django sur Google App Engine (Python3)
Déployer l'application Django créée avec PTVS sur Azure
Implémenter l'application Django sur Hy
Exemple pour mettre l'application Web Python Flask sur Azure App Service (Web App)
(Échec) Déployer une application Web créée avec Flask avec heroku
Déployer l'application Django sur Heroku [Partie 2]
Déployer l'application Django sur Heroku [Partie 1]
Création et déploiement d'applications Django (PTVS) à l'aide du stockage Azure Table
Démonisez une application Web Python avec Supervisor
Comment déployer une application Django sur heroku en seulement 5 minutes
Gagnez l'application Web Python + Flask avec Jenkins
Framework Web Django Python
Retour sur la création d'un service Web avec Django 1
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django-Partie 7-
(Python) Essayez de développer une application Web en utilisant Django
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 1-
Comment déployer une application Django dans le cloud Alibaba
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 2
[Débutant] [Python / Django] Un ingénieur web débutant a essayé un didacticiel Django - Partie 0-
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un tutoriel Django - Partie 5
Comment créer un environnement Django (python) sur Docker
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un tutoriel Django - Partie 6
Étapes de l'installation de Python 3 à la création d'une application Django
Retour sur la création d'un service Web avec Django 2
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 4
Comment utiliser Django avec Google App Engine / Python
Écrire du code dans UnitTest une application Web Python
[Débutant] [Python / Django] Un ingénieur Web débutant a essayé un didacticiel Django - Partie 3
Déployez des applications Web en temps réel avec Swampdragon x Apache
Déployer une application Web créée avec Streamlit sur Heroku
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Expérience sur la page d'administration)
Déployer l'application Masonite sur Heroku 2020
Déployer l'application Django sur EC2 avec Nginx + Gunicorn + Supervisor
Construire un environnement Python sur Mac
Construire un environnement Python sur Ubuntu
[Python / Django] Créer une API Web qui répond au format JSON
Créer un environnement Python sur Mac (2017/4)
# 3 Créez un environnement Python (Django) avec une instance EC2 (ubuntu18.04) d'AWS part2
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Page de création de décalage)
Déployer l'application Django avec Docker
Déployer l'application Django sur Heroku
python + django + scikit-learn + mecab (1) avec heroku
python + django + scikit-learn + mecab (2) avec heroku
Déployer l'application Flask sur heroku (amer)
Créer un environnement python dans centos
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Créer une application Web avec Django
Déployez l'application Flask sur Heroku
Créez une application de scraping avec Python + Django + AWS et modifiez les tâches
Comment déployer une application Web sur Alibaba Cloud en tant que pigiste
Déployez l'application Flask sur heroku
Lancement d'une application Web sur AWS avec django et modification des tâches
Créer un environnement python3 sur CentOS7
Jusqu'à ce que vous déployez un projet SpringBoot dans Gradle avec App Engine Flexible
Pratique de développement d'applications Web: Créez une page de création d'équipe avec Django! (Introduction)
Créez une application Django sur Docker et déployez-la sur AWS Fargate
Jusqu'à ce que l'application Web créée avec Bottle soit publiée (déployée) sur Heroku