Azure'a Node.js + MongoDB web uygulaması dağıtma

Azure App Service, Linux işletim sistemini kullanarak yüksek oranda ölçeklenebilir, kendi kendine düzeltme eki uygulamalı bir web barındırma hizmeti sağlar. Bu öğreticide, MongoDB için Azure Cosmos DB veritabanına bağlı Azure App Service güvenli bir Node.js uygulamasının nasıl oluşturulacağı gösterilmektedir. İşiniz bittiğinde, Linux üzerinde Azure App Service üzerinde çalışan bir Express.js uygulamanız olacak.

Express.js uygulamasının Azure App Service dağıtılacağını ve MongoDB verilerinin Azure Cosmos DB'de nasıl barındırılacağını gösteren diyagram.

Bu makalede ,Node.js geliştirme hakkında zaten bilgi sahibi olduğunuz ve Node ile MongoDB'nin yerel olarak yüklendiği varsayılır. Etkin aboneliği olan bir Azure hesabına da ihtiyacınız olacaktır. Azure hesabınız yoksa ücretsiz olarak bir hesap oluşturabilirsiniz.

Örnek uygulama

Bu öğreticiyi takip etmek için, örnek uygulamayı deposundan https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-appkopyalayın veya indirin.

git clone https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app.git

Uygulamayı yerel olarak çalıştırmak istiyorsanız aşağıdakileri yapın:

  • komutunu çalıştırarak npm installpaket bağımlılıklarını yükleyin.
  • dosyasını konumuna .env.sample.env kopyalayın ve DATABASE_URL değerini MongoDB URL'nizle doldurun (örneğin mongodb://localhost:27017/).
  • kullanarak npm startuygulamayı başlatın.
  • Uygulamayı görüntülemek için adresine http://localhost:3000gidin.

1. App Service ve Azure Cosmos DB oluşturma

Bu adımda Azure kaynaklarını oluşturursunuz. Bu öğreticide kullanılan adımlar, App Service ve MongoDB için Azure Cosmos DB'yi içeren varsayılan olarak güvenli bir kaynak kümesi oluşturur. Oluşturma işlemi için şunları belirteceksiniz:

  • Web uygulamasının Adı . Web uygulamanızın DNS adının bir parçası olarak biçiminde kullanılan addır https://<app-name>.azurewebsites.net.
  • Uygulamayı fiziksel olarak dünyada çalıştırılacak Bölge .
  • Uygulamanın Çalışma Zamanı yığını . Burada, uygulamanız için kullanılacak Node sürümünü seçersiniz.
  • Uygulama için Barındırma planı . Bu, uygulamanızın özellik kümesini ve ölçeklendirme kapasitesini içeren fiyatlandırma katmanıdır.
  • Uygulamanın Kaynak Grubu . Kaynak grubu, uygulama için gereken tüm Azure kaynaklarını gruplandırmanıza (mantıksal bir kapsayıcıda) olanak tanır.

Azure portal oturum açın ve Azure App Service kaynaklarınızı oluşturmak için bu adımları izleyin.

1. Adım: Azure portal:

  1. Azure portal üst kısmındaki arama çubuğuna "web uygulaması veritabanı" yazın.
  2. Market başlığı altında Web Uygulaması + Veritabanı etiketli öğeyi seçin. Oluşturma sihirbazına doğrudan da gidebilirsiniz.

Web Uygulaması + Veritabanı oluşturma sihirbazını bulmak için üst araç çubuğundaki arama kutusunun nasıl kullanılacağını gösteren ekran görüntüsü.

2. Adım:Web Uygulaması + Veritabanı Oluştur sayfasında, formu aşağıdaki gibi doldurun.

  1. Kaynak GrubuYeni oluştur'u seçin ve msdocs-expressjs-mongodb-tutorial adını kullanın.
  2. Bölge → Yakınınızda herhangi bir Azure bölgesi.
  3. msdocs-expressjs-mongodb-XYZadlı →, burada XYZ herhangi bir rastgele karakterdir. Bu ad Azure genelinde benzersiz olmalıdır.
  4. Node 16 LTSçalışma zamanı yığını.
  5. Barındırma planıBasic. Hazır olduğunuzda, daha sonra bir üretim fiyatlandırma katmanına ölçek artırabilirsiniz .
  6. MongoDB için Azure Cosmos DB , varsayılan olarak veritabanı altyapısı olarak seçilir. Azure Cosmos DB, %100 MongoDB uyumlu bir API sunan buluta özel bir veritabanıdır. Sizin için oluşturulan veritabanı adını (<app-name-database>) not edin. Buna daha sonra ihtiyacınız olacak.
  7. Gözden geçir ve oluştur’u seçin.
  8. Doğrulama tamamlandıktan sonra Oluştur'u seçin.

Web Uygulaması + Veritabanı sihirbazında yeni bir uygulamayı ve veritabanını yapılandırmayı gösteren ekran görüntüsü.

3. Adım: Dağıtımın tamamlanması birkaç dakika sürer. Dağıtım tamamlandıktan sonra Kaynağa git düğmesini seçin. Doğrudan App Service uygulamasına yönlendirilirsiniz, ancak aşağıdaki kaynaklar oluşturulur:

  • Kaynak grubu → Oluşturulan tüm kaynaklar için kapsayıcı.
  • App Service plan → App Service için işlem kaynaklarını tanımlar. Temel katmanda bir Linux planı oluşturulur.
  • App Service → Uygulamanızı temsil eder ve App Service planında çalışır.
  • Sanal ağ → App Service uygulamasıyla tümleşiktir ve arka uç ağ trafiğini yalıttır.
  • Özel uç nokta → Sanal ağdaki veritabanı kaynağı için Erişim uç noktası.
  • Ağ arabirimi → Özel uç nokta için özel ip adresini temsil eder.
  • MongoDB için Azure Cosmos DB → Yalnızca özel uç noktanın arkasından erişilebilir. Sunucuda sizin için bir veritabanı ve kullanıcı oluşturulur.
  • Özel DNS bölge → Sanal ağdaki Azure Cosmos DB sunucusunun DNS çözümlemesini etkinleştirir.

Dağıtım işleminin tamamlandığını gösteren ekran görüntüsü.

2. Veritabanı bağlantısını ayarlama

Oluşturma sihirbazı sizin için Zaten MongoDB URI'sini oluşturdu, ancak uygulamanızın bir DATABASE_URL değişkene ve değişkene DATABASE_NAME ihtiyacı var. Bu adımda, uygulamanızın ihtiyaç duyduğu biçime sahip uygulama ayarları oluşturursunuz.

1. Adım: App Service sayfasının sol menüsünde Yapılandırma'yı seçin.

yapılandırma sayfasının App Service'de nasıl açılıp açılmayacaklarını gösteren ekran görüntüsü.

2. Adım:Yapılandırma sayfasının Uygulama ayarları sekmesinde bir DATABASE_NAME ayar oluşturun:

  1. Yeni uygulama ayarı'nı seçin.
  2. Ad alanına DATABASE_NAME girin.
  3. Değer alanına, oluşturma sihirbazından otomatik olarak oluşturulan ve msdocs-expressjs-mongodb-XYZ-database gibi görünen veritabanı adını girin.
  4. Tamam’ı seçin.

Otomatik olarak oluşturulan bağlantı dizesini nasıl göreceğinizi gösteren ekran görüntüsü.

3. Adım:

  1. Sayfanın en altına kaydırın ve MONGODB_URI bağlantı dizesini seçin. Oluşturma sihirbazı tarafından oluşturulmuştur.
  2. Değer alanında Kopyala düğmesini seçin ve değeri bir sonraki adım için bir metin dosyasına yapıştırın. MongoDB bağlantı dizesi URI biçimindedir.
  3. İptal’i seçin.

Uygulama ayarının nasıl oluşturulacağını gösteren ekran görüntüsü.

4. Adım:

  1. 2. Adım'da da aynı adımları kullanarak DATABASE_URL adlı bir uygulama ayarı oluşturun ve değeri bağlantı dizesinden MONGODB_URI kopyaladığınız değere ayarlayın (örneğinmongodb://...).
  2. Üstteki menü çubuğunda Kaydet'i seçin.
  3. İstendiğinde Devam'ı seçin.

Yapılandırma sayfasında ayarları kaydetmeyi gösteren ekran görüntüsü.

3. Örnek kodu dağıtma

Bu adımda, GitHub Actions kullanarak GitHub dağıtımını yapılandıracaksınız. Bu, App Service dağıtmanın birçok yolundan yalnızca biridir, aynı zamanda dağıtım sürecinizde sürekli tümleştirmeye sahip olmanın harika bir yoludur. Varsayılan olarak, GitHub deponuzun her git push örneği derleme ve dağıtma eylemini başlatacaktır.

1. Adım: Yeni bir tarayıcı penceresinde:

  1. GitHub hesabınızda oturum açın.
  2. https://github.com/Azure-Samples/msdocs-nodejs-mongodb-azure-sample-app sayfasına gidin.
  3. Çatal'ı seçin.
  4. Çatal oluştur'u seçin.

Örnek GitHub deposunun çatalını oluşturmayı gösteren ekran görüntüsü.

2. Adım: GitHub sayfasında, tuşa basarak . tarayıcıda Visual Studio Code açın.

GitHub'da Visual Studio Code tarayıcı deneyimini açmayı gösteren ekran görüntüsü.

3. Adım: Tarayıcıdaki Visual Studio Code explorer'da config/connection.js açın. işlevinde getConnectionInfo , MongoDB bağlantısı için daha önce oluşturduğunuz uygulama ayarlarının (DATABASE_URL ve DATABASE_NAME) kullanıldığına bakın.

Tarayıcıda Visual Studio Code ve açık bir dosyayı gösteren ekran görüntüsü.

4. Adım: App Service sayfasının sol menüsünde Dağıtım Merkezi'ni seçin.

App Service'da dağıtım merkezini açmayı gösteren ekran görüntüsü.

5. Adım: Dağıtım Merkezi sayfasında:

  1. Kaynak bölümünde GitHub'ı seçin. Varsayılan olarak, derleme sağlayıcısı olarak GitHub Actions seçilir.
  2. GitHub hesabınızda oturum açın ve Azure'ı yetkilendirme istemini izleyin.
  3. Kuruluş'ta hesabınızı seçin.
  4. Depo'damsdocs-nodejs-mongodb-azure-sample-app öğesini seçin.
  5. Dal'daana'yı seçin.
  6. Üstteki menüde Kaydet'i seçin. App Service bir iş akışı dosyasını dizindeki seçilen GitHub deposuna .github/workflows işler.

GitHub Actions kullanarak CI/CD'yi yapılandırmayı gösteren ekran görüntüsü.

6. Adım: Dağıtım Merkezi sayfasında:

  1. Günlükler’i seçin. Dağıtım çalıştırması zaten başlatıldı.
  2. Dağıtım çalıştırmasının günlük öğesinde Günlükleri Oluştur/Dağıt'ı seçin.

Dağıtım merkezinde dağıtım günlüklerini açmayı gösteren ekran görüntüsü.

7. Adım: GitHub deponuza yönlendirilirsiniz ve GitHub eyleminin çalıştığını görürsünüz. İş akışı dosyası derleme ve dağıtma olarak iki ayrı aşama tanımlar. GitHub çalıştırmasının Tamamlandı durumunu göstermesini bekleyin. Yaklaşık 15 dakika sürer.

GitHub çalıştırma işleminin devam etmekte olduğunu gösteren ekran görüntüsü.

4. Uygulamaya göz atın

1. Adım: App Service sayfasında:

  1. Soldaki menüden Genel Bakış'ı seçin.
  2. Uygulamanızın URL'sini seçin. Doğrudan adresine https://<app-name>.azurewebsites.netde gidebilirsiniz.

Azure portal bir App Service nasıl başlatıldığını gösteren ekran görüntüsü.

2. Adım: Listeye birkaç görev ekleyin. Tebrikler, Azure App Service'de güvenli bir veri temelli Node.js uygulaması çalıştırıyorsunuz.

App Service'da çalışan Express.js uygulamasının ekran görüntüsü.

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

Azure App Service, uygulamanızla ilgili sorunları tanılamanıza yardımcı olmak için konsolda günlüğe kaydedilen tüm iletileri yakalar. Örnek uygulama, bu özelliği göstermek için uç noktalarının her birinde konsol günlük iletilerinin çıkışını alır. Örneğin, get uç nokta veritabanından alınan görev sayısı hakkında bir ileti verir ve bir sorun oluştuğunda bir hata iletisi görüntülenir.

router.get('/', function(req, res, next) {
  Task.find()
    .then((tasks) => {      
      const currentTasks = tasks.filter(task => !task.completed);
      const completedTasks = tasks.filter(task => task.completed === true);

      console.log(`Total tasks: ${tasks.length}   Current tasks: ${currentTasks.length}    Completed tasks:  ${completedTasks.length}`)
      res.render('index', { currentTasks: currentTasks, completedTasks: completedTasks });
    })
    .catch((err) => {
      console.log(err);
      res.send('Sorry! Something went wrong.');
    });
});

1. Adım: App Service sayfasında:

  1. Soldaki menüden App Service günlükleri'ni seçin.
  2. Uygulama günlüğü'nin altında Dosya Sistemi'ne tıklayın.

Azure portal App Service yerel günlüklerin nasıl etkinleştirileceğine ilişkin ekran görüntüsü.

2. Adım: Soldaki menüden Günlük akışı'nı seçin. Kapsayıcının içinden platform günlükleri ve günlükler de dahil olmak üzere uygulamanızın günlüklerini görürsünüz.

Azure portal günlük akışını görüntülemeyi gösteren ekran görüntüsü.

6. Kudu kullanarak dağıtılan dosyaları inceleme

Azure App Service, web uygulamanızın sunucu barındırma ortamını incelemenize olanak tanıyan Kudu adlı web tabanlı bir tanılama konsolu sağlar. Kudu'yu kullanarak Azure'a dağıtılan dosyaları görüntüleyebilir, uygulamanın dağıtım geçmişini gözden geçirebilir ve hatta barındırma ortamında bir SSH oturumu açabilirsiniz.

1. Adım: App Service sayfasında:

  1. Soldaki menüden Gelişmiş Araçlar'ı seçin.
  2. Git'i seçin. Doğrudan adresine https://<app-name>.scm.azurewebsites.netde gidebilirsiniz.

App Service Kudu sayfasına gitmeyi gösteren ekran görüntüsü.

2. Adım: Kudu sayfasında Dağıtımlar'ı seçin.

Barındırma ortamı hakkında sağlanan farklı bilgileri gösteren Kudu SCM uygulamasındaki ana sayfanın ekran görüntüsü.

Git veya zip dağıtımı kullanarak App Service kodu dağıttıysanız web uygulamanızın dağıtım geçmişini görürsünüz.

JSON biçiminde bir App Service uygulamasının dağıtım geçmişini gösteren ekran görüntüsü.

3. Adım: Kudu giriş sayfasına Geri dön ve Site wwwroot öğesini seçin.

Wwwroot sitesinin seçili olduğunu gösteren ekran görüntüsü.

Dağıtılan klasör yapısını görebilir ve dosyalara göz atmak ve dosyaları görüntülemek için tıklayın.

wwwroot dizininde dağıtılan dosyaların ekran görüntüsü.

7. Kaynakları temizleme

İşiniz bittiğinde, kaynak grubunu silerek Azure aboneliğinizdeki tüm kaynakları silebilirsiniz.

1. Adım: Azure portal üst kısmındaki arama çubuğunda:

  1. Kaynak grubu adını girin.
  2. Kaynak grubunu seçin.

Azure portal bir kaynak grubu arama ve bu gruba gitme adımlarını gösteren ekran görüntüsü.

2. Adım: Kaynak grubu sayfasında Kaynak grubunu sil'i seçin.

Azure portal Kaynak Grubunu Sil düğmesinin konumunu gösteren ekran görüntüsü.

3. Adım:

  1. Silme işleminizi onaylamak için kaynak grubu adını girin.
  2. Sil’i seçin.

Azure portal kaynak grubunu silmeye yönelik onay iletişim kutusunun ekran görüntüsü. :

Sık sorulan sorular

Bu kurulumun maliyeti ne kadardır?

Kaynak oluşturma fiyatlandırması aşağıdaki gibidir:

Nasıl yaparım? diğer araçlarla sanal ağın arkasında güvenliği sağlanan Azure Cosmos DB sunucusuna bağlanıyor musunuz?

  • Komut satırı aracından temel erişim için uygulamanın SSH terminalinden çalıştırabilirsiniz mongosh . Uygulamanın kapsayıcısı ile mongoshbirlikte gelmez, bu nedenle el ile yüklemeniz gerekir. Yüklü istemcinin uygulama yeniden başlatmalarında kalıcı olmadığını unutmayın.
  • MongoDB GUI istemcisinden bağlanmak için makinenizin sanal ağ içinde olması gerekir. Örneğin, alt ağlardan birine bağlı bir Azure VM veya Azure sanal ağıyla siteden siteye VPN bağlantısı olan bir şirket içi ağda bulunan bir makine olabilir.
  • Portaldaki Azure Cosmos DB yönetim sayfasından MongoDB kabuğundan bağlanmak için makinenizin de sanal ağ içinde olması gerekir. Bunun yerine yerel makinenizin IP adresi için Azure Cosmos DB sunucusunun güvenlik duvarını açabilirsiniz, ancak yapılandırmanız için saldırı yüzeyini artırır.

Yerel uygulama geliştirme GitHub Actions ile nasıl çalışır?

Her biri yeni bir derleme ve dağıtım çalıştırmasını başlatan bir örnek olarak App Service git push otomatik oluşturulan iş akışı dosyasını alın. GitHub deposunun yerel bir kopyasından, istenen güncelleştirmelerin GitHub'a göndermesini sağlarsınız. Örnek:

git add .
git commit -m "<some-message>"
git push origin main

GitHub Actions dağıtımı neden bu kadar yavaş?

App Service'den otomatik olarak oluşturulan iş akışı dosyası, derleme ve dağıtma, iki iş çalıştırmasını tanımlar. Her iş kendi temiz ortamında çalıştığından, iş akışı dosyası işin işten dosyalara erişmesini build sağlardeploy:

İki işli işlem tarafından geçen sürenin çoğu yapıtları karşıya yüklemek ve indirmek için harcanıyor. İsterseniz, iki işi birleştirerek iş akışı dosyasını basitleştirebilir ve bu sayede karşıya yükleme ve indirme adımları gereksinimi ortadan kalkar.

Sonraki adımlar