在GCP 上建立VM 架設NIGNX Web server | Titangene Blog

文章推薦指數: 80 %
投票人數:10人

啟動Google Cloud Shell HomeArchives在GCP上建立VM架設NIGNXWebserver發表於2019-04-14|更新於2019-04-30|留言分類於Cloud目錄本篇將會做什麼?準備開始你的Lab,然後登入GCPConsole啟動GoogleCloudShell理解Regions和Zones從CloudConsole建立新的instance安裝NGINXwebserver使用gcloud建立新的instance使用gcloud設定防火牆參考來源本篇是紀錄在Google的Qwiklab平台內,完成「CreatingaVirtualMachine」這個quest所學到的內容,包括如何透過GCPConsole和command-line工具gcloud在GCP建立instance,如何使用gcloud透過SSH連接到你的instance,以及如何在VM上部署NIGNXwebserver。

透過GoogleComputeEngine,可在Google基礎架構上,建立執行不同作業系統的VM(virtualmachine,虛擬機),包括多種Linux(Debian、Ubuntu、Suse、RedHat、CoreOS)和WindowsServer。

可以學到如何使用GoogleCloudPlatform(GCP)Console和gcloudcommand-line建立各種機器類型的虛擬機instance(實例),還能學習如何將NGINXwebserver連接到VM。

若想了解如何在GCP上建立VM架設WindowsServer可參考此篇。

本篇將會做什麼?使用GCPConsole建立VM使用gcloudcommand-line建立VM在VM上部署webserver準備在點擊「StartLab」之前,準備好網路瀏覽器(推薦用GoogleChrome),並且至少40分鐘可以專注的時間,因為lab是有時間限制,當你按下「StartLab」開始學習時,無法暫停倒數計時,你只能在這段時間內使用lab提供給你的全新暫時GCPConsole可用帳號,時間到之後的幾分鐘就會自動登出。

注意:如果你有自己的個人GCP帳號或專案,請不要在此lab使用開始你的Lab,然後登入GCPConsole如果準備要開始,可以點擊右上角的「StartLab」開始:接著會出現這個畫面,因為我參加GDGTainan的活動,活動有提供Qwiklabs一個月的免費額度,所以我點選下圖左邊的「UseSubscription」:Lab會提供給你免費暫時的GCP帳號,複製帳號和密碼,然後點擊「OpenGoogleConsole」開啟GCPConsole:圖片來源:CreatingaVirtualMachine|Qwiklabs接著就會開啟登入頁面,建議另外開Chrome無痕模式來登入lab提供的帳號和密碼,因為Chrome會紀錄帳密,現在登入的只是暫時帳號,未來不需要用到:注意:這邊是登入lab提供的帳號(也就是email必須為[email protected]),如果你有自己的GCP帳號,請不要用於此lab,避免產生費用類似於[email protected]的帳號是一個Google帳號,專為Qwiklabs學生使用而建立的。

它具有特定的域名(也就是qwiklabs.net),並且已分配了IAM角色,允許你去存取該GCP專案。

接受terms和conditions:不要新增recoveryoptions或two-factorauthentication(因為這是一個臨時帳號)勾選同意服務條款:之後就可以開始使用GCPConsole囉:啟動GoogleCloudShellGoogleCloudShell是載入了開發工具的VM,它提供5GB的home目錄,並在GoogleCloud上執行。

可用GoogleCloudShell提供的command-line來存取GCP的資源。

在GCPconsole的右上方工具列中,點擊「ActivateCloudShell」按鈕:在打開的對話框內,點擊「STARTCLOUDSHELL」:連接和提供環境需要一些時間:連接後,就代表你已經過身份驗證,專案已設置為PROJECT_ID,以下圖的為例,此專案的ID為qwiklabs-gcp-f9d61ede8167e6b0:gcloud是GCP的command-line工具,他已預先安裝在CloudShell上,並且支援tab自動補齊(tab-completion)。

未來可使用gcloud的下面指令並透過PROJECT_ID來更換成其他專案:1$gcloudconfigsetproject[PROJECT_ID]使用下面指令可列出有效帳號名稱:1234567$gcloudauthlistCredentialedAccountsACTIVEACCOUNT*[email protected],run:$gcloudconfigsetaccount`ACCOUNT`可以使用以下指令列出專案ID:12345$gcloudconfiglistproject[core]project=qwiklabs-gcp-f9d61ede8167e6b0Youractiveconfigurationis:[cloudshell-9292]理解Regions和ZonesComputeEngine資源位於不同的regions(地區)或zones(區域)。

region是你可以執行資源的所在特定地理位置。

每個region都有一個或多個zones。

例如,us-central1region代表美國中部地區,其中包含的Zones有us-central1-a、us-central1-b、us-central1-c與us-central1-f。

圖片來源:CreatingaVirtualMachine|Qwiklabs位於zone中的資源都稱為zonel(區域)資源,VMinstance(實例)和persistentdisk(永久磁碟)都位於zone中,如果要將persistentdisk附加到VMinstance,這兩個資源都必須位於同一個zone中。

同樣,如果要將靜態IP位址分配到instance,此instance就必須與靜態IP位於同一個region中。

詳情可參考GCP官方的Regions&Zones文件。

從CloudConsole建立新的instance在GCPConsole的右上角,點選「Navigationmenu>ComputeEngine>VMInstances」:接著點擊「Create」建立新的instance:建立新的instance時可以設定很多參數。

在此lab中會使用以下設定:欄位值額外資訊namegcelabregionus-central1(Iowa)或asia-south1(Mumbai)更多關於regions的資訊zoneus-central1-c或asia-south1-c注意:記住你選擇的zone,之後會用到更多關於zones的資訊MachineType2vCPU這是一個(n1-standard-2)2-CPU,7.5GBRAMinstance有很多機型可以選擇,從microinstance類型的到32-core/208GBRAM的都有,詳情可參考機型種類文件注意:新專案具有預設的資源配額,可能會限制CPU核心數。

可在此lab之外的專案上申請到更高的規格BootDiskNew10GBstandardpersistentdiskOSImage:DebianGNU/Linux9(Stretch)有很多images可以選擇,包括:Debian、Ubuntu、CoreOS,以及premiumimages,像是RedHatEnterpriseLinux和WindowsServer,詳情可參考OS文件Firewall勾選AllowHTTPtraffic,勾選此選項才能存取之後安裝的webserver注意:這會自動建立防火牆規則,允許80port的HTTP流量設定好之後,點擊「Create」:等待instance建立:看到下面畫面就代表instance已建立完成,接著點擊右邊的「SSH」按鈕,會開啟新的瀏覽器頁面:此頁面是直接從瀏覽器啟動SSHclient連接到VM:詳情可參考官方的Connecttoaninstanceusingssh文件。

安裝NGINXwebserver透過SSH連接VM之後,請使用sudo取得root的存取權限:1$sudosu-更新OS:12345$apt-getupdateGet:1http://security.debian.orgstretch/updatesInRelease[94.3kB]Ign:2http://deb.debian.org/debianstretchInReleaseGet:3http://deb.debian.org/debianstretch-updatesInRelease[91.0kB]...安裝NGINX:1$apt-getinstallnginx-y檢查NGINX是否正在執行:12345$psauwx|grepnginxroot23390.00.01595321628?Ss06:370:00nginx:masterprocess/usr/sbin/nginx-gdaemonon;master_processon;www-data23400.00.01598643200?S06:370:00nginx:workerprocesswww-data23410.00.01598643200?S06:370:00nginx:workerprocessroot23500.00.012780952pts/0S+06:370:00grepnginx註:如果關掉NGINX就不會出現關於NGINX的process:1234$servicenginxstop$psauwx|grepnginxroot23590.00.0127801012pts/0S+14:230:00grepnginx使用下面指令可以啟動NGINX:1$servicenginxstart回到CloudConsole,並點擊VMinstance的ExternalIP連結:就會開啟新分頁,可以看到NGINXwebserver的預設網頁:使用gcloud建立新的instance前面介紹的是利用GCPConsole來建立VMinstance,這邊要介紹的是可以使用預裝在GoogleCloudShell中的command-line工具gcloud來完成一樣的事。

CloudShell是基於Debian的VM,預載你所需的所有開發工具(gcloud、git…等其他),並提供5GBpersistentdisk的home目錄。

詳情可參考gcloudcommandlinetoolguide。

在CloudShell使用command-line工具gcloud建立一台新的VMinstance,將[YOUR_ZONE]替換成前面使用的zone:1$gcloudcomputeinstancescreategcelab2--machine-typen1-standard-2--zone[your_zone]像我前面的zone是用asia-south1-c,所以指令如下:1234$gcloudcomputeinstancescreategcelab2--machine-typen1-standard-2--zoneasia-south1-cCreated[https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-f9d61ede8167e6b0/zones/asia-south1-c/instances/gcelab2].NAMEZONEMACHINE_TYPEPREEMPTIBLEINTERNAL_IPEXTERNAL_IPSTATUSgcelab2asia-south1-cn1-standard-210.160.0.335.244.6.170RUNNING建立的instance具有以下預設值:最新的Debian9(stretch)image預設機型(machinetype)為n1-standard-2,在此lab中,你也可以使用n1-highmem-4或n1-highcpu-4其他機型。

在lab之外的專案可以指定自訂的機型rootpersistentdisk預設與instance的名稱一樣,disk會自動附加到instance執行下面指令可以查看所有預設值:1$gcloudcomputeinstancescreate--helpNote:如果你總是使用同一個region/zone,並且不希望每次都使用--zone參數,就可以使用下面指令,將指定的region和zones設為預設:12$gcloudconfigsetcompute/zone...$gcloudconfigsetcompute/region...詳情可參考官方的gcloudcompute|ComputeEngineDocumentation文件。

若要查看剛剛建立的instance是否成功建立,就要回到「Navigationmenu>ComputeEngine>VMInstances」頁面,如果還是沒有看到,就可以點擊「REFRESH」按鈕重新整理此頁面,應該就會看到剛剛建立名為gcelab2的instance:接著你也可以使用gcloud透過SSH連接到你的instance,連線時,請確認指令後面--zone參數的[YOUR_ZONE]是否和當初建立的一樣,或是如果你已在全域設定預設(上面Note提到的部分),就可以省略--zone參數:1$gcloudcomputesshgcelab2--zone[YOUR_ZONE]像我沒有在全域設定預設,所以需要在指令後面加上--zone參數,[YOUR_ZONE]則是當初建立的asia-south1-c,指令如下:12345678910$gcloudcomputesshgcelab2--zoneasia-south1-cWARNING:ThepublicSSHkeyfileforgclouddoesnotexist.WARNING:TheprivateSSHkeyfileforgclouddoesnotexist.WARNING:YoudonothaveanSSHkeyforgcloud.WARNING:SSHkeygenwillbeexecutedtogenerateakey.Thistoolneedstocreatethedirectory[/home/google3043863_student/.ssh]beforebeingabletogenerateSSHkeys.Doyouwanttocontinue(Y/n)?接著會出現下面畫面,請輸入Y繼續:1Doyouwanttocontinue(Y/n)?y此時會產生一對公鑰(publickey)和私鑰(privatekey),接著按Enter鍵,不輸入也不設定passphrase(如果是在真正的專案就建議輸入passphrase,因為當別人拿走你的私鑰時,就無法直接登入主機,還要輸入passphrase,安全性會比較高):1234567891011121314151617181920212223242526272829Generatingpublic/privatersakeypair.Enterpassphrase(emptyfornopassphrase):Entersamepassphraseagain:Youridentificationhasbeensavedin/home/google3043863_student/.ssh/google_compute_engine.Yourpublickeyhasbeensavedin/home/google3043863_student/.ssh/google_compute_engine.pub.Thekeyfingerprintis:SHA256:LJMylIaZY1aNf2v0uP/a83TSVw506GazmtvrTyPCxqUgoogle3043863_student@cs-6000-devshell-vm-8e6e4e18-0f7e-4771-ac48-22ab57ceb161Thekey'srandomartimageis:+---[RSA2048]----+|.o||=....||B+.o.||o+.ooo.||o+oS+.*.||oo++oo*.||..E.+.*||...o=.+o||.oo*==o.|+----[SHA256]-----+Warning:Permanentlyadded'compute.3226821850929314737'(ECDSA)tothelistofknownhosts.Linuxgcelab24.9.0-8-amd64#1SMPDebian4.9.144-3.1(2019-02-19)x86_64TheprogramsincludedwiththeDebianGNU/Linuxsystemarefreesoftware;theexactdistributiontermsforeachprogramaredescribedintheindividualfilesin/usr/share/doc/*/copyright.DebianGNU/LinuxcomeswithABSOLUTELYNOWARRANTY,totheextentpermittedbyapplicablelaw.Creatingdirectory'/home/google3043863_student'.使用gcloud設定防火牆如果我已經跟著之前的步驟安裝完NGINX了,就會發現剛剛建立的instance沒有做防火牆設定,也就是不允許80port的HTTP流量,所以就可以是用下面指令來設定:1$gcloudcomputefirewall-rulescreatenginx--allowtcp:80執行指令後會看到下面訊息,訊息內容是無法建立防火牆,這是因為請求的身分權限不足:123Creatingfirewall...failed.ERROR:(gcloud.compute.firewall-rules.create)Couldnotfetchresource:-InsufficientPermission:Requesthadinsufficientauthenticationscopes.那如何知道目前的有效帳號名稱?可以使用下面指令來查看,可以看到目前的帳號不是之前lab暫時給我們用的帳號:1234567$gcloudauthlistCredentialedAccountsACTIVEACCOUNT*721269751803-compute@developer.gserviceaccount.comTosettheactiveaccount,run:$gcloudconfigsetaccount`ACCOUNT`所以必須登入之前的帳號,可以使用下面指令:123456789101112131415$gcloudauthloginYouarerunningonaGoogleComputeEnginevirtualmachine.Itisrecommendedthatyouuseserviceaccountsforauthentication.Youcanrun:$gcloudconfigsetaccount`ACCOUNT`toswitchaccountsifnecessary.Yourcredentialsmaybevisibletootherswithaccesstothisvirtualmachine.Areyousureyouwanttoauthenticatewithyourpersonalaccount?Doyouwanttocontinue(Y/n)?接著會出現下面畫面,請輸入Y繼續:1Doyouwanttocontinue(Y/n)?接著會出現一長串的連結,點擊這個連結:12345678Doyouwanttocontinue(Y/n)?yGotothefollowinglinkinyourbrowser:https://accounts.google.com/o/oauth2/auth?redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&prompt=select_account&response_type=code&client_id=32555940559.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&access_type=offlineEnterverificationcode:該連結就是要你用lab提供的帳號登入:接著要同意GoogleCloudSDK存取此帳號:接著複製此授權碼,將授權碼貼至剛剛的shell:12345678Enterverificationcode:4/KwEnGIyzJ0P_ZvFeKt5264lP_3CdzZhUb-ZXoEJ0TbVFQVUQyYSBF58WARNING:`gcloudauthlogin`nolongerwritesapplicationdefaultcredentials.IfyouneedtouseADC,see:gcloudauthapplication-default--helpYouarenowloggedinas[[email protected]].Yourcurrentprojectis[qwiklabs-gcp-f9d61ede8167e6b0].Youcanchangethissettingbyrunning:$gcloudconfigsetprojectPROJECT_ID登入成功後,可以再次執行下面指令看一下目前有效帳號的名稱,變成lab暫時給我們用的帳號囉:12345678$gcloudauthlistCredentialedAccountsACTIVEACCOUNT721269751803-compute@developer.gserviceaccount.com*[email protected],run:$gcloudconfigsetaccount`ACCOUNT`接著再次執行下面指令,就可以成功設定防火牆:12345$gcloudcomputefirewall-rulescreatenginx--allowtcp:80Creatingfirewall...⠶Created[https://www.googleapis.com/compute/v1/projects/qwiklabs-gcp-f9d61ede8167e6b0/global/firewalls/nginx].Creatingfirewall...done.NAMENETWORKDIRECTIONPRIORITYALLOWDENYDISABLEDnginxdefaultINGRESS1000tcp:80False雖然GCPConsole介面上VMinstance的ExternalIP沒有變成可以點擊的連結,但可以將ExternalIP複製到新的瀏覽器分頁:就能成功看到NGINXwebserver的預設網頁:下圖就是我成功完成此quest的畫面:參考來源CreatingaVirtualMachine|QwiklabsATourofQwiklabsandtheGoogleCloudPlatform|Qwiklabs在GCP上開立一台虛擬機|Ray’sCodingJourneyGCPVMNIGNXWebServer分享:PrevPython爬蟲常用技巧(持續更新)NextGCP(GoogleCloudPlatform)入門相關文章GoogleCloudShell入門:gcloud&gsutil本篇是紀錄在Google的Qwiklab平台內,完成「GettingStartedwithCloudShell&gcloud」這個quest所學到的內容,包括如何使用gcloud指令,在GCP上建立VM架設WindowsServer本篇是紀錄在Google的Qwiklab平台內,完成「ComputeEngine:QwikStart-Windows」這個quest所學到的內容,包括如何透過GCPConsole在GCP建GCP(GoogleCloudPlatform)入門本篇是紀錄在Google的Qwiklab平台內,完成「ATourofQwiklabsandtheGoogleCloudPlatform」這個quest所學到的內容,包括如何使用以及認識Qwi在GCP建立NetworkLoadBalancer和HTTPLoadBalancer本篇是紀錄在Google的Qwiklab平台內,完成「SetUpNetworkandHTTPLoadBalancers」這個quest所學到的內容,包括如何建立多個webserverinstGoogleKubernetesEngine(GKE)入門本篇是紀錄在Google的Qwiklab平台內,完成「KubernetesEngine:QwikStart」這個quest所學到的內容,包括如何透過GKE建立容器和部署容器化應用程式。

Google討論區利用blog紀錄學習歷程TitangeneBlogLoading...2020-10-12JavaScript之旅(27):Promise.any()&AggregateError2020-10-07JavaScript之旅(22):BigInt2020-09-28JavaScript之旅(13):ObjectRest/SpreadProperties2020-09-23JavaScript之旅(8):Promise.prototype.finally()2020-09-20JavaScript之旅(5):Stringmethod-padStart&padEnd2020-09-19JavaScript之旅(4):Object.keys()&Object.values()&Object.entries()2020-09-18JavaScript之旅(3):ExponentiationOperator(指數運算子)



請為這篇文章評分?