Kurz: Vytvoření aplikace PHP (Laravel) a MySQL Flexible server aplikace v Azure App Service

[platí pro: Azure Database for MySQL – flexibilní Server

Webová aplikace PHP v Azure s flexibilním serverem

Azure App Service poskytuje vysoce škálovatelnou službu s automatickými opravami pro hostování webů pomocí operačního systému Linux. V tomto kurzu se dozvíte, jak v Azure vytvořit aplikaci PHP a připojit ji k databázi MySQL. Až budete hotovi, budete mít aplikaci Laravel běžící na Azure App Service v systému Linux.

V tomto kurzu se naučíte:

  • Nastavení aplikace PHP (Laravel) s místním MySQL
  • Vytvoření flexibilního serveru MySQL
  • Připojení aplikace PHP na MySQL Flexible Server
  • Nasazení aplikace do Azure App Service
  • Aktualizovat datový model a znovu nasadit aplikaci
  • Spravovat aplikaci na webu Azure Portal

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete. S bezplatným účtem Azure si teď můžete vyzkoušet Azure Database for MySQL – flexibilní server na 12 měsíců zdarma. Další podrobnosti najdete v tématu Vyzkoušejte si flexibilní server zdarma.

Požadavky

Pro absolvování tohoto kurzu potřebujete:

  1. Nainstalovat Git.
  2. Nainstalovat PHP 5.6.4 nebo novější
  3. Nainstalovat Composer
  4. Povolit následující rozšíření PHP vyžadovaná aplikací Laravel: OpenSSL, PDO-MySQL, Mbstring, Tokenizer a XML
  5. Nainstalovat a spustit MySQL.

Příprava místního MySQL

V tomto kroku vytvoříte na místním serveru MySQL databázi, kterou budete v tomto kurzu používat.

Připojení k místnímu serveru MySQL

V okně terminálu se připojte k místnímu serveru MySQL. Toto okno terminálu můžete používat ke spuštění všech příkazů v tomto kurzu.

mysql -u root -p

Pokud se zobrazí výzva k zadání hesla, zadejte heslo k účtu root. Pokud si heslo ke kořenovému účtu nepamatujete, projděte si článek MySQL: Resetování kořenového hesla.

Pokud se váš příkaz úspěšně provede, znamená to, že je váš server MySQL spuštěný. Pokud ne, provedením kroků po instalaci MySQL zkontrolujte, jestli je místní server MySQL spuštěný.

Vytvoření databáze v místním prostředí

Na příkazovém řádku mysql vytvořte databázi.

CREATE DATABASE sampledb;

Ukončete připojení k serveru zadáním příkazu quit.

quit

Vytvoření aplikace PHP v místním prostředí

V tomto kroku získáte ukázkovou aplikaci Laravel, nakonfigurujete její připojení k databázi a spustíte ji v místním prostředí.

Vytvoření klonu ukázky

V okně terminálu přejděte do prázdného adresáře, kde můžete klonovat ukázkovou aplikaci. Ukázkové úložiště naklonujete spuštěním následujícího příkazu.

git clone https://github.com/Azure-Samples/laravel-tasks

Pomocí příkazu cd přejděte do naklonovaného adresáře. Nainstalujte požadované balíčky.

cd laravel-tasks
composer install

Konfigurace připojení k MySQL

V kořenovém adresáři úložiště vytvořte soubor .env. Zkopírujte do souboru .env následující proměnné. Zástupný text <>root_password nahraďte heslem kořenového uživatele MySQL.

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>

Informace o tom, jak Laravel používá soubor .env, najdete v článku Laravel Environment Configuration (Konfigurace prostředí Laravel).

Spuštění ukázky v místním prostředí

Spusťte migrace databází Laravel, aby se vytvořily tabulky, které aplikace potřebuje. Pokud chcete zjistit, které tabulky migrace vytvářejí, podívejte se do adresáře database/migrations v úložišti Git.

php artisan migrate

Vygenerujte nový klíč aplikace Laravel.

php artisan key:generate

Spusťte aplikaci.

php artisan serve

V prohlížeči přejděte na http://localhost:8000. Na stránce přidejte několik úkolů.

Úspěšné připojení aplikace PHP k MySQL

Pokud chcete zastavit PHP, zadejte v terminálu Ctrl + C.

Vytvoření flexibilního serveru MySQL

V tomto kroku vytvoříte databázi MySQL na Azure Database for MySQL flexibilním serveru. Později nakonfigurujete aplikaci PHP pro připojení k této databázi. V Azure Cloud Shellvytvořte pomocí az flexible-server create příkazu Server.

az mysql flexible-server create  --resource-group myResourceGroup --public-access <IP-Address>

Důležité

  • Poznamenejte si servername a připojovací řetězec , abyste ho mohli použít v dalším kroku k připojení a spuštění migrace dat Laravel.
  • U argumentu IP-Address zadejte IP adresu klientského počítače. Server je při vytvoření uzamčen a je nutné povolit přístup ke klientskému počítači pro místní správu serveru.

Konfigurace brány firewall serveru tak, aby umožňovala webové aplikaci připojit se k serveru

V Cloud Shell vytvořte pravidlo brány firewall pro server MySQL, abyste mohli pomocí příkazu AZ MySQL server firewall-Rule Create vytvořit klientská připojení. Pokud jsou počáteční IP adresa i koncová IP adresa nastavené na 0.0.0.0 , je brána firewall otevřená jenom pro jiné služby Azure, které nemají statickou IP adresu pro připojení k serveru.

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

Místní připojení k produkčnímu serveru MySQL

V místním okně terminálu se připojte k serveru MySQL v Azure. Použijte hodnotu, kterou jste zadali dříve pro <admin-user> a <mysql-server-name> . Po zobrazení výzvy k zadání hesla použijte heslo, které jste zadali při vytváření databáze v Azure.

mysql -u <admin-user> -h <mysql-server-name>.mysql.database.azure.com -P 3306 -p

Vytvoření produkční databáze

Na příkazovém řádku mysql vytvořte databázi.

CREATE DATABASE sampledb;

Vytvoření uživatele s oprávněními

Vytvořte uživatele databáze se jménem phpappuser a přidělte mu všechna oprávnění k databázi sampledb. Pro zjednodušení tohoto kurzu použijte jako heslo MySQLAzure2020 .

CREATE USER 'phpappuser' IDENTIFIED BY 'MySQLAzure2020';
GRANT ALL PRIVILEGES ON sampledb.* TO 'phpappuser';

Ukončete připojení k serveru zadáním příkazu quit.

quit

Připojení aplikace na MySQL flexibilní server

V tomto kroku připojíte aplikaci PHP k databázi MySQL, kterou jste vytvořili v Azure Database for MySQL.

Konfigurace připojení k databázi

V kořenovém adresáři úložiště vytvořte soubor .env.production a zkopírujte do něj následující proměnné. Nahraďte zástupný symbol < MySQL-Server-Name> v DB_HOST i DB_USERNAME.

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
DB_PASSWORD=MySQLAzure2017
MYSQL_SSL=true

Uložte změny.

Tip

Za účelem zabezpečení informací o vašem připojení k MySQL je tento soubor již vyloučený z úložiště Git (viz soubor .gitignore v kořenovém adresáři úložiště). Později se dozvíte, jak ve službě App Service nakonfigurovat proměnné prostředí pro připojení k vaší databázi v Azure Database for MySQL. S použitím proměnných prostředí nepotřebujete soubor .env ve službě App Service.

Konfigurace certifikátu TLS/SSL

Ve výchozím nastavení vynutila služba MySQL flexibilní Server připojení TLS od klientů. Pokud se chcete připojit k databázi MySQL v Azure, musíte použít certifikát . pem dodaný Azure Database for MySQLm flexibilním serverem. Stáhněte si Tento certifikáta umístěte ho do složky SSL v místní kopii ukázkového úložiště aplikace.

Otevřete soubor config/database.php a do connections.mysql přidejte parametry sslmode a options, jak je znázorněno v následujícím kódu.

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

Test aplikace v místním prostředí

Spusťte migrace databází Laravel s .env.production jako souborem prostředí, aby se ve vaší databázi MySQL v Azure Database for MySQL vytvořily tabulky. Nezapomeňte, že soubor .env.production obsahuje informace o připojení k vaší databázi MySQL v Azure.

php artisan migrate --env=production --force

Soubor .env.production ještě nemá platný klíč aplikace. Vygenerujte pro něj nový klíč v terminálu.

php artisan key:generate --env=production --force

Spusťte ukázkovou aplikaci s .env.production jako souborem prostředí.

php artisan serve --env=production

Přejděte na adresu http://localhost:8000. Pokud se stránka načte bez chyb, aplikace PHP se v Azure připojuje k databázi MySQL v Azure.

Na stránce přidejte několik úkolů.

Úspěšné připojení aplikace PHP k Azure Database for MySQL

Pokud chcete zastavit PHP, zadejte v terminálu Ctrl + C.

Potvrzení změn

Potvrďte provedené změny spuštěním následujících příkazů Gitu:

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

Vaše aplikace je připravená k nasazení.

Nasazení do Azure

V tomto kroku nasadíte aplikaci PHP připojenou k MySQL do služby Azure App Service.

Konfigurace uživatele nasazení

FTP a místní Git můžete nasadit do webové aplikace Azure pomocí uživatele nasazení. Jakmile nakonfigurujete uživatele nasazení, můžete ho použít pro všechna nasazení Azure. Uživatelské jméno a heslo pro nasazení na úrovni účtu se liší od přihlašovacích údajů předplatného Azure.

Pokud chcete nakonfigurovat uživatele nasazení, spusťte příkaz az webapp deployment user set v Azure Cloud Shell. Uživatelské < jméno a> < nahraďte> uživatelským jménem a heslem pro nasazení.

Uživatelské jméno musí být v rámci Azure jedinečné a u místních nabízených oznámení Git nesmí obsahovat symbol @. Heslo musí mít alespoň osm znaků a musí obsahovat dva z následujících tří prvků: písmena, číslice a symboly.

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

Ve výstupu JSON se zobrazí heslo s hodnotou null. Pokud dojde ke konfliktu. Podrobnosti: Chyba 409– změňte uživatelské jméno. Pokud se vám vyžádá Chybný požadavek. Podrobnosti: Chyba 400, použijte silnější heslo. Zaznamente si uživatelské jméno a heslo, které použijete k nasazení webových aplikací.

Vytvoření plánu služby App Service

V Cloud Shell vytvořte ve skupině App Service plán pomocí příkazu az appservice plan create. Následující příklad vytvoří plán App Service myAppServicePlan na cenové úrovni Free (--sku F1) a v kontejneru Linuxu (--is-linux).

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

Vytvoření webové aplikace

Vytvořte webovou aplikaci v plánu App Service myAppServicePlan.

V Cloud Shell můžete použít příkaz az webapp create. V následujícím příkladu nahraďte < app-name> globálně jedinečným názvem aplikace (platné znaky jsou , a a-z 0-9 - ). Modul runtime je nastavený na PHP|7.0. Pokud chcete zobrazit všechny podporované moduly runtime, spusťte příkaz az webapp list-runtimes --linux.

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "PHP|7.3" --deployment-local-git

Po vytvoření webové aplikace Azure CLI zobrazí výstup podobný následujícímu příkladu:

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. >
}

Vytvořili jste novou prázdnou webovou aplikaci s povoleným nasazením gitu.

Poznámka

Adresa URL vzdáleného úložiště Git se zobrazuje ve vlastnosti deploymentLocalGitUrl ve formátu https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git . Tuto adresu URL si uložte, protože ji budete potřebovat později.

Konfigurace nastavení databáze

Ve službě App Service můžete nastavit proměnné prostředí jako nastavení aplikace pomocí příkazu az webapp config appsettings set.

Následující příkaz nakonfiguruje nastavení aplikace DB_HOST, DB_DATABASE, DB_USERNAME a DB_PASSWORD. Nahraďte zástupné < symboly app-name> a < mysql-server-name>.

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" DB_PASSWORD="MySQLAzure2017" MYSQL_SSL="true"

Pro přístup k nastavení můžete použít metodu PHP getenv. Kód Laravel používá pro metodu PHP getenv obálku env. Například konfigurace MySQL v souboru config/database.php vypadá podobně jako v následujícím kódu:

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

Konfigurace proměnných prostředí Laravel

Laravel potřebuje ve službě App Service klíč aplikace. Můžete ho nakonfigurovat pomocí nastavení aplikace.

V okně místního terminálu pomocí příkazu php artisan vygenerujte nový klíč aplikace, aniž byste ho ukládali do souboru .env.

php artisan key:generate --show

V Cloud Shell nastavte klíč aplikace v aplikaci App Service pomocí příkazu az webapp config appsettings set . Nahraďte zástupné < symboly app-name> a < outputofphpartisankey:generate>.

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" říká Laravelu, aby vracel informace o ladění, když nasazená aplikace narazí na chyby. Při spouštění produkční aplikace ho nastavte na false, což je bezpečnější.

Nastavení cesty virtuální aplikace

Životní cyklus aplikace Laravel začíná ve veřejném adresáři místo kořenového adresáře aplikace. Výchozí image Dockeru s PHP pro službu App Service používá Apache a neumožňuje přizpůsobení DocumentRoot pro Laravel. Pomocí souboru .htaccess však můžete přepsat směrování všech požadavků do adresáře /public místo kořenového adresáře. Kořenový adresář úložiště pro tyto účely již soubor .htaccess obsahuje. S tímto souborem je vaše aplikace Laravel připravená k nasazení.

Další informace najdete v tématu Změna kořenového adresáře lokality.

Přenos z Gitu do Azure

Zpět v okně místního terminálu přidejte vzdálené úložiště Azure do místního úložiště Git. Nahraďte < deploymentLocalGitUrl-from-create-step> adresou URL vzdáleného úložiště Git, kterou jste uložili v části Vytvoření webové aplikace.

git remote add azure <deploymentLocalGitUrl-from-create-step>

Nasaďte aplikaci do vzdáleného úložiště Azure pomocí následujícího příkazu. Když vás git Správce přihlašovacích údajů vyzve k zadání přihlašovacích údajů, nezapomeňte zadat přihlašovací údaje, které jste vytvořili v části Konfigurace uživatele nasazení, a ne přihlašovací údaje, které používáte pro přihlášení k Azure Portal.

git push azure main

Spuštění tohoto příkazu může trvat několik minut. Při spuštění příkaz zobrazí podobné informace jako v následujícím příkladu:

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 >

Přejděte do aplikace Azure.

Přejděte na adresu http://<app-name>.azurewebsites.net a přidejte do seznamu několik úkolů.

Webová aplikace PHP v Azure

Blahopřejeme! Teď máte ve službě Azure App Service spuštěnou aplikaci PHP řízenou daty.

Místní aktualizace modelu a opětovné nasazení

V tomto kroku provedete jednoduchou změnu datového modelu task a webové aplikace a potom tuto aktualizaci publikujete v Azure.

Pro scénář úkolů upravíte aplikaci tak, abyste mohli úkol označit jako dokončený.

Přidání sloupce

V okně místního terminálu přejděte do kořenového adresáře úložiště Gitu.

Vygenerujte novou migraci databáze pro tabulku tasks:

php artisan make:migration add_complete_column --table=tasks

Tento příkaz zobrazí název generovaného souboru migrace. Vyhledejte tento soubor v adresáři database/migrations a otevřete ho.

Nahraďte metodu up následujícím kódem:

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

Předchozí kód přidá do tabulky tasks logický sloupec complete.

Pro akci vrácení zpět nahraďte metodu down následujícím kódem:

public function down()
{
    Schema::table('tasks', function (Blueprint $table) {
        $table->dropColumn('complete');
    });
}

V okně místního terminálu spusťte migrace databáze Laravel, aby se změna provedla v místní databázi.

php artisan migrate

Na základě konvence pojmenování Laravel model Task (viz app/Task.php) ve výchozím nastavení provádí mapování na tabulku tasks.

Aktualizace logiky aplikace

Otevřete soubor routes/web.php. V něm aplikace definuje své trasy a obchodní logiku.

Na konec souboru přidejte trasu s následujícím kódem:

/**
 * 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('/');
});

Předchozí kód provede jednoduchou aktualizaci datového modelu tím, že přepne hodnotu položky complete.

Aktualizace zobrazení

Otevřete soubor resources/views/tasks.blade.php. Vyhledejte počáteční značku <tr> a nahraďte ji:

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

Předchozí kód změní barvu řádku v závislosti na tom, jestli je úkol dokončený.

Na dalším řádku je následující kód:

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

Celý řádek nahraďte následujícím kódem:

<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>

Předchozí kód přidá tlačítko Odeslat odkazující na trasy, které jste definovali předtím.

Místní test provedených změn

V okně místního terminálu spusťte vývojový server z kořenového adresáře úložiště Git.

php artisan serve

Pokud chcete vidět změnu stavu úkolu, přejděte na adresu http://localhost:8000 a zaškrtněte políčko.

U úkolu přibylo zaškrtávací políčko

Pokud chcete zastavit PHP, zadejte v terminálu Ctrl + C.

Publikování změn v Azure

V okně místního terminálu spusťte migrace databází Laravel s produkčním připojovacím řetězcem, aby se provedla změna v databázi Azure.

php artisan migrate --env=production --force

Potvrďte všechny změny v Gitu a potom odešlete změny kódu do Azure.

git add .
git commit -m "added complete checkbox"
git push azure main

Po git push dokončení přejděte do aplikace Azure a otestujte nové funkce.

Změny modelu a databáze publikované v Azure

Pokud jste přidali nějaké úkoly, zůstanou v databázi. Aktualizace schématu dat nechávají existující data netknutá.

Vyčištění prostředků

V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:

az group delete --name myResourceGroup

Další kroky