Öğretici: Django uygulamasını App Service ve PostgreSQL için Azure Veritabanı ile dağıtma - Esnek Sunucu

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Esnek Sunucu

Bu öğreticide, App Services ve PostgreSQL için Azure Veritabanı - Bir sanal ağda Esnek Sunucu kullanarak Azure'da bir Django uygulaması dağıtmayı öğreneceksiniz.

Önkoşullar

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Bu makale, Azure CLI 2.0 veya sonraki bir sürümünü yerel olarak çalıştırmanızı gerektirir. Yüklü sürümü görmek için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

az login komutunu kullanarak hesabınızda oturum açmanız gerekir. Komut çıktısındaki ilgili abonelik adına karşılık gelen id özelliğinin değerini not edin.

az login

Birden fazla aboneliğiniz varsa kaynağın faturalanacağı uygun aboneliği seçin. az account set komutunu kullanarak hesabınız altındaki belirli bir abonelik kimliğini seçin. Aboneliğinizin az login çıkışındaki abonelik kimliği özelliğini abonelik kimliği yer tutucusuna yerleştirin.

az account set --subscription <subscription id>

Örnek uygulamayı kopyalama veya indirme

Örnek depoyu kopyalayın:

git clone https://github.com/Azure-Samples/djangoapp

Ardından şu klasöre gidin:

cd djangoapp

Djangoapp örneği, Django belgelerinde ilk Django uygulamanızı yazma adımlarını izleyerek elde ettiğiniz veri temelli Django anketleri uygulamasını içerir. Tamamlanan uygulama, kolaylık sağlaması için burada sağlanır.

Örnek, App Service gibi bir üretim ortamında çalıştırılacak şekilde de değiştirilir:

  • Üretim ayarları azuresite/production.py dosyasındadır. Geliştirme ayrıntıları azuresite/settings.py dosyasındadır.
  • Ortam değişkeni "üretim" olarak ayarlandığında uygulama üretim ayarlarını DJANGO_ENV kullanır. Bu ortam değişkenini öğreticinin ilerleyen bölümlerinde PostgreSQL veritabanı yapılandırması için kullanılan diğer kişilerle birlikte oluşturacaksınız.

Bu değişiklikler, Django'nun herhangi bir üretim ortamında çalışacak şekilde yapılandırılmasına özeldir ve App Service için özel değildir. Daha fazla bilgi için bkz. Django dağıtım denetim listesi.

Yeni bir sanal ağda PostgreSQL Esnek Sunucusu oluşturma

Aşağıdaki komutu kullanarak bir sanal ağ (VNET) içinde özel bir esnek sunucu ve veritabanı oluşturun:

# Create Flexible server in a private virtual network (VNET) 

az postgres flexible-server create --resource-group myresourcegroup  --vnet myvnet --location westus2

Bu komut aşağıdaki eylemleri gerçekleştirir ve bu işlem birkaç dakika sürebilir:

  • Henüz yoksa kaynak grubunu oluşturun.
  • Sağlanmayan bir sunucu adı oluşturur.
  • İstendikten sonra bunu yapmayı seçerseniz yeni postgreSQL sunucunuz için yeni bir sanal ağ oluşturun. Web uygulamasını aynı sanal ağa eklemeniz gerektiğinden sunucunuz için oluşturulan sanal ağ adını ve alt ağ adını not edin.
  • Sağlanmadıysa sunucunuz için yönetici kullanıcı adı ve parola oluşturur. Sonraki adımda kullanılacak kullanıcı adını ve parolayı not edin.
  • Geliştirme için kullanılabilecek bir veritabanı postgres oluşturun. Farklı bir veritabanı oluşturmak üzere veritabanına bağlanmak için psql çalıştırabilirsiniz.

Not

Sağlanmazsa sizin için oluşturulacak parolanızı not edin. Parolayı unutursanız komutu kullanarak az postgres flexible-server update parolayı sıfırlamanız gerekir

Kodu Azure App Service dağıtma

Bu bölümde, App Service uygulamasında uygulama konağı oluşturacak, bu uygulamayı Postgres veritabanına bağlayacak ve ardından kodunuzu bu konağa dağıtacaksınız.

Sanal ağda App Service web uygulaması oluşturma

Terminalde, uygulama kodunu içeren depo kökünde (djangoapp) olduğunuzdan emin olun.

komutuyla az webapp up bir App Service uygulaması (konak işlemi) oluşturun:

# Create a web app

az webapp up --resource-group myresourcegroup --location westus2 --plan DjangoPostgres-tutorial-plan --sku B1 --name <app-name>

# Enable VNET integration for web app.

# Replace <vnet-name> and <subnet-name> with the virtual network and subnet name that the flexible server is using.

az webapp vnet-integration add -g myresourcegroup -n  mywebapp --vnet <vnet-name> --subnet <subnet-name>

# Configure database information as environment variables

# Use the postgres server name , database name , username , password for the database created in the previous steps

az webapp config appsettings set --settings DJANGO_ENV="production" DBHOST="<postgres-server-name>.postgres.database.azure.com" DBNAME="postgres" DBUSER="<username>" DBPASS="<password>"
  • bağımsız değişkeni için --location , önceki bölümde veritabanı için kullandığınız konumu kullanın.
  • uygulama adını> tüm Azure'da benzersiz bir adla değiştirin< (sunucu uç noktası olurhttps://\<app-name>.azurewebsites.net). Uygulama adı><A-Ziçin izin verilen karakterler : , 0-9ve .- İyi bir desen, şirketinizin adıyla uygulama tanımlayıcısının bir bileşimini kullanmaktır.
  • Yoksa Temel fiyatlandırma katmanında (B1) DjangoPostgres-tutorial-planApp Service planı oluşturun. --plan ve --sku isteğe bağlıdır.
  • Yoksa App Service uygulamasını oluşturun.
  • Henüz etkinleştirilmemişse, uygulama için varsayılan günlüğü etkinleştirin.
  • Derleme otomasyonu etkinken ZIP dağıtımını kullanarak depoyu karşıya yükleyin.
  • az webapp vnet-integration command, web uygulamasını postgres sunucusuyla aynı sanal ağa ekler.
  • Uygulama kodu, birçok ortam değişkeninde veritabanı bilgilerini bulmayı bekler. App Service ortam değişkenlerini ayarlamak için az webapp config appsettings set komutuyla "uygulama ayarları" oluşturursunuz.

İpucu

Birçok Azure CLI komutu, kaynak grubunun adı ve App Service planı gibi yaygın parametreleri .azure/config dosyasına önbelleğe alır. Sonuç olarak, sonraki komutlarla aynı parametrenin tümünü belirtmeniz gerekmez. Örneğin, değişiklik yaptıktan sonra uygulamayı yeniden dağıtmak için herhangi bir parametre olmadan yeniden çalıştırabilirsiniz az webapp up .

Django veritabanı geçişlerini çalıştırma

Django veritabanı geçişleri, Azure veritabanındaki PostgreSQL'deki şemanın kodunuzda açıklananlarla eşleşmesini sağlar.

  1. https:// app-name.scm.azurewebsites.net/webssh/host<> adresine gidip Azure hesabı kimlik bilgilerinizle (veritabanı sunucusu kimlik bilgileriyle değil) oturum açarak tarayıcıda bir SSH oturumu açın.

  2. SSH oturumunda aşağıdaki komutları çalıştırın ( komutları Ctrl+Shift+V kullanarak yapıştırabilirsiniz):

    cd site/wwwroot
    
    # Activate default virtual environment in App Service container
    source /antenv/bin/activate
    # Install packages
    pip install -r requirements.txt
    # Run database migrations
    python manage.py migrate
    # Create the super user (follow prompts)
    python manage.py createsuperuser
    
  3. Komut sizden createsuperuser süper kullanıcı kimlik bilgileri ister. Bu öğreticinin amaçları doğrultusunda varsayılan kullanıcı adını rootkullanın, e-posta adresini boş bırakmak için Enter tuşuna basın ve parolayı girin postgres1 .

Uygulamada anket sorusu oluşturma

  1. Tarayıcıda http://< app-name.azurewebsites.net> URL'sini açın. Veritabanında henüz belirli bir yoklama olmadığından uygulamanın "Yoklama yok" iletisini görüntülemesi gerekir.

  2. http://< app-name.azurewebsites.net/admin> adresine gidin. Önceki bölümdeki (root ve postgres1) süper kullanıcı kimlik bilgilerini kullanarak oturum açın. Anketler'in altında Sorular'ın yanındaki Ekle'yi seçin ve bazı seçenekler içeren bir anket sorusu oluşturun.

  3. Soruların kullanıcıya sunulduğunu onaylamak için http://< app-name.azurewebsites.net/> adresine yeniden göz atın. Veritabanında veri oluşturmak istediğiniz soruları yanıtlayın.

Tebrikler! Linux için Azure App Service'da etkin bir Postgres veritabanı olan bir Python Django web uygulaması çalıştırıyorsunuz.

Not

App Service, her alt klasörde manage.py startproject varsayılan olarak oluşturulan bir wsgi.py dosyası arayarak bir Django projesini algılar. App Service bu dosyayı bulduğunda Django web uygulamasını yükler. Daha fazla bilgi için bkz. Yerleşik Python görüntüsünü yapılandırma.

Kod değişiklikleri yapma ve yeniden dağıtma

Bu bölümde, uygulamada yerel değişiklikler yapacak ve kodu App Service için yeniden dağıtacaksınız. Bu süreçte, devam eden çalışmayı destekleyen bir Python sanal ortamı ayarlarsınız.

Uygulamayı yerel olarak çalıştırma

Bir terminal penceresinde aşağıdaki komutları çalıştırın. Süper kullanıcı oluştururken istemleri izlediğinden emin olun:

# Configure the Python virtual environment

python3 -m venv venv
source venv/bin/activate

# Install packages

pip install -r requirements.txt
# Run Django migrations

python manage.py migrate
# Create Django superuser (follow prompts)

python manage.py createsuperuser
# Run the dev server

python manage.py runserver

Web uygulaması tamamen yüklendikten sonra, Django geliştirme sunucusu "geliştirme sunucusu konumunda http://127.0.0.1:8000/başlatılıyor" iletisinde yerel uygulama URL'sini sağlar. CTRL-BREAK ile sunucudan çıkın".

Örnek Django geliştirme sunucusu çıkışı

Aşağıdaki adımlarla uygulamayı yerel olarak test edin:

  1. http://localhost:8000"Yoklama yok" iletisini görüntülemesi gereken bir tarayıcıda adresine gidin.

  2. http://localhost:8000/admin Adresine gidin ve daha önce oluşturduğunuz yönetici kullanıcıyı kullanarak oturum açın. Anketler'in altında, Sorular'ın yanındaki Ekle'yi seçin ve bazı seçeneklerle bir anket sorusu oluşturun.

  3. Yeniden adresine http://localhost:8000 gidin ve uygulamayı test etmek için soruyu yanıtlayın.

  4. Ctrl+C tuşlarına basarak Django sunucusunu durdurun.

Yerel olarak çalışırken uygulama yerel bir Sqlite3 veritabanı kullanıyor ve üretim veritabanınızı engellemez. İsterseniz üretim ortamınızın simülasyonunu daha iyi yapmak için yerel bir PostgreSQL veritabanı da kullanabilirsiniz.

Uygulamayı güncelleştirme

içinde polls/models.pyile choice_text başlayan satırı bulun ve parametresini max_length 100 olarak değiştirin:

# Find this lie of code and set max_length to 100 instead of 200

choice_text = models.CharField(max_length=100)

Veri modelini değiştirdiğiniz için yeni bir Django geçişi oluşturun ve veritabanını geçirin:

python manage.py makemigrations
python manage.py migrate

ile geliştirme sunucusunu yeniden python manage.py runserver çalıştırın ve uygulamasını adresinden test edin http://localhost:8000/admin:

Ctrl+C ile Django web sunucusunu yeniden durdurun.

Kodu Azure'a yeniden dağıtma

Depo kökünde aşağıdaki komutu çalıştırın:

az webapp up

Bu komut ,azure/config dosyasında önbelleğe alınan parametreleri kullanır. App Service uygulamanın zaten mevcut olduğunu algıladığından kodu yeniden dağıtır.

Azure'da geçişleri yeniden çalıştırma

Veri modelinde değişiklik yaptığınızdan, App Service'de veritabanı geçişlerini yeniden çalıştırmanız gerekir.

https:// app-name.scm.azurewebsites.net/webssh/host<> adresine giderek tarayıcıda yeniden bir SSH oturumu açın. Sonra aşağıdaki komutları çalıştırın:

cd site/wwwroot

# Activate default virtual environment in App Service container

source /antenv/bin/activate
# Run database migrations

python manage.py migrate

Üretimde uygulamayı gözden geçirme

http://< app-name.azurewebsites.net> adresine gidin ve uygulamayı üretim ortamında yeniden test edin. (Yalnızca veritabanı alanının uzunluğunu değiştirdiğinizden, değişiklik yalnızca soru oluştururken daha uzun bir yanıt girmeye çalıştığınızda fark edilebilir.)

İpucu

Statik medya varlıklarını Azure depolama alanında depolamak & için django-storages kullanabilirsiniz. Statik dosyalar için gzipping için Azure CDN kullanabilirsiniz.

uygulamanızı Azure portal yönetme

Azure portal uygulama adını arayın ve sonuçlarda uygulamayı seçin.

Azure portal Python Django uygulamanıza gidin

Portal varsayılan olarak uygulamanızın genel performans görünümü sağlayan Genel Bakış sayfasını gösterir. Burada göz atma, durdurma, yeniden başlatma ve silme gibi temel yönetim görevlerini de gerçekleştirebilirsiniz. Sayfanın sol tarafındaki sekmeler, açabileceğiniz farklı yapılandırma sayfalarını gösterir.

Python Django uygulamanızı Azure portal Genel Bakış sayfasından yönetin

Kaynakları temizleme

Uygulamayı korumak veya sonraki öğreticiye devam etmek istiyorsanız Sonraki adımlar bölümüne atlayın. Aksi takdirde, devam eden ücretlendirmelerden kaçınmak için bu öğreticide oluşturulan kaynak grubunu silebilirsiniz:

az group delete -g myresourcegroup

komutu.azure/config dosyasında önbelleğe alınan kaynak grubu adını kullanır. Kaynak grubunu silerek, içindeki tüm kaynakları serbest bırakmanız ve silmeniz de gerekir.

Sonraki adımlar

Özel bir DNS adını uygulamanıza eşlemeyi öğrenin:

App Service python uygulamasını nasıl çalıştıracağınızı öğrenin: