Öğretici: Azure App Service bir PHP ve MySQL uygulaması derleme

Azure App Service , Windows işletim sistemini kullanarak yüksek düzeyde ölçeklenebilir, kendini yayama bir web barındırma hizmeti sağlar. Bu öğreticide, Azure 'da bir PHP uygulamasının nasıl oluşturulacağı ve bir MySQL veritabanına nasıl bağlanacağı gösterilmektedir. İşiniz bittiğinde, Windows üzerinde Azure App Service üzerinde çalışan bir Laralevel uygulamanız olacaktır.

Azure App Service , Linux işletim sistemini kullanarak yüksek düzeyde ölçeklenebilir, kendini yayama bir Web barındırma hizmeti sağlar. Bu öğreticide, Azure 'da bir PHP uygulamasının nasıl oluşturulacağı ve bir MySQL veritabanına nasıl bağlanacağı gösterilmektedir. İşiniz bittiğinde, Linux üzerinde Azure App Service üzerinde çalışan bir Laralevel uygulamanız olacaktır.

Görev Listesi başlıklı bir PHP uygulaması örneğini ekran görüntüsü.

Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:

  • Azure’da MySQL veritabanı oluşturma
  • PHP uygulamasını MySQL’e bağlama
  • Uygulamayı Azure’da dağıtma
  • Veri modelini güncelleştirme ve uygulamayı yeniden dağıtma
  • Azure’daki tanılama günlüklerinin akışını sağlama
  • Uygulamayı Azure portalında yönetme

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

Önkoşullar

Bu öğreticiyi tamamlamak için:

  • Azure Cloud Shell'Da Bash ortamını kullanın.

    Cloud Shell’i yeni bir pencerede başlatma

  • Dilerseniz CLI başvuru komutlarını çalıştırmak için Azure CLI’yi yükleyebilirsiniz.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Ek oturum açma seçenekleri için bkz. Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantılarını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

Yerel MySQL hazırlama

Bu adımda, bu öğreticide kullanmak üzere yerel MySQL sunucunuzda bir veritabanı oluşturursunuz.

Yerel MySQL sunucusuna bağlanma

Bir terminal penceresinde yerel MySQL sunucunuza bağlanın. Bu öğreticideki tüm komutları çalıştırmak için bu terminal penceresini kullanabilirsiniz.

mysql -u root -p

Parola istenirse root hesabının parolasını girin. Kök hesap parolanızı hatırlamıyorsanız bkz MySQL: Kök Parolayı Sıfırlama.

Komutunuz başarıyla çalışırsa, MySQL sunucunuz çalışıyor demektir. Çalışmıyorsa, yerel MySQL sunucunuzun aşağıdaki MySQL yükleme sonrası adımları kullanılarak başlatıldığından emin olun.

Yerel olarak veritabanı oluşturma

  1. mysql isteminde bir veritabanı oluşturun.

    CREATE DATABASE sampledb;
    
  2. quit yazarak sunucu bağlantınızdan çıkış yapın.

    quit
    

Yerel olarak PHP uygulaması oluşturma

Bu adımda bir Laravel örnek uygulaması edinir, veritabanı bağlantısını yapılandırır ve yerel olarak çalıştırırsınız.

Örneği

Terminal penceresinde, cd ile bir çalışma dizinine gidin.

  1. Örnek depoyu kopyalayın ve depo köküne geçin.

    git clone https://github.com/Azure-Samples/laravel-tasks
    cd laravel-tasks
    
  2. Varsayılan dalın olduğundan emin olun main .

    git branch -m main
    

    İpucu

    Dal adı değişikliği App Service için gerekli değildir. Ancak, çoğu depo varsayılan dalını olarak değiştirdiklerinden main , bu öğretici ' den bir depoyu nasıl dağıtacağınızı da gösterir main . Daha fazla bilgi için bkz. dağıtım dalını değiştirme.

  3. Gereken paketleri yükleyin.

    composer install
    

MySQL bağlantısını yapılandırma

Depo kökünde .env adlı bir dosya oluşturun. Aşağıdaki değişkenleri .env dosyasına kopyalayın. < Root_password> yer tutucusunu MySQL kök kullanıcısının parolasıyla değiştirin.

APP_ENV=local
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=sampledb
DB_USERNAME=root
DB_PASSWORD=<root_password>

Laravel’in .env dosyasını nasıl kullandığı hakkında bilgi için bkz. Laravel Ortamı Yapılandırması.

Örneği yerel olarak çalıştırma

  1. Uygulama için gereken tabloları oluşturmak üzere Laravel veritabanı geçişlerini çalıştırın. Geçişlerde hangi tabloların oluşturulduğunu görmek için, Git deposundaki veritabanı/geçişler dizinine bakın.

    php artisan migrate
    
  2. Yeni bir Laravel uygulama anahtarı oluşturun.

    php artisan key:generate
    
  3. Uygulamayı çalıştırın.

    php artisan serve
    
  4. Bir tarayıcıda http://localhost:8000 sayfasına gidin. Sayfaya birkaç görev ekleyin.

    PHP başarıyla MySQL’e bağlanır

  5. PHP’yi durdurmak için terminale Ctrl + C yazın.

Azure’da MySQL oluşturma

Bu adımda, MySQL için Azure Veritabanı içinde bir MySQL veritabanı oluşturursunuz. Daha sonra, PHP uygulamasını bu veritabanına bağlanacak şekilde yapılandırırsınız.

Kaynak grubu oluşturma

Kaynak grubu , Web uygulamaları, veritabanları ve depolama hesapları gibi Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır. Örneğin, daha sonra tek bir basit adımda kaynak grubun tamamını silmeyi seçebilirsiniz.

Cloud Shell, komutuyla bir kaynak grubu oluşturun az group create . Aşağıdaki örnek Batı Avrupa konumunda myResourceGroup adlı bir kaynak grubu oluşturur. Ücretsiz katmanda App Service için desteklenen tüm konumları görüntülemek için az appservice list-locations --sku FREE komutunu çalıştırın.

az group create --name myResourceGroup --location "West Europe"

Genellikle kaynak grubunuzu ve kaynakları kendinize yakın bir bölgede oluşturursunuz.

Komut tamamlandığında, bir JSON çıkışı size kaynak grubu özelliklerini gösterir.

MySQL sunucusu oluşturma

Cloud Shell, komutunu kullanarak MySQL için Azure veritabanı 'nda bir sunucu oluşturun az mysql server create .

Aşağıdaki komutta, yer tutucu için benzersiz bir sunucu adı <mysql-server-name> , için bir Kullanıcı adı <admin-user> ve yer tutucu için bir parola koyun <admin-password> . Sunucu adı, MySQL uç noktasının (https://<mysql-server-name>.mysql.database.azure.com) bir parçası olarak kullanıldığından, adın Azure’daki tüm sunucularda benzersiz olması gerekir. MySQL DB SKU 'SU seçme hakkında daha fazla bilgi için bkz. MySQL Için Azure veritabanı sunucusu oluşturma.

az mysql server create --resource-group myResourceGroup --name <mysql-server-name> --location "West Europe" --admin-user <admin-user> --admin-password <admin-password> --sku-name B_Gen5_1

MySQL sunucusu oluşturulduğunda Azure CLI, aşağıdaki örneğe benzer bilgiler gösterir:

{
  "administratorLogin": "<admin-user>",
  "administratorLoginPassword": null,
  "fullyQualifiedDomainName": "<mysql-server-name>.mysql.database.azure.com",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>",
  "location": "westeurope",
  "name": "<mysql-server-name>",
  "resourceGroup": "myResourceGroup",
  ...
  -  < Output has been truncated for readability >
}

Sunucu güvenlik duvarını yapılandırma

  1. Cloud Shell, komutunu kullanarak MySQL sunucunuzun istemci bağlantılarına izin vermek için bir güvenlik duvarı kuralı oluşturun az mysql server firewall-rule create . Hem başlangıç hem bitiş IP’si 0.0.0.0 olarak ayarlandığında, güvenlik duvarı yalnızca diğer Azure kaynakları için açılır.

    az mysql server firewall-rule create --name allAzureIPs --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0
    

    İpucu

    Yalnızca uygulamanızın kullandığı giden IP adreslerini kullanarak güvenlik duvarı kurallarınızda daha da kısıtlayıcı olabilirsiniz.

  2. Cloud Shell, yerel <your-ip-address> IPv4 IP adresinizledeğiştirerek yerel bilgisayarınızdan erişime izin vermek için komutu yeniden çalıştırın.

    az mysql server firewall-rule create --name AllowLocalClient --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address=<your-ip-address> --end-ip-address=<your-ip-address>
    

Üretim veritabanı oluşturma

  1. Yerel terminal penceresinde, Azure’da MySQL sunucusuna bağlanın. Daha önce < Yönetici-Kullanıcı> ve < mysql-sunucu-adı> için belirttiğiniz değeri kullanın. Parola sorulduğunda, Azure’da veritabanı oluştururken belirttiğiniz parolayı kullanın.

    mysql -u <admin-user>@<mysql-server-name> -h <mysql-server-name>.mysql.database.azure.com -P 3306 -p
    
  2. mysql isteminde bir veritabanı oluşturun.

    CREATE DATABASE sampledb;
    
  3. phpappuser adlı bir veritabanı kullanıcısı oluşturun ve bu kullanıcıya sampledb veritabanındaki tüm ayrıcalıkları verin. Öğreticinin basitliği için parola olarak MySQLAzure2017 kullanın.

    CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2017'; 
    GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';
    
  4. quit yazarak sunucu bağlantısından çıkış yapın.

    quit
    

Uygulamayı Azure MySQL’e bağlama

Bu adımda, PHP uygulamasını MySQL için Azure Veritabanı içinde oluşturduğunuz MySQL veritabanına bağlarsınız.

Veritabanı bağlantısını yapılandırma

Depo kökünde bir .env.production dosyası oluşturun ve içine aşağıdaki değişkenleri kopyalayın. Placeholder_ < MySQL-sunucu-adı>_ hem DB_Host hem de DB_USERNAME değiştirin.

APP_ENV=production
APP_DEBUG=true
APP_KEY=

DB_CONNECTION=mysql
DB_HOST=<mysql-server-name>.mysql.database.azure.com
DB_DATABASE=sampledb
DB_USERNAME=phpappuser@<mysql-server-name>
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true

Değişiklikleri kaydedin.

İpucu

MySQL bağlantı bilgilerinizin güvenliğini sağlamak için bu dosya zaten Git deposunun dışında bırakılmıştır (Depo kökünde .gitignore dosyasına bakın). Daha sonra, App Service’teki ortam değişkenlerini, MySQL için Azure Veritabanı içinde veritabanınıza bağlanmak üzere nasıl yapılandıracağınızı öğreneceksiniz. Ortam değişkenlerini kullandığınızda App Service içinde .env dosyası gerekli değildir.

TLS/SSL sertifikası yapılandırma

Varsayılan olarak, MySQL için Azure veritabanı istemcilerden gelen TLS bağlantılarını uygular. Azure’da MySQL veritabanınıza bağlanmak üzere MySQL için Azure Veritabanı tarafından sağlanan .pem sertifikasını kullanmanız gerekir.

config/database.php dosyasını açın ve aşağıdaki kodda gösterildiği gibi sslmode ve options parametrelerini connections.mysql içine ekleyin.

'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem', 
    ] : []
],
'mysql' => [
    ...
    'sslmode' => env('DB_SSLMODE', 'prefer'),
    'options' => (env('MYSQL_SSL') && extension_loaded('pdo_mysql')) ? [
        PDO::MYSQL_ATTR_SSL_KEY    => '/ssl/BaltimoreCyberTrustRoot.crt.pem',
    ] : []
],

BaltimoreCyberTrustRoot.crt.pem sertifikası, bu öğreticide kolaylık sağlaması açısından depoda sunulmuştur.

Uygulamayı yerel olarak test etme

  1. MySQL için Azure Veritabanı içinde tablolar oluşturmak için, .env.production ile Laravel veritabanı geçişlerini ortam dosyası olarak çalıştırın. .env.production dosyasının, Azure’da MySQL veritabanınızla bağlantı bilgilerini içerdiğini unutmayın.

    php artisan migrate --env=production --force
    
  2. .env.production henüz geçerli bir uygulama anahtarına sahip değildir. Terminalde bu dosya için yeni bir tane oluşturun.

    php artisan key:generate --env=production --force
    
  3. Örnek uygulamayı .env.production ortam dosyası ile birlikte çalıştırın.

    php artisan serve --env=production
    
  4. http://localhost:8000 sayfasına gidin. Sayfa hatasız yüklenirse, PHP uygulaması Azure’da MySQL veritabanına bağlanıyor demektir.

  5. Sayfaya birkaç görev ekleyin.

    PHP, MySQL için Azure Veritabanı’na başarıyla bağlanır

  6. PHP’yi durdurmak için terminale Ctrl + C yazın.

Değişikliklerinizi kaydetme

Değişikliklerinizi kaydetmek için aşağıdaki Git komutlarını çalıştırın:

git add .
git commit -m "database.php updates"

Uygulamanız dağıtılmaya hazırdır.

Azure’a dağıtın

Bu adımda, MySQL’e bağlı PHP uygulamasını Azure App Service'e dağıtırsınız.

Dağıtım kullanıcısı yapılandırma

FTP ve yerel git, bir dağıtım kullanıcısı kullanarak bir Azure Web uygulamasına dağıtabilir. Dağıtım kullanıcısını yapılandırdıktan sonra tüm Azure dağıtımlarınız için kullanabilirsiniz. Hesap düzeyinde dağıtım Kullanıcı adınız ve parolanız, Azure aboneliği kimlik bilgilerinizden farklı.

Dağıtım kullanıcısını yapılandırmak için, Azure Cloud Shell bölümünde az WebApp Deployment User set komutunu çalıştırın. <username>Ve öğesini <password> bir dağıtım kullanıcısı Kullanıcı adı ve parolasıyla değiştirin.

  • Kullanıcı adı Azure içinde benzersiz olmalıdır ve yerel git gönderimleri için ' @ ' sembolünü içermemelidir.
  • Parola en az sekiz karakter uzunluğunda olmalıdır ve şu üç öğeden ikisi vardır: harfler, rakamlar ve semboller.
az webapp deployment user set --user-name <username> --password <password>

JSON çıktısı parolayı olarak gösterir null . 'Conflict'. Details: 409 hatası alırsanız kullanıcı adını değiştirin. 'Bad Request'. Details: 400 hatası alırsanız daha güçlü bir parola kullanın.

Web uygulamalarınızı dağıtmak için kullanmak üzere Kullanıcı adınızı ve parolanızı kaydedin.

App Service planı oluşturma

Cloud Shell, komutuyla bir App Service planı oluşturun az appservice plan create .

Aşağıdaki örnekte, Ücretsiz fiyatlandırma katmanı kullanılarak myAppServicePlan adlı bir App Service planı oluşturulmaktadır:

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE

App Service planı oluşturulduğunda Azure CLI, aşağıdaki örneğe benzer bilgiler gösterir:

{ 
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "app",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Komut Cloud Shell ile bir App Service planı az appservice plan create oluşturun.

Aşağıdaki örnekte, Ücretsiz fiyatlandırma katmanı kullanılarak myAppServicePlan adlı bir App Service planı oluşturulmaktadır:

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE --is-linux

App Service planı oluşturulduğunda Azure CLI, aşağıdaki örneğe benzer bilgiler gösterir:

{ 
  "freeOfferExpirationTime": null,
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

Web uygulaması oluşturma

App Service planında bir Web uygulaması oluşturun myAppServicePlan .

Cloud Shell az webapp create komutunu kullanabilirsiniz. Aşağıdaki örnekte <app-name> kısmını genel olarak benzersiz bir uygulama adıyla değiştirin (geçerli karakterler a-z, 0-9 ve - şeklindedir). Çalışma zamanı PHP|7.2 olarak ayarlanmıştır. Desteklenen tüm çalışma zamanlarını görmek için öğesini çalıştırın az webapp list-runtimes --linux .

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git

Web uygulaması oluşturulduğunda Azure CLI aşağıda yer alan çıktıdaki gibi bilgiler gösterir:

Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Git dağıtımı etkin boş bir yeni web uygulaması oluşturdunuz.

Not

Git uzak URL’si deploymentLocalGitUrl özelliği içinde https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git biçiminde gösterilir. Bu URL’ye daha sonra ihtiyacınız olacağı için URL’yi kaydedin.

App Service planında bir Web uygulaması oluşturun myAppServicePlan .

Cloud Shell az webapp create komutunu kullanabilirsiniz. Aşağıdaki örnekte <app-name> kısmını genel olarak benzersiz bir uygulama adıyla değiştirin (geçerli karakterler a-z, 0-9 ve - şeklindedir). Çalışma zamanı PHP|7.2 olarak ayarlanmıştır. Desteklenen tüm çalışma zamanlarını görmek için öğesini çalıştırın az webapp list-runtimes --linux .

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.2" --deployment-local-git

Web uygulaması oluşturulduğunda Azure CLI aşağıda yer alan çıktıdaki gibi bilgiler gösterir:

Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
{
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
  "enabled": true,
  < JSON data removed for brevity. >
}

Git dağıtımı etkin boş bir yeni web uygulaması oluşturdunuz.

Not

Git uzak URL’si deploymentLocalGitUrl özelliği içinde https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git biçiminde gösterilir. Bu URL’ye daha sonra ihtiyacınız olacağı için URL’yi kaydedin.

Veritabanı ayarlarını yapılandırma

App Service'te, az webapp config appsettings set komutunu kullanıp ortam değişkenlerini uygulama ayarları olarak belirlersiniz.

Aşağıdaki komut DB_HOST, DB_DATABASE, DB_USERNAME ve DB_PASSWORD uygulama ayarlarını yapılandırır. < App-name> ve < mysql-Server-Name> yer tutucularını değiştirin.

az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DB_HOST="<mysql-server-name>.mysql.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="phpappuser@<mysql-server-name>" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"

Ayarlara erişmek için PHP getenv yöntemini kullanabilirsiniz. Laravel kodu, PHP getenv üzerinde bir env sarmalayıcı kullanır. Örneğin, config/database.php içindeki MySQL yapılandırması aşağıdaki kod gibi görünür:

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    ...
],

Laravel ortam değişkenlerini yapılandırma

Laravel, App Service'te bir uygulama anahtarı gerektirir. Uygulama anahtarını uygulama ayarları ile yapılandırabilirsiniz.

  1. Yerel terminal penceresinde, uygulama anahtarını .env dosyasına kaydetmeden yeni bir uygulama anahtarı oluşturmak için php artisan seçeneğini kullanın.

    php artisan key:generate --show
    
  2. Cloud Shell, komutunu kullanarak App Service uygulamasındaki uygulama anahtarını ayarlayın az webapp config appsettings set . < App-name> ve < outputofphpartisankey: Generate> yer tutucuları değiştirin.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings APP_KEY="<output_of_php_artisan_key:generate>" APP_DEBUG="true"
    

    APP_DEBUG="true" , dağıtılmış uygulama hata ile karşılaştığında hata ayıklama bilgilerini döndürmesini söyler. Bir üretim uygulaması çalıştırırken daha güvenli olan false seçeneğine ayarlayın.

Sanal uygulama yolu ayarlama

Uygulamanın sanal uygulama yolunu ayarlayın. Laravel uygulaması yaşam döngüsü, uygulamanın kök dizini yerine public dizininde başladığı için bu adım gereklidir. Yaşam döngüsü kök dizinde başlayan diğer PHP çerçeveleri, sanal uygulama yolu el ile yapılandırılmadan çalışabilir.

Cloud Shell, komutunu kullanarak sanal uygulama yolunu ayarlayın az resource update . < App-name> yer tutucusunu değiştirin.

az resource update --name web --resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.virtualApplications[0].physicalPath="site\wwwroot\public" --api-version 2015-06-01

Varsayılan olarak, Azure App Service kök sanal uygulama yolunu ( / ) dağıtılan uygulama dosyalarının kök dizinine (sites\wwwroot) yönlendirir.

Laralevel uygulama yaşam döngüsü , uygulamanın kök dizini yerine ortak dizin içinde başlar. App Service için varsayılan PHP Docker görüntüsü, Apache kullanır ve Laravel için DocumentRoot öğesini özelleştirmenize izin vermez. Bununla birlikte, .htaccess kullanarak tüm istekleri kök dizin yerine /public dizinini işaret edecek şekilde yeniden yazabilirsiniz. Depo köküne bu amaçla bir .htaccess zaten eklenmiştir. Bununla, Laravel uygulamanız dağıtılmaya hazırdır.

Daha fazla bilgi için bkz. site kökünü değiştirme.

Git üzerinden Azure'a gönderme

  1. Dalı dağıtıyorsanız, App Service uygulamanızın varsayılan dağıtım dalını olarak main main ayarlamalısınız (bkz. Dağıtım dalını değiştirme). Komut Cloud Shell uygulama DEPLOYMENT_BRANCH ayarını komutuyla az webapp config appsettings set ayarlayın.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  2. Yerel terminal penceresine dönüp yerel Git deponuza bir Azure uzak deposu ekleyin. yerine <deploymentLocalGitUrl-from-create-step> Web uygulaması oluşturma sayfasından kaydedilen Git uzak url'sini yazın.

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  3. Aşağıdaki komutla uygulamanızı dağıtmak için Azure uzak deposuna gönderin. Git Kimlik Bilgileri Yöneticisi sizden kimlik bilgileri istendiğinde, dağıtım kullanıcısını yapılandırma'da oluşturduğunuz kimlik bilgilerini, kullanıcı arabiriminde oturum a açma için değil , kimlik bilgilerini Azure portal.

    git push azure main
    

    Bu komutun çalıştırılması birkaç dakika sürebilir. Çalıştırıldığında, aşağıdaki örneğe benzer bilgiler görüntüler:

   Counting objects: 3, done.
   Delta compression using up to 8 threads.
   Compressing objects: 100% (3/3), done.
   Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
   Total 3 (delta 2), reused 0 (delta 0)
   remote: Updating branch 'main'.
   remote: Updating submodules.
   remote: Preparing deployment for commit id 'a5e076db9c'.
   remote: Running custom deployment command...
   remote: Running deployment command...
   ...
   < Output has been truncated for readability >
   

Not

Dağıtım işleminin sonunda Composer paketleri yüklediğini fark edebilirsiniz. App Service, varsayılan dağıtım sırasında bu otomasyonları çalıştırmadığı için bu örnek depoyu etkinleştirmek üzere kök dizinde üç ek dosya bulunur:

  • .deployment - Bu dosya, App Service’ten özel dağıtım betiği olarak bash deploy.sh komutunu çalıştırmasını ister.
  • deploy.sh - Özel dağıtım betiği. Dosyayı gözden geçirirseniz, npm install komutundan sonra php composer.phar install çalıştırdığını görürsünüz.
  • composer.phar - Composer paket yöneticisi.

App Service’e Git tabanlı dağıtımınıza herhangi bir adım eklemek için bu yaklaşımı kullanabilirsiniz. Daha fazla bilgi için bkz. Özel Dağıtım Betiği.

  1. Dalı dağıtıyorsanız, App Service uygulamanızın varsayılan dağıtım dalını olarak main main ayarlamalısınız (bkz. Dağıtım dalını değiştirme). Komut Cloud Shell uygulama DEPLOYMENT_BRANCH ayarını komutuyla az webapp config appsettings set ayarlayın.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  2. Yerel terminal penceresine dönüp yerel Git deponuza bir Azure uzak deposu ekleyin. yerine <deploymentLocalGitUrl-from-create-step> Web uygulaması oluşturma sayfasından kaydedilen Git uzak url'sini yazın.

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  3. Aşağıdaki komutla uygulamanızı dağıtmak için Azure uzak deposuna gönderin. Git Kimlik Bilgileri Yöneticisi sizden kimlik bilgileri istendiğinde, dağıtım kullanıcısını yapılandırma'da oluşturduğunuz kimlik bilgilerini, kullanıcı arabiriminde oturum a açma için değil , kimlik bilgilerini Azure portal.

    git push azure main
    

    Bu komutun çalıştırılması birkaç dakika sürebilir. Çalıştırıldığında, aşağıdaki örneğe benzer bilgiler görüntüler:

   Counting objects: 3, done.
   Delta compression using up to 8 threads.
   Compressing objects: 100% (3/3), done.
   Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
   Total 3 (delta 2), reused 0 (delta 0)
   remote: Updating branch 'main'.
   remote: Updating submodules.
   remote: Preparing deployment for commit id 'a5e076db9c'.
   remote: Running custom deployment command...
   remote: Running deployment command...
   ...
   < Output has been truncated for readability >
   

Azure uygulamasına gidin

http://<app-name>.azurewebsites.net listesine göz atın ve listeye birkaç görev ekleyin.

Eklenen yeni görevleri gösteren Görev Listesi adlı Azure uygulaması örneği ekran görüntüsü.

Tebrikler, Azure App Service'te veri temelli bir PHP uygulaması çalıştırıyorsunuz.

Modeli yerel olarak güncelleştirme ve yeniden dağıtma

Bu adımda, task veri modeli ve web uygulamasında basit bir değişiklik yaptıktan sonra güncelleştirmeyi Azure'da yayımlarsınız.

Görevler senaryosu için, görevi tamamlandı olarak işaretleyebileceğiniz şekilde uygulamayı değiştirirsiniz.

Sütun ekleme

  1. Yerel terminal penceresinde Git deposunun kök dizinine gidin.

  2. tasks tablosu için yeni bir veritabanı geçişi oluşturun:

    php artisan make:migration add_complete_column --table=tasks
    
  3. Bu komut, oluşturulan geçiş dosyasının adını gösterir. database/migrations içinde bu dosyayı bulup açın.

  4. up yöntemini aşağıdaki kod ile değiştirin:

    public function up()
    {
        Schema::table('tasks', function (Blueprint $table) {
            $table->boolean('complete')->default(False);
        });
    }
    

    Yukarıdaki kod, tasks tablosuna complete adlı bir boole sütunu ekler.

  5. Geri alma eylemi için down yöntemini aşağıdaki kod ile değiştirin:

    public function down()
    {
        Schema::table('tasks', function (Blueprint $table) {
            $table->dropColumn('complete');
        });
    }
    
  6. Yerel terminal penceresinde, Laravel veritabanı geçişlerini çalıştırarak yerel veritabanında değişikliği yapın.

    php artisan migrate
    

    Laravel adlandırma kuralına göre Task modeli (bkz. app/Task.php) varsayılan olarak tasks tablosu ile eşlenir.

Uygulama mantığını güncelleştirme

  1. routes/web.php dosyasını açın. Uygulama, yollarını ve iş mantığını burada tanımlar.

  2. Dosyanın sonuna aşağıdaki kod ile bir yol ekleyin:

    /**
     * Toggle Task completeness
     */
    Route::post('/task/{id}', function ($id) {
        error_log('INFO: post /task/'.$id);
        $task = Task::findOrFail($id);
    
        $task->complete = !$task->complete;
        $task->save();
    
        return redirect('/');
    });
    

    Yukarıdaki kod, complete değerini değiştirerek veri modelinde basit bir güncelleştirme yapar.

Görünümü güncelleştirme

  1. resources/views/tasks.blade.php dosyasını açın. <tr> açma etiketini bulup şununla değiştirin:

    <tr class="{{ $task->complete ? 'success' : 'active' }}" >
    

    Yukarıdaki kod, görevin tamamlanıp tamamlanmamasına bağlı olarak satır rengini değiştirir.

  2. Sonraki satırda şu kodu görürsünüz:

    <td class="table-text"><div>{{ $task->name }}</div></td>
    

    Tüm satırı aşağıdaki kod ile değiştirin:

    <td>
        <form action="{{ url('task/'.$task->id) }}" method="POST">
            {{ csrf_field() }}
    
            <button type="submit" class="btn btn-xs">
                <i class="fa {{$task->complete ? 'fa-check-square-o' : 'fa-square-o'}}"></i>
            </button>
            {{ $task->name }}
        </form>
    </td>
    

    Yukarıdaki kod, daha önce tanımladığınız yola başvuran Gönder düğmesini ekler.

Değişiklikleri yerel olarak test etme

  1. Yerel terminal penceresinde, Git deposunun kök dizininden geliştirme sunucusunu çalıştırın.

    php artisan serve
    
  2. Görev durumu değişikliğini görmek için http://localhost:8000 öğesine gidip onay kutusunu işaretleyin.

    Göreve eklenen onay kutusu

  3. PHP’yi durdurmak için terminale Ctrl + C yazın.

Değişiklikleri Azure’da yayımlama

  1. Yerel terminal penceresinde, Laravel veritabanı geçişlerini üretim bağlantı dizesi ile birlikte çalıştırarak değişikliği Azure veritabanında yapın.

    php artisan migrate --env=production --force
    
  2. Tüm değişiklikleri Git’e kaydedin ve ardından kod değişikliklerini Azure’a gönderin.

    git add .
    git commit -m "added complete checkbox"
    git push azure main
    
  3. Tamamlandıktan sonra git push Azure uygulamasına gidin ve yeni işlevleri test edin.

    Azure’da yayımlanan model ve veritabanı değişiklikleri

Herhangi bir görevi eklediyseniz veritabanında tutulur. Veri şemasında yapılan güncelleştirmeler var olan verileri olduğu gibi bırakır.

Tanılama günlüklerini akışla aktarma

PHP uygulaması Azure App Service'te çalışırken, terminalinize yönlendirilen konsol günlüklerini alabilirsiniz. Böylece, uygulama hatalarını ayıklamanıza yardımcı olan tanılama iletilerinin aynısını alabilirsiniz.

Günlük akışını başlatmak için az webapp log tail Cloud Shell komutunu kullanın.

az webapp log tail --name <app_name> --resource-group myResourceGroup

Günlük akışı başladıktan sonra bazı web trafiği almak için tarayıcıda Azure uygulamasını yenileyin. Artık konsol günlüklerinin terminale yöneltildiğini görebilirsiniz. Konsol günlüklerini hemen görmüyorsanız, 30 saniye içinde yeniden kontrol edin.

Günlük akışını dilediğiniz zaman durdurmak için Ctrl+C yazın.

App Service’te uygulama kodunuzun içinden oluşturulan konsol günlüklerine erişmek için şu komutu Cloud Shell’de çalıştırarak tanılama günlüğüne kaydetmeyi açın:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

--level için olası değerler: Error, Warning, Info ve Verbose. Her düzey kendisinden önceki düzeyi içerir. Örneğin: Error yalnızca hata iletilerini içerir, Verbose ise tüm iletileri içerir.

Tanılama günlüğüne kaydetme açıldıktan sonra günlük akışını görmek için şu komutu çalıştırın:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Konsol günlüklerini hemen görmüyorsanız, 30 saniye içinde yeniden kontrol edin.

Not

Ayrıca, tarayıcıdan https://<app-name>.scm.azurewebsites.net/api/logs/docker adresine giderek günlük dosyalarını inceleyebilirsiniz.

Günlük akışını dilediğiniz zaman durdurmak için Ctrl+C yazın.

İpucu

Bir PHP uygulaması, konsol çıktısı için standart error_log() seçeneğini kullanabilir. Örnek uygulama app/Http/routes.php içinde bu yaklaşımı kullanır.

Bir web çerçevesi olarak, Laravel, Monolog günlük sağlayıcısını kullanır. İletileri konsola çıkarmak üzere Monolog kullanma hakkında bilgi almak için bkz. PHP: Konsola çıktı için monolog kullanma (php://out).

Azure uygulamasını yönetme

  1. Oluşturduğunuz uygulamayı yönetmek için Azure Portal gidin.

  2. Sol menüden uygulama hizmetleri' ne ve ardından Azure uygulamanızın adına tıklayın.

    Azure uygulamasına portal gezintisi

    Uygulamanızın genel bakış sayfasını görürsünüz. Buradan durdurma, başlatma, yeniden başlatma, göz atma ve silme gibi temel yönetim görevlerini gerçekleştirebilirsiniz.

    Soldaki menü, uygulamanızı yapılandırmaya yönelik sayfalar sağlar.

    Azure portalında App Service sayfası

Kaynakları temizleme

Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:

az group delete --name myResourceGroup

Bu komutun çalıştırılması bir dakika sürebilir.

Sonraki adımlar

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

  • Azure’da MySQL veritabanı oluşturma
  • PHP uygulamasını MySQL’e bağlama
  • Uygulamayı Azure’da dağıtma
  • Veri modelini güncelleştirme ve uygulamayı yeniden dağıtma
  • Azure’daki tanılama günlüklerinin akışını sağlama
  • Uygulamayı Azure portalında yönetme

Uygulamaya özel bir DNS adı eşlemeyle ilgili bilgi edinmek için sonraki öğreticiye geçin.

Ya da diğer kaynaklara göz atın: