Membuat komputer virtual Express.js menggunakan Azure CLI
Dalam tutorial ini, buat mesin virtual Linux (Mesin Virtual) untuk aplikasi Express.js. Mesin Virtual dikonfigurasikan dengan file konfigurasi cloud-init dan mencakup NGINX dan repositori GitHub untuk aplikasi Express.js. Koneksi ke VM dengan SSH, ubah aplikasi web untuk menyertakan pencatatan jejak, dan lihat aplikasi server Express.js publik di browser web.
Tutorial ini mencakup tugas-tugas berikut:
- Masuk ke Azure dengan Azure CLI
- Membuat sumber daya Azure Linux VM dengan Azure CLI
- Buka port publik 80
- Instal demo Express.js aplikasi web dari repositori GitHub
- Instal dependensi aplikasi web
- Mulai aplikasi web
- Membuat sumber daya Azure Monitoring dengan Azure CLI
- Hubungkan ke VM dengan SSH
- Instal pustaka klien Azure SDK dengan npm
- Tambahkan kode pustaka klien Application Insights untuk membuat penelusuran khusus
- Menampilkan aplikasi web dari browser
- Meminta rute
/trace
untuk membuat penelusuran kustom di log Application Insights - Melihat jumlah jejak yang dikumpulkan dalam log dengan Azure CLI
- Melihat daftar jejak dengan portal Microsoft Azure
- Meminta rute
- Menghapus sumber daya dengan Azure CLI
Membuat atau menggunakan langganan Azure yang sudah ada
Anda memerlukan akun pengguna Azure dengan langganan aktif. Buat akun gratis.
Prasyarat
- SSH untuk menyambungkan ke VM: Gunakan Azure Cloud Shell atau terminal modern seperti shell bash, yang mencakup SSH.
Gunakan lingkungan Bash di Azure Cloud Shell. Untuk informasi selengkapnya, lihat Mulai Cepat untuk Bash di Azure Cloud Shell.
Jika Anda lebih suka menjalankan perintah referensi CLI secara lokal, instal Azure CLI. Jika Anda menjalankan Windows atau macOS, pertimbangkan untuk menjalankan Azure CLI dalam kontainer Docker. Untuk informasi lebih lanjut, lihat Cara menjalankan Azure CLI di kontainer Docker.
Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah login az. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda. Untuk opsi masuk lainnya, lihat Masuk dengan Azure CLI.
Saat Anda diminta, instal ekstensi Azure CLI pada penggunaan pertama. Untuk informasi selengkapnya tentang ekstensi, lihat Menggunakan ekstensi dengan Azure CLI.
Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az.
1. Buat sumber daya Application Insights untuk halaman web
Buat grup sumber daya Azure untuk semua sumber daya Azure Anda dan sumber daya Monitor untuk mengumpulkan file log aplikasi web Anda ke cloud Azure. Membuat grup sumber daya memungkinkan Anda menemukan sumber daya dengan mudah, dan menghapusnya setelah selesai. Azure Monitor adalah nama layanan Azure, sedangkan Application Insights adalah nama pustaka klien yang digunakan tutorial.
Opsional, jika Anda memiliki lebih dari satu langganan, gunakan az account set untuk mengatur langganan default sebelum menyelesaikan perintah yang tersisa.
az account set \ --subscription "ACCOUNT NAME OR ID"
Buat grup sumber daya Azure dengan buat grup az. Gunakan nama
rg-demo-vm-eastus
:az group create \ --location eastus \ --name rg-demo-vm-eastus
Buat sumber daya Azure Monitor dengan Azure CLI
Instal ekstensi Application Insights ke Azure CLI.
az extension add -n application-insights
Gunakan perintah berikut untuk membuat sumber daya pemantauan, dengan az monitor app-insights component create:
az monitor app-insights component create \ --app demoWebAppMonitor \ --location eastus \ --resource-group rg-demo-vm-eastus \ --query instrumentationKey --output table
Salin Hasil dari output, Anda akan memerlukan nilai tersebut sebagai
instrumentationKey
nanti.Biarkan terminal terbuka, Anda akan menggunakannya di langkah berikutnya.
2. Buat komputer virtual Linux menggunakan Azure CLI
Menggunakan file konfigurasi cloud-init untuk membuat server proksi terbalik NGINX dan server Express.js. NGINX digunakan untuk meneruskan port Express.js (3000) ke port umum (80).
Buat file lokal bernama
cloud-init-github.txt
dan simpan konten berikut ke file atau Anda dapat menyimpan file repositori ke komputer lokal Anda. File yang diformat cloud-init harus ada di folder yang sama dengan jalur terminal untuk perintah Azure CLI Anda.#cloud-config package_upgrade: true packages: - nginx write_files: - owner: www-data:www-data path: /etc/nginx/sites-available/default content: | server { listen 80 default_server; server_name _; location / { # First, try if the file exists locally, otherwise request it from the app try_files $uri @app; } location @app { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } runcmd: # install Node.js - 'curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -' - 'sudo apt-get install -y nodejs' # clone GitHub Repo into myapp directory - 'cd /home/azureuser' - git clone "https://github.com/Azure-Samples/js-e2e-vm" myapp # Start app - 'cd myapp && npm install && npm start' # restart NGINX - systemctl restart nginx
runcmd
Tinjau bagian file untuk memahami apa yang dilakukannya.runcmd
memiliki beberapa tugas:- Unduh Node.js, dan instal
- Mengkloning repositori sampel Express.js dari GitHub ke
myapp
direktori - Instal dependensi aplikasi
- Mulai aplikasi Express.js dengan PM2
Buat sumber daya mesin virtual
Masukkan perintah Azure CLI, az vm create, di terminal untuk membuat sumber daya Azure dari mesin virtual Linux. Perintah membuat VM dari file cloud-init dan menghasilkan kunci SSH untuk Anda. Perintah berjalan menampilkan tempat kunci disimpan.
az vm create \ --resource-group rg-demo-vm-eastus \ --name demo-vm \ --location eastus \ --public-ip-sku Standard \ --image UbuntuLTS \ --admin-username azureuser \ --generate-ssh-keys \ --custom-data cloud-init-github.txt
Tunggu sementara prosesnya mungkin memakan waktu beberapa menit.
Jaga nilai publicIpAddress dari respons, diperlukan untuk melihat aplikasi web di browser dan untuk menyambungkan ke VM. Jika Anda kehilangan IP ini, gunakan perintah Azure CLI, az vm list-ip-addresses untuk mendapatkannya lagi.
Proses membuat kunci SSH dan tetapi di lokasi yang dinyatakan dalam respons.
Buka lokasi tersebut
authorized_keys
dan buat file:cd <SSH-KEY-LOCATION> && cat id_rsa >> authorized_keys
Buka port untuk mesin virtual
Saat pertama kali dibuat, mesin virtual tidak memiliki port terbuka. Buka port 80 dengan perintah Azure CLI berikut, az vm open-port sehingga aplikasi web tersedia untuk umum:
az vm open-port \
--port 80 \
--resource-group rg-demo-vm-eastus \
--name demo-vm
Jelajahi situs web
Gunakan alamat IP publik di browser web untuk memastikan mesin virtual tersedia dan berjalan. Ubah URL untuk menggunakan nilai dari
publicIpAddress
.http://YOUR-VM-PUBLIC-IP-ADDRESS
Jika sumber daya gagal dengan kesalahan gateway, coba lagi dalam satu menit, aplikasi web mungkin memerlukan waktu satu menit untuk memulai.
Aplikasi web mesin virtual mengembalikan informasi berikut:
- Nama komputer virtual
- IP klien Anda
- Tanggal/Waktu Saat Ini
File kode awal untuk aplikasi web memiliki satu rute, yang melewati proxy NGINX.
const os = require('os'); const express = require('express') const app = express() app.use('/public', express.static('public')) app.get('/', function (req, res) { const clientIP = req.headers['x-forwarded-for']; const msg = `HostName: ${os.hostname()}<br>ClientIP: ${clientIP}<br>DateTime: ${new Date()}<br><img width='200' height='200' src='/public/leaves.jpg' alt='flowers'>` console.log(msg) res.send(msg) }) app.listen(3000, function () { console.log(`Hello world app listening on port 3000! ${Date.now()}`) })
3. Koneksi ke komputer virtual Linux menggunakan SSH
Di bagian tutorial ini, gunakan SSH di terminal untuk terhubung ke mesin virtual Anda. SSH adalah alat umum yang disediakan dengan berbagai shell modern, termasuk Azure Cloud Shell.
Hubungkan dengan SSH dan ubah aplikasi web
Hubungkan ke mesin virtual jarak jauh dengan perintah berikut.
Ganti
YOUR-VM-PUBLIC-IP
dengan IP publik mesin virtual Anda sendiri.ssh azureuser@YOUR-VM-PUBLIC-IP
Proses ini mengasumsikan bahwa klien SSH Anda dapat menemukan kunci SSH Anda, dibuat sebagai bagian dari pembuatan VM Anda dan ditempatkan pada komputer lokal Anda.
Jika Anda ditanya apakah Anda yakin ingin tersambung, menjawab
y
, atauyes
melanjutkan.Gunakan perintah berikut untuk memahami di mana Anda berada di mesin virtual. Anda harus berada di akar azureuser:
/home/azureuser
.pwd
Ketika koneksi selesai, perintah terminal harus berubah untuk menunjukkan nama pengguna dan nama sumber daya komputer virtual jarak jauh.
azureuser@demo-vm:
Aplikasi web Anda berada di subdirektori,
myapp
. Ubah ke direktorimyapp
dan cantumkan kontennya:cd myapp && ls -l
Anda akan melihat konten yang mewakili repositori GitHub yang dikloning ke komputer virtual dan file paket npm:
-rw-r--r-- 1 root root 891 Nov 11 20:23 cloud-init-github.txt -rw-r--r-- 1 root root 1347 Nov 11 20:23 index-logging.js -rw-r--r-- 1 root root 282 Nov 11 20:23 index.js drwxr-xr-x 190 root root 4096 Nov 11 20:23 node_modules -rw-r--r-- 1 root root 84115 Nov 11 20:23 package-lock.json -rw-r--r-- 1 root root 329 Nov 11 20:23 package.json -rw-r--r-- 1 root root 697 Nov 11 20:23 readme.md
Instal SDK Pemantauan
Di terminal SSH, yang terhubung ke komputer virtual Anda, instal pustaka klien Azure SDK untuk Application Insights.
sudo npm install --save applicationinsights
Tunggu sampai perintah selesai sebelum melanjutkan.
Menambahkan kunci instrumentasi Pemantauan
Di terminal SSH, yang terhubung ke mesin virtual Anda, gunakan editor Nano untuk membuka file
package.json
.sudo nano package.json
Tambahkan variabel lingkungan
APPINSIGHTS_INSTRUMENTATIONKEY
ke awal skrip Mulai Anda. Dalam contoh berikut, gantiREPLACE-WITH-YOUR-KEY
dengan nilai kunci instrumentasi Anda."start": "APPINSIGHTS_INSTRUMENTATIONKEY=REPLACE-WITH-YOUR-KEY pm2 start index.js --watch --log /var/log/pm2.log"
Masih di terminal SSH, simpan file di editor Nano dengan control + X.
Jika diminta di editor Nano, masukkan Y untuk menyimpan.
Jika diminta di editor Nano, terima nama file saat diminta.
Hentikan VM untuk mengubah aplikasi
Pustaka klien Azure sekarang ada di direktori node_modules Anda dan kunci diteruskan ke aplikasi sebagai variabel lingkungan. Langkah berikutnya secara terprogram menggunakan Application Insights.
Stop PM2, yang merupakan manajer proses produksi untuk aplikasi Node.js, dengan perintah berikut:
sudo npm run-script stop
Ganti asli
index.js
dengan file menggunakan Application Insights.sudo npm run-script appinsights
Pustaka klien dan kode pengelogan disediakan untuk Anda.
const express = require('express') const app = express() const os = require('os'); console.log(JSON.stringify(process.env)); const AppInsights = require('applicationinsights'); if (process.env.APPINSIGHTS_INSTRUMENTATIONKEY) { console.log(`AppInsights configured with key ${process.env.APPINSIGHTS_INSTRUMENTATIONKEY}`); } else{ console.log(`AppInsights not configured`); } AppInsights.setup(process.env.APPINSIGHTS_INSTRUMENTATIONKEY) .setAutoDependencyCorrelation(true) .setAutoCollectRequests(true) .setAutoCollectPerformance(true, true) .setAutoCollectExceptions(true) .setAutoCollectDependencies(true) .setAutoCollectConsole(true) .setUseDiskRetryCaching(true) .setSendLiveMetrics(false) .setDistributedTracingMode(AppInsights.DistributedTracingModes.AI) .start(); const AppInsightsClient = AppInsights.defaultClient; app.get('/trace', (req, res) => { const clientIP = req.headers['x-forwarded-for']; const msg = `trace route ${os.hostname()} ${clientIP} ${new Date()}`; console.log(msg) if (process.env.APPINSIGHTS_INSTRUMENTATIONKEY) { AppInsightsClient.trackPageView(); AppInsightsClient.trackTrace({ message: msg }) AppInsightsClient.flush(); } else { msg += ' AppInsights not configured'; } res.send(`${msg}`) }) app.get('/', function (req, res) { const clientIP = req.headers['x-forwarded-for']; const msg = `root route ${os.hostname()} ${clientIP} ${new Date()}` console.log(msg) res.send(msg) }) app.listen(3000, function () { console.log(`Hello world app listening on port 3000! ${os.hostname()}`) })
Mulai ulang aplikasi dengan PM2 untuk mengambil variabel lingkungan berikutnya.
sudo npm start
Menggunakan aplikasi untuk memverifikasi pengelogan
Di browser web, uji aplikasi dengan rute
trace
baru:http://YOUR-VM-PUBLIC-IP-ADDRESS/trace
Browser menampilkan respons,
trace route demo-vm YOUR-CLIENT-IP VM-DATE-TIME
dengan alamat IP Anda.
Melihat log untuk NGINX
Mesin virtual (VM) mengumpulkan log untuk NGINX, yang tersedia untuk dilihat.
Layanan | Lokasi log |
---|---|
NGINX | /var/log/nginx/access.log |
- Masih di terminal SSH, lihat log VM untuk layanan proksi NGINX dengan perintah berikut untuk melihat log:
cat /var/log/nginx/access.log
- Log menyertakan panggilan dari komputer lokal Anda.
"GET /trace HTTP/1.1" 200 10 "-"
Melihat log untuk PM2
Mesin virtual mengumpulkan log untuk PM2, yang tersedia untuk dilihat.
Layanan | Lokasi log |
---|---|
PM2 | /var/log/pm2.log |
Lihat log VM untuk layanan PM2, yang merupakan aplikasi web Node Express.js Anda. Di shell bash yang sama, gunakan perintah berikut untuk melihat log:
cat /var/log/pm2.log
Log menyertakan panggilan dari komputer lokal Anda.
grep "Hello world app listening on port 3000!" /var/log/pm2.log
Log juga menyertakan variabel lingkungan Anda, termasuk kunci ApplicationInsights Anda, yang diteruskan dalam skrip mulai npm. gunakan perintah grep berikut untuk memverifikasi kunci Anda ada di variabel lingkungan.
grep APPINSIGHTS_INSTRUMENTATIONKEY /var/log/pm2.log
Ini menampilkan log PM2 Anda dengan
APPINSIGHTS_INSTRUMENTATIONKEY
disorot dalam warna yang berbeda.
Pengelogan VM dan pengelogan cloud
Dalam aplikasi ini, menggunakan console.log
menulis pesan ke log PM2 yang ditemukan hanya pada VM. Jika Anda menghapus log atau VM, Anda kehilangan informasi tersebut.
Jika Anda ingin mempertahankan log di luar masa pakai mesin virtual Anda, gunakan Application Insights.
5. Menghapus sumber daya
Setelah menyelesaikan tutorial ini, Anda perlu menghapus grup sumber daya, yang mencakup semua sumber dayanya untuk memastikan Anda tidak ditagih untuk penggunaan lagi.
Di terminal yang sama, gunakan perintah Azure CLI, az group delete, untuk menghapus grup sumber daya:
az group delete --name rg-demo-vm-eastus -y
Perintah ini membutuhkan waktu beberapa menit.
Pemecahan Masalah
Jika Anda mengalami masalah, gunakan tabel berikut untuk memahami cara mengatasi masalah Anda:
Masalah | Resolusi |
---|---|
Kesalahan Gateway 502 | Ini bisa menunjukkan file index.js atau package.js Anda memiliki kesalahan. Lihat log PM2 Anda di /var/log/pm2.log untuk informasi lebih lanjut. Kesalahan terbaru ada di bagian bawah file. Jika Anda yakin file tersebut benar, hentikan dan mulai PM2 menggunakan skrip npm di package.json . |
Kode Sampel
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk