Öğ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ı olur
https://\<app-name>.azurewebsites.net
). Uygulama adı><A
-Z
için izin verilen karakterler : ,0
-9
ve .-
İ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.
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.
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
Komut sizden
createsuperuser
süper kullanıcı kimlik bilgileri ister. Bu öğreticinin amaçları doğrultusunda varsayılan kullanıcı adınıroot
kullanın, e-posta adresini boş bırakmak için Enter tuşuna basın ve parolayı girinpostgres1
.
Uygulamada anket sorusu oluşturma
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.
http://< app-name.azurewebsites.net/admin> adresine gidin. Önceki bölümdeki (
root
vepostgres1
) 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.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".
Aşağıdaki adımlarla uygulamayı yerel olarak test edin:
http://localhost:8000"Yoklama yok" iletisini görüntülemesi gereken bir tarayıcıda adresine gidin.
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.
Yeniden adresine http://localhost:8000 gidin ve uygulamayı test etmek için soruyu yanıtlayın.
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.py
ile 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.
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.
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: