Vytvoření aplikace Ruby a Postgres v Azure App Service v systému Linux

Azure App Service je vysoce škálovatelná služba s automatickými opravami pro hostování webů. V tomto kurzu se dozvíte, jak vytvořit aplikaci v Ruby a připojit ji k databázi PostgreSQL. Po dokončení budete mít ve službě App Service v Linuxu spuštěnou aplikaci Ruby on Rails.

Snímek obrazovky s příkladem aplikace v Ruby na železnici s názvem úkoly

V tomto kurzu se naučíte:

  • Vytvořit databázi PostgreSQL v Azure
  • Připojit k PostgreSQL aplikaci Ruby on Rails
  • Nasadit aplikaci do Azure
  • Aktualizovat datový model a znovu nasadit aplikaci
  • Streamovat diagnostické protokoly z Azure
  • Spravovat aplikaci na webu Azure Portal

Pokud ještě nemáte předplatné Azure,vytvořte si bezplatný účet před tím, než začnete.

Požadavky

Pro absolvování tohoto kurzu potřebujete:

  • V nástroji použijte prostředí Bash Azure Cloud Shell.

    Spuštění služby Cloud Shell v novém okně

  • Pokud tomu dáváte přednost, můžete nainstalovat Azure CLI a spouštět referenční příkazy CLI.

    • Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení jsou popsané v tématu Přihlášení pomocí Azure CLI.

    • Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.

    • Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.

Příprava místního Postgres

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

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

  1. Otevřete okno terminálu a spuštěním příkazu psql se připojte ke svému místnímu serveru Postgres.

    sudo -u postgres psql
    

    Pokud se úspěšně připojíte, vaše databáze Postgres je spuštěná. Pokud ne, podle postupu na stránce Downloads – PostgreSQL Core Distribution (Ke stažení – Distribuce jádra PostgreSQL) se ujistěte, že je vaše místní databáze Postgres spuštěná.

  2. Zadáním příkazu \q ukončete klienta Postgres.

  3. Vytvořte uživatele Postgres, který může vytvářet databáze, spuštěním následujícího příkazu s použitím vašeho přihlašovacího uživatelského jména pro Linux.

    sudo -u postgres createuser -d <signed-in-user>
    

Vytvoření aplikace Ruby on Rails v místním prostředí

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

Vytvoření klonu ukázky

  1. V okně terminálu přejděte pomocí příkazu cd do pracovního adresáře.

  2. Naklonujte ukázkové úložiště a přejděte do kořenového adresáře úložiště.

    git clone https://github.com/Azure-Samples/rubyrails-tasks.git
    cd rubyrails-tasks
    
  3. Ujistěte se, že je výchozí větev main .

    git branch -m main
    

    Tip

    App Service nepožaduje změnu názvu větve. Vzhledem k tomu, že mnoho úložišť mění výchozí větev na main , v tomto kurzu se také dozvíte, jak nasadit úložiště z main . Další informace najdete v tématu Změna větve nasazení.

  4. Nainstalujte požadované balíčky.

    bundle install --path vendor/bundle
    

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

  1. Spusťte migrace serveru Rails, aby se vytvořily tabulky, které aplikace potřebuje. Pokud chcete zjistit, které tabulky migrace vytvářejí, podívejte se do adresáře db/migrate v úložišti Git.

    rake db:create
    rake db:migrate
    
  2. Spusťte aplikaci.

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

    Aplikace Ruby on Rails se úspěšně připojí k Postgres

  4. Pokud chcete server Rails zastavit, zadejte do terminálu Ctrl + C.

Vytvoření Postgres v Azure

V tomto kroku vytvoříte v Azure Database for PostgreSQL databázi Postgres. Později nakonfigurujete aplikaci Ruby on Rails pro připojení k této databázi.

Vytvoření skupiny prostředků

Skupina prostředků je logický kontejner, ve kterém se nasazují a spravují prostředky Azure, jako jsou webové aplikace, databáze a účty úložiště. Později se například můžete rozhodnout odstranit celou skupinu prostředků v jednom jednoduchém kroku.

V Cloud Shell vytvořte skupinu prostředků pomocí az group create příkazu. Následující příklad vytvoří skupinu prostředků myResourceGroup v umístění Západní Evropa. Pokud chcete zobrazit všechna podporovaná umístění pro službu App Service v Linuxu na úrovni Basic, spusťte příkaz az appservice list-locations --sku B1 --linux-workers-enabled.

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

Obvykle budete svoji skupinu prostředků a prostředky vytvářet v oblasti, kterou máte blízko.

Po dokončení příkazu se ve výstupu JSON zobrazí vlastnosti skupiny prostředků.

Vytvoření databáze Postgres v Azure

  1. Nainstalujte db-up rozšíření pomocí následujícího příkazu:

    az extension add --name db-up
    
  2. Vytvořte databázi Postgres v Azure pomocí az postgres up příkazu, jak je znázorněno v následujícím příkladu. Nahraďte <postgresql-name> jedinečným názvem (koncový bod serveru je https:// <postgresql-name> . Postgres.Database.Azure.com). V případě <admin-username> a <admin-password> Zadejte přihlašovací údaje pro vytvoření uživatele správce pro tento server Postgres.

    az postgres up --resource-group myResourceGroup --location westeurope --server-name <postgresql-name> --database-name sampledb --admin-user <admin-username> --admin-password <admin-password> --ssl-enforcement Enabled
    

    Tento příkaz může chvíli trvat, protože je to následující:

    • Vytvoří skupinu prostředků s názvem myResourceGroup , pokud neexistuje. Každý prostředek Azure musí být v jednom z těchto. Parametr --resource-group je volitelný.
    • Vytvoří server Postgres s administrativním uživatelem.
    • Vytvoří sampledb databázi.
    • Umožňuje přístup z místní IP adresy.
    • Umožňuje přístup ze služeb Azure.
    • Vytvořte uživatele databáze s přístupem k sampledb databázi.

    Všechny kroky můžete provádět samostatně s ostatními az postgres příkazy a psql , ale všechny jsou az postgres up v jednom kroku.

    Po dokončení příkazu Najděte výstupní řádky, které se nacházejí v Ran Database Query: . Zobrazují uživatele databáze, který vám byl vytvořen, s uživatelským jménem root a heslem Sampledb1 . Později je budete používat k připojení aplikace k databázi.

    Tip

    --location <location-name>, lze nastavit na některou z oblastí Azure. Pomocí příkazu můžete získat oblasti dostupné pro vaše předplatné az account list-locations . V produkčních aplikacích uložte svou databázi a aplikaci do stejného umístění.

Připojení aplikace k Azure Postgres

V tomto kroku připojíte aplikaci Ruby on Rails k databázi Postgres, kterou jste vytvořili v Azure Database for PostgreSQL.

Konfigurace připojení k databázi

V úložišti otevřete soubor config/database.yml. Ve spodní části souboru nahraďte produkční proměnné následujícím kódem.

production:
  <<: *default
  host: <%= ENV['DB_HOST'] %>
  database: <%= ENV['DB_DATABASE'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>

Uložte změny.

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

  1. Vraťte se do místního terminálu a nastavte následující proměnné prostředí:

    export DB_HOST=<postgres-server-name>.postgres.database.azure.com
    export DB_DATABASE=sampledb 
    export DB_USERNAME=root@<postgres-server-name>
    export DB_PASSWORD=Sampledb1
    
  2. Spusťte migrace databáze Rails s produkčními hodnotami, které jste právě nakonfigurovali, aby se ve vaší databázi Postgres v Azure Database for PostgreSQL vytvořily tabulky.

    rake db:migrate RAILS_ENV=production
    
  3. Při spuštění v produkčním prostředí potřebuje aplikace Rails předkompilované prostředky. Požadované prostředky vygenerujte pomocí následujícího příkazu:

    rake assets:precompile
    
  4. Produkční prostředí Rails také používá ke správě zabezpečení tajné kódy. Vygenerujte tajný klíč.

    rails secret
    
  5. Uložte tajný klíč do odpovídajících proměnných používaných produkčním prostředím Rails. Pro jednoduchost použijte u obou proměnných stejný klíč.

    export RAILS_MASTER_KEY=<output-of-rails-secret>
    export SECRET_KEY_BASE=<output-of-rails-secret>
    
  6. Povolte v produkčním prostředí Rails zpracování souborů JavaScript a CSS.

    export RAILS_SERVE_STATIC_FILES=true
    
  7. Spusťte v produkčním prostředí ukázkovou aplikaci.

    rails server -e production
    
  8. Přejděte na adresu http://localhost:3000. Pokud se stránka načte bez chyb, aplikace Ruby on Rails se připojuje k databázi Postgres v Azure.

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

    Úspěšné připojení aplikace Ruby on Rails k Azure Database for PostgreSQL

  10. Pokud chcete server Rails zastavit, zadejte do terminálu Ctrl + C.

Potvrzení změn

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

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

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

Nasazení do Azure

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

Konfigurace uživatele nasazení

FTP a místní Git se můžou 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 nasazení na úrovni účtu se liší od přihlašovacích údajů předplatného Azure.

Pokud chcete nakonfigurovat uživatele nasazení, spusťte v Azure Cloud Shell příkaz AZ WebApp Deployment User set . Nahraďte <username> a <password> pomocí uživatelského jména a hesla pro nasazení.

  • Uživatelské jméno musí být v rámci Azure jedinečné a pro místní nabízená oznámení Git nesmí obsahovat @ symbol.
  • Heslo musí mít délku alespoň osm znaků a dva z následujících tří prvků: písmena, číslice a symboly.
az webapp deployment user set --user-name <username> --password <password>

Výstup JSON zobrazuje heslo jako null . Pokud se zobrazí chyba 'Conflict'. Details: 409, změňte uživatelské jméno. Pokud se zobrazí chyba 'Bad Request'. Details: 400, použijte silnější heslo.

Poznamenejte si uživatelské jméno a heslo, které chcete použít k nasazení webových aplikací.

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

V Cloud Shell vytvořte App Service plán pomocí az appservice plan create příkazu.

Následující příklad vytvoří plán služby App Service s názvem myAppServicePlan v cenové úrovni Free:

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

Po vytvoření plánu služby App Service se v rozhraní příkazového řádku Azure zobrazí podobné informace jako v následujícím příkladu:

{ 
  "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
} 

Vytvoření webové aplikace

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

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-z, 0-9 a -). Modul runtime je nastavený na RUBY|2.6.2. Pokud chcete zobrazit všechny podporované moduly runtime, spusťte az webapp list-runtimes --linux příkaz .

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime 'RUBY|2.6.2' --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 v Cloud Shellu.

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

az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DB_HOST="<postgres-server-name>.postgres.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="root@<postgres-server-name>" DB_PASSWORD="Sampledb1"

Konfigurace proměnných prostředí Rails

  1. V místním terminálu vygenerování nového tajného kódu pro produkční prostředí Rails v Azure.

    rails secret
    
  2. V následujícím Cloud Shell nahraďte dva zástupné symboly < output-of-rails-secret>novým tajným klíčem, který jste vygeneroval v místním terminálu.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings RAILS_MASTER_KEY="<output-of-rails-secret>" SECRET_KEY_BASE="<output-of-rails-secret>" RAILS_SERVE_STATIC_FILES="true" ASSETS_PRECOMPILE="true"
    

    Nastavení ASSETS_PRECOMPILE="true" sdělí kontejneru Ruby, že se mají při každém nasazení z Gitu předkompilovat prostředky. Další informace najdete v tématu Předkompilování prostředků a Obsluhu statických prostředků.

Přenos z Gitu do Azure

  1. Vzhledem k tomu, že nasazujete větev , musíte nastavit výchozí větev nasazení pro main vaši App Service main na (viz Změna větve nasazení). V Cloud Shell nastavte nastavení DEPLOYMENT_BRANCH aplikace pomocí az webapp config appsettings set příkazu .

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  2. V místním terminálu přidejte do místního úložiště Gitu vzdálené prostředí Azure.

    git remote add azure <paste-copied-url-here>
    
  3. Nasdílením změn do vzdáleného prostředí Azure nasaďte aplikaci Ruby on Rails. Zobrazí se výzva k zadání hesla, které jste zadali dříve v rámci vytváření uživatele nasazení.

    git push azure main
    

    Během nasazení bude služba Azure App Service hlásit Gitu průběh nasazení.

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

Snímek obrazovky s příkladem aplikace Azure s názvem Úlohy zobrazující úkoly přidané do seznamu

Blahopřejeme! Teď máte ve službě Azure App Service spuštěnou aplikaci Ruby on Rails založenou na datech.

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

  1. V terminálu přejděte do kořenového adresáře úložiště Git.

  2. Vytvořte novou migraci, která přidá do tabulky Tasks logický sloupec s názvem Done:

    rails generate migration AddDoneToTasks Done:boolean
    

    Tento příkaz vygeneruje v adresáři db/migrate nový soubor migrace.

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

    rake db:migrate
    

Aktualizace logiky aplikace

  1. Otevřete soubor app/controllers/tasks_controller.rb. Na konci souboru najdete následující řádek:

    params.require(:task).permit(:Description)
    
  2. Tento řádek upravte tak, aby obsahoval nový parametr Done.

    params.require(:task).permit(:Description, :Done)
    

Aktualizace zobrazení

  1. Otevřete soubor app/views/tasks/_form.html.erb, což je formulář pro úpravy.

  2. Najděte řádek <%=f.error_span(:Description) %> a přímo pod něj vložte následující kód:

    <%= f.label :Done, :class => 'control-label col-lg-2' %>
    <div class="col-lg-10">
      <%= f.check_box :Done, :class => 'form-control' %>
    </div>
    
  3. Otevřete soubor app/views/tasks/show.html.erb což je stránka zobrazení s jedním záznamem.

    Najděte řádek <dd><%= @task.Description %></dd> a přímo pod něj vložte následující kód:

      <dt><strong><%= model_class.human_attribute_name(:Done) %>:</strong></dt>
      <dd><%= check_box "task", "Done", {:checked => @task.Done, :disabled => true}%></dd>
    

    Otevřete soubor app/views/tasks/index.html.erb, což je indexová stránka pro všechny záznamy.

    Najděte řádek <th><%= model_class.human_attribute_name(:Description) %></th> a přímo pod něj vložte následující kód:

    <th><%= model_class.human_attribute_name(:Done) %></th>
    
  4. Ve stejném souboru najděte řádek <td><%= task.Description %></td> a přímo pod něj vložte následující kód:

    <td><%= check_box "task", "Done", {:checked => task.Done, :disabled => true} %></td>
    

Místní test provedených změn

  1. V místní terminálu spusťte server Rails.

    rails server
    
  2. Pokud chcete vidět změnu stavu úkolu, přejděte na adresu http://localhost:3000 a přidejte nebo upravte položky.

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

  3. Pokud chcete server Rails zastavit, zadejte do terminálu Ctrl + C.

Publikování změn v Azure

  1. V terminálu spusťte migrace databáze Rails, aby produkční prostředí provedlo změnu v databázi Azure.

    rake db:migrate RAILS_ENV=production
    
  2. 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
    
  3. 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á.

Streamování diagnostických protokolů

Pokud chcete získat přístup k protokolům konzoly vygenerovaným v rámci kódu aplikace ve službě App Service, zapněte protokolování diagnostiky spuštěním následujícího příkazu v Cloud Shellu:

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

Možné hodnoty pro --level jsou: Error, Warning, Info a Verbose. Každá další úroveň zahrnuje předchozí úroveň. Například Error zahrnuje jenom chybové zprávy a Verbose zahrnuje všechny zprávy.

Jakmile je aktivované protokolování diagnostiky, spusťte následující příkaz pro zobrazení streamu protokolů:

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

Pokud nevidíte protokoly konzoly okamžitě, podívejte se znovu za 30 sekund.

Poznámka

Soubory protokolu můžete také zkontrolovat v prohlížeči na https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Streamování protokolů můžete kdykoli zastavit zadáním Ctrl+C.

Správa aplikace Azure

  1. Přejděte do Azure Portal a spravujte aplikaci, kterou jste vytvořili.

  2. V nabídce vlevo klikněte na App Services a pak klikněte na název vaší aplikace Azure.

    Přechod do aplikace Azure na portálu

    Zobrazí se stránka Přehled vaší aplikace. Tady můžete provádět základní úkoly správy, jako je zastavení, spuštění, restartování, procházení a odstranění.

    Levá nabídka obsahuje stránky pro konfiguraci vaší aplikace.

    Stránka služby App Service na webu Azure Portal

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

Spuštění tohoto příkazu může trvat přibližně minut.

Další kroky

V tomto kurzu jste se naučili:

  • Vytvořit v Azure databázi Postgres
  • Připojit k Postgres aplikaci Ruby on Rails
  • Nasadit aplikaci do Azure
  • Aktualizovat datový model a znovu nasadit aplikaci
  • Streamovat diagnostické protokoly z Azure
  • Spravovat aplikaci na webu Azure Portal

V dalším kurzu se dozvíte, jak namapovat vlastní název DNS na vaši aplikaci.

Nebo se podívejte na další zdroje informací: