Öğ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.
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:
- Git'i yükleyin
- PHP 5.6.4 veya sonraki sürümü yükleme
- Oluşturucu Yükleme
- Laravel için gereken şu PHP uzantılarını etkinleştirin: OpenSSL, PDO-MySQL, Mbstring, Tokenizer, XML
- MySQL 'i yükleyip başlatın
Azure Cloud Shell'Da Bash ortamını kullanın.
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
mysqlisteminde bir veritabanı oluşturun.CREATE DATABASE sampledb;quityazarak 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.
Örnek depoyu kopyalayın ve depo köküne geçin.
git clone https://github.com/Azure-Samples/laravel-tasks cd laravel-tasksVarsayı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österirmain. Daha fazla bilgi için bkz. dağıtım dalını değiştirme.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
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 migrateYeni bir Laravel uygulama anahtarı oluşturun.
php artisan key:generateUygulamayı çalıştırın.
php artisan serveBir tarayıcıda
http://localhost:8000sayfasına gidin. Sayfaya birkaç görev ekleyin.
PHP’yi durdurmak için terminale
Ctrl + Cyazı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
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.
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
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 -pmysqlisteminde bir veritabanı oluşturun.CREATE DATABASE sampledb;phpappuser adlı bir veritabanı kullanıcısı oluşturun ve bu kullanıcıya
sampledbveritabanı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';quityazarak 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
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.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Örnek uygulamayı .env.production ortam dosyası ile birlikte çalıştırın.
php artisan serve --env=productionhttp://localhost:8000sayfasına gidin. Sayfa hatasız yüklenirse, PHP uygulaması Azure’da MySQL veritabanına bağlanıyor demektir.Sayfaya birkaç görev ekleyin.

PHP’yi durdurmak için terminale
Ctrl + Cyazı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.
Yerel terminal penceresinde, uygulama anahtarını .env dosyasına kaydetmeden yeni bir uygulama anahtarı oluşturmak için
php artisanseçeneğini kullanın.php artisan key:generate --showCloud 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 olanfalseseç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
Dalı dağıtıyorsanız, App Service uygulamanızın varsayılan dağıtım dalını olarak
mainmainayarlamalısınız (bkz. Dağıtım dalını değiştirme). Komut Cloud Shell uygulamaDEPLOYMENT_BRANCHayarını komutuylaaz webapp config appsettings setayarlayın.az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'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>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 mainBu 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 olarakbash deploy.shkomutunu çalıştırmasını ister.deploy.sh- Özel dağıtım betiği. Dosyayı gözden geçirirseniz,npm installkomutundan sonraphp 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.
Dalı dağıtıyorsanız, App Service uygulamanızın varsayılan dağıtım dalını olarak
mainmainayarlamalısınız (bkz. Dağıtım dalını değiştirme). Komut Cloud Shell uygulamaDEPLOYMENT_BRANCHayarını komutuylaaz webapp config appsettings setayarlayın.az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'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>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 mainBu 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.
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
Yerel terminal penceresinde Git deposunun kök dizinine gidin.
taskstablosu için yeni bir veritabanı geçişi oluşturun:php artisan make:migration add_complete_column --table=tasksBu komut, oluşturulan geçiş dosyasının adını gösterir. database/migrations içinde bu dosyayı bulup açın.
upyö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,
taskstablosunacompleteadlı bir boole sütunu ekler.Geri alma eylemi için
downyöntemini aşağıdaki kod ile değiştirin:public function down() { Schema::table('tasks', function (Blueprint $table) { $table->dropColumn('complete'); }); }Yerel terminal penceresinde, Laravel veritabanı geçişlerini çalıştırarak yerel veritabanında değişikliği yapın.
php artisan migrateLaravel adlandırma kuralına göre
Taskmodeli (bkz. app/Task.php) varsayılan olaraktaskstablosu ile eşlenir.
Uygulama mantığını güncelleştirme
routes/web.php dosyasını açın. Uygulama, yollarını ve iş mantığını burada tanımlar.
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,
completedeğerini değiştirerek veri modelinde basit bir güncelleştirme yapar.
Görünümü güncelleştirme
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.
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
Yerel terminal penceresinde, Git deposunun kök dizininden geliştirme sunucusunu çalıştırın.
php artisan serveGörev durumu değişikliğini görmek için
http://localhost:8000öğesine gidip onay kutusunu işaretleyin.
PHP’yi durdurmak için terminale
Ctrl + Cyazın.
Değişiklikleri Azure’da yayımlama
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 --forceTü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 mainTamamlandıktan sonra
git pushAzure uygulamasına gidin ve yeni işlevleri test edin.
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
Oluşturduğunuz uygulamayı yönetmek için Azure Portal gidin.
Sol menüden uygulama hizmetleri' ne ve ardından Azure uygulamanızın adına tıklayın.

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.

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:
