Stellen Sie Python 3.6 / Django / Postgres-Webanwendungen in Azure bereit

Ich habe versucht, eine Django-App mit PostgreSQL für den App-Dienst von Microsoft Azure bereitzustellen, aber ich hatte große Probleme, daher werde ich sie aufschreiben.

Grundwissen

Was ich fand

Ich habe durch verschiedene Versuche und Irrtümer mit dem Dokument herausgefunden.

--App Service OS ist standardmäßig Windows

Es ist natürlich, dass das Betriebssystem Windows ist, weil es Microsoft ist, aber es ist leicht zu übersehen, dass Linux eine Person ist, die in der Welt des gesunden Menschenverstandes aufgewachsen ist.

Offizielle Dokumentation

Azure Web Apps-Dokumentation

Als ich die Seite über Python im Menü durchsuchte, fand ich die folgenden vier.

Ich denke, es ist am besten, zuerst 1 zu versuchen und dann 4 zu sehen. 2 ist ein Tutorial, aber seien Sie vorsichtig, da es sich um eine spezielle Verwendung der Bereitstellung mit einem Docker-Image in der Vorschau-Version von Linux handelt. Sie müssen sich 3 nicht ansehen, wenn Sie Visual Studio nicht verwenden.

1. Schnellstart> Python-App erstellen

** Erstellen einer Python-Webanwendung in Azure **

--Verfahren zum Bereitstellen einer einfachen App mit Flask.

2. Tutorials> 1 - Python und PostgreSQL

** [Erstellen von Docker Python- und PostgreSQL-Apps auf Azure](https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-tutorial-docker-python-postgresql -app) **

3. Anleitung> App-Entwicklung> Python> Django-App mit MySQL

** [Django und MySQL unter Azure mit Python Tools 2.2 für Visual Studio](https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-python-ptvs- django-mysql) **

4. Anleitung> App-Entwicklung> Laufzeitkonfiguration> Python

** Konfigurieren von Python mit Azure App Service-Webanwendungen **

Stellen Sie Python3.6 / Django / PostgreSQL-Webanwendungen bereit

Ich konnte mit dem folgenden Verfahren mit den Informationen des offiziellen Dokuments + α bereitstellen.

  1. Erstellen Sie lokal eine Django-App --Erstellen Sie eine PostgreSQL-Datenbank in Azure --Erstellen Sie einen App-Dienst in Azure

1. Erstellen Sie lokal eine Django-App

Normalerweise mache ich eine Django App. Die folgenden Einstellungen sind bei der Bereitstellung erforderlich.

settings.py


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

2. Erstellen Sie eine PostgreSQL-Datenbank in Azure

Erstellen von Docker Python- und PostgreSQL-Apps auf Azure, Erstellen Sie eine PostgreSQL-Datenbank in Azure unter "Erstellen einer betriebsbereiten PostgreSQL-Datenbank".

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

Erstellen Sie eine Datenbank und einen Benutzer.

$ 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. Erstellen Sie einen App-Dienst in Azure

Weitere Informationen finden Sie unter Erstellen einer Python-Webanwendung in Azure und im Folgenden Führen Sie den Befehl aus.

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. Installieren Sie Python 3.6 als Erweiterung im App Service

Upgrading Python on Azure App Service – Python Engineering at Microsoft

Wählen Sie den von Ihnen erstellten App-Dienst im Azure Portal-Bildschirm aus.> Erweiterungen auswählen> Wählen Sie die Python-Version aus, die Sie installieren möchten, und installieren Sie sie.

5. Erstellen Sie eine Datei für die Bereitstellung

Erstellen Sie die folgende Datei.

requirements.txt


Django
psycopg2

.deployment


[config]
command = deploy.cmd

deploy.cmd kopiert die Standardversion und ändert den Pfad von python.exe und pip entsprechend der 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>

Bitte ändern Sie den Teil von DJANGO_SETTINGS_MODULE entsprechend dem Django-Projekt.

6. Stellen Sie die Django-App bereit

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

Die Git-URL wird angezeigt, wenn Sie eine Web-App erstellen. Sie können die App Service-Übersicht auch im Portal anzeigen.

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

Impressionen

Es war wegen der Struktur der offiziellen Dokumentation ziemlich schwankend. Ich war verwirrt, weil der Tutorial-Teil einen ganz anderen Weg erklärte. .. ..

Recommended Posts

Stellen Sie Python 3.6 / Django / Postgres-Webanwendungen in Azure bereit
Stellen Sie die Django-Anwendung in Google App Engine (Python3) bereit.
Stellen Sie die mit PTVS erstellte Django-App in Azure bereit
Implementieren Sie die Django-App auf Hy
Beispiel zum Einfügen der Python Flask-Webanwendung in den Azure App Service (Webanwendung)
(Fehler) Stellen Sie eine mit Flask mit Heroku erstellte Web-App bereit
Stellen Sie die Django-App in Heroku bereit [Teil 2]
Stellen Sie die Django-App in Heroku bereit [Teil 1]
Erstellen und Bereitstellen von Django-Apps (PTVS) mithilfe des Azure Table-Speichers
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
So stellen Sie eine Django-App in nur 5 Minuten für Heroku bereit
Gewinnen Sie die Python + Flask-Web-App mit Jenkins
Django Python Web Framework
Rückblick auf die Erstellung eines Webdienstes mit Django 1
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 7-
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 1-
So stellen Sie eine Django-Anwendung in der Alibaba-Cloud bereit
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 2-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 0-
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 5-
So erstellen Sie eine Django (Python) -Umgebung auf Docker
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 6-
Schritte von der Installation von Python 3 bis zur Erstellung einer Django-App
Rückblick auf die Erstellung eines Webdienstes mit Django 2
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 4-
Verwendung von Django mit Google App Engine / Python
Schreiben Sie Code in UnitTest, eine Python-Webanwendung
[Anfänger] [Python / Django] Ein junger Webingenieur hat ein Django-Tutorial ausprobiert - Teil 3-
Stellen Sie Echtzeit-Webanwendungen mit swampdragon x apache bereit
Stellen Sie eine mit Streamlit erstellte Web-App für Heroku bereit
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Experiment auf der Admin-Seite)
Stellen Sie die Masonite-App auf Heroku 2020 bereit
Stellen Sie die Django-Anwendung auf EC2 mit Nginx + Gunicorn + Supervisor bereit
Erstellen einer Python-Umgebung auf einem Mac
Erstellen einer Python-Umgebung unter Ubuntu
[Python / Django] Erstellen Sie eine Web-API, die im JSON-Format antwortet
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
# 3 Erstellen Sie eine Python-Umgebung (Django) mit einer EC2-Instanz (ubuntu18.04) von AWS part2
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Schichterstellungsseite)
Stellen Sie die Django-Anwendung mit Docker bereit
Stellen Sie die Django-Anwendung auf Heroku bereit
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Stellen Sie die Flask-App für Heroku bereit (bitter)
Erstellen Sie eine Python-Umgebung in Centos
Führen Sie python3 Django1.9 mit mod_wsgi aus (deploy)
Erstellen Sie eine Webanwendung mit Django
Stellen Sie die Flask-App auf Heroku bereit
Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs
So stellen Sie eine Webanwendung in der Alibaba Cloud als Freiberufler bereit
Stellen Sie die Flask-App auf Heroku bereit
Startete eine Webanwendung auf AWS mit Django und wechselte Jobs
Erstellen Sie eine Python3-Umgebung unter CentOS7
Bis Sie ein SpringBoot-Projekt in Gradle mit App Engine Flexible bereitstellen
Entwicklungspraxis für Webanwendungen: Erstellen Sie mit Django eine Seite zum Erstellen von Schichten! (Einführung)
Erstellen Sie eine Django-App auf Docker und stellen Sie sie in AWS Fargate bereit
Bis die mit Flasche erstellte Webanwendung auf Heroku veröffentlicht (bereitgestellt) wird