728x90
728x90

Azure를 이용한 리눅스 VM 배포/연결 및 실습

  • Microsoft Azure를 이용하여 리눅스 실습을 진행해보자.

 

리눅스 VM 배포 및 연결

① Azure에서 가상 머신 만들기 및 배포

  • Azure 포털에 로그인한 후, 다음과 같이 가상 머신을 만들어준다.
설정 항목 리눅스 VM
리소스 그룹 RG##
가상머신 이름 vmlinux##
지역 East US
이미지 Ubuntu Server 22.04 LTS
크기 Standard_B2s
사용자 이름 myuser
인증 방식 암호: He*lo@owold123
공용 인바운드 포트 SSH(22), HTTP(80)
OS 디스크 유형 프리미엄 SSD
가상 네트워크 vnet-test
서브넷 snet-linux
부트 진단 사용 안 함
확장 N/A

 

Azure에서 리눅스 가상 머신을 생성한 모습

 

② SSH를 사용한 연결

  • 생성한 @vmlinux##@ 리소스로 이동한다.
  • [설정] > [연결]  탭을 클릭한 후, [SSH] 항목에서 4번 항목을 확인한다. (myuser@IP주소)

 

  • 윈도우 혹은 맥의 터미널에서 아래의 명령을 실행하여 생성한 리눅스 서버로 접속한다.
> ssh myUser@**.**.***.***

 

  • Azure에서 VM을 생성할 때 적었던 비밀번호를 입력한다.
myUser@**.**.***.***'s password:

 

  • 성공적으로 접속이 되었는지 확인한다.

 

리눅스 실습하기

명령행 편집

  • 문자 지우기 : @[←]@ 또는 @[Delete]@
  • 단어 지우기 : @[Ctrl] + [W]@ (W : Word)
  • 행 지우기 : @[Ctrl] + [U]@ (U : Underline)

 

명령과 옵션

  • 명령만 사용한 경우 : @ls@
  • 명령과 옵션을 사용한 경우 : @ls -al@

 

명령과 옵션, 인자

  • 명령과 인자를 사용한 경우 : @ls /tmp@
  • 명령, 옵션, 인자를 사용한 경우 : @ls -al /tmp@

 

기초 명령

  • @date@ 명령 : 날짜와 시간을 출력한다.
  • @clear@ 명령 : 화면을 지운다.
  • @man@ 명령 : 명령 사용 방법을 화면에 출력한다.
  • @passwd@ 명령 : 사용자 계정의 비밀번호를 변경한다.

 

셸 지정 및 변경

  • 사용자의 기본 셸은 @/etc/passwd@ 파일에 저장된다.
  • @chsh@ 명령을 사용하여 기본 셸을 변경할 수 있다.
$ grep Sunny /etc/passwd                           // 기본 셸 확인하기
Sunny:x:1000:1000:Ubuntu:/home/Sunny:/bin/bash
$ chsh -s /bin/sh Sunny                            // 기본 셀 변경하기
Password:
$ grep Sunny /etc/passwd                           // 변경된 셸 확인하기
Sunny:x:1000:1000:Ubuntu:/home/Sunny:/bin/sh
$ chsh -s /bin/bash Sunny                          // 기본 셸로 되돌리기

 

출력 명령

  • @echo@ 명령 : 화면에 한 줄의 문자열을 출력한다.
  • @printf@ 명령 : 자료를 형식화하여 화면에 출력한다.
    • 예) @$ printf "linux ubuntu \n"@

 

셸 변수 정의

  • 형식 : @변수명=문자열@
  • 예) @SOME=test@

 

별칭

  • @alias@ 명령 : 앨리어스를 생성한다.
  • 예) @alias hs = history@
  • 주의할 점 : 스크립트를 작성할 때는 앨리어스명을 쓰지 않고 정식 명칭을 사용해야 한다. (실행이 안될 수 있다.)

 

히스토리

  • @history@ 명령 : 히스토리(명령 입력 기록)를 출력한다.

 

파일과 디렉터리

  • @file@ 명령 : 파일의 종류를 알아보는 명령
    • 예) @file .profile@
  • @ls@ 명령 : 디렉터리의 내용을 출력한다.
  • @chmod@ 명령 : 파일이나 디렉터리의 접근 권한을 변경한다.
  • @mkdir@ 명령 : 디렉터리를 생성한다.
  • @rmdir@ 명령 : 디렉터리를 삭제한다.
  • @cp@ 명령 : 파일이나 디렉터리를 복사한다.
    • @-r@ 옵션 : 디렉터리를 복사할 때 지정한다.
  • @mv@ 명령 : 파일 또는 디렉터리를 이동하거나 이름을 바꾼다.
  • @rm@ 명령 : 파일을 삭제한다.
    • @-r@ 옵션 : 디렉터리를 삭제할 때 지정한다.
    • @-i@ 옵션 : 파일을 정말 삭제할 것인지 확인한다.
  • @touch@ 명령 : 빈 파일을 생성한다.
    • @-a@ 옵션 : 접근 시간만 변경한다.
    • @-m@ 옵션 : 수정 시간만 변경한다.
  • @grep@ 명령 : 지정한 패턴이 포함된 행을 찾는다.
    • @-i@ 옵션 : 소문자, 대문자를 모두 검색한다.
    • @-l@ 옵션 : 지정한 패턴이 포함된 파일명을 출력한다.
    • @-n@ 옵션 : 행 번호를 출력한다.
  • @find@ 명령 : 지정한 위치에서 검색 조건에 맞는 파일을 찾는다.
    • 검색 조건
      • @-name filename@ : 파일명으로 검색한다.
      • @-type 파일 종류@ : 파일 종류로 검색한다.
      • @-user loginID@ : 지정한 사용자가 소유한 모든 파일을 검색한다.
      • @-perm 접근 권한@ : 지정한 사용 권한과 일치하는 파일을 검색한다.
    • 동작
      • @-exec 명령 {} \;@ : 검색된 파일에 명령을 실행한다.
      • @-ok 명령 {} \;@ : 사용자의 확인을 받아서 명령을 실행한다.
      • @-print@ : 검색된 파일의 절대 경로명을 화면에 출력한다. (기본 동작)
      • @-ls@ : 검색 결과를 긴 목록 형식으로 출력한다.

 

입출력

  • @>@ : 파일 리다이렉션(덮어쓰기)
  • @>>@ : 파일에 내용을 추가
  • @2>@ : 표준 오류 메시지를 파일에 저장

 

프로세스 관리

  • @ps@ 명령 : 현재 실행 중인 프로세스에 대한 정보를 출력한다.
  • @kill@ 명령 : 지정한 시그널을 프로세스에게 보낸다.
    • @2@ : 인터럽트 시그널 (Ctrl + C)
    • @9@ : 프로세스를 강제로 종료
  • @pkill@ 명령 : 프로세스 명령 이름으로 종료
  • @pgrep@ 명령 : 지정한 패턴과 일치하는 프로세스의 정보를 출력한다.

 

디스크 관리

  • @fdisk@ 명령 : 디스크의 파티션 생성, 삭제, 보기 등 파티션을 관리한다.
  • @mkfs@ 명령 : 리눅스 파일 시스템을 만든다. 
  • @mount@ 명령 : 파일 시스템을 마운트한다.
  • @umount@ 명령 : 파일 시스템을 언마운트한다.
  • @df@ 명령 : 디스크의 남은 공간에 대한 정보를 출력한다.

 

리눅스 VM에 데이터 디스크 추가하기

① 데이터 디스크 추가

  • Azure에서 생성한 가상 머신 리소스의 [디스크] 탭에 들어 간후, 새로운 디스크(@DataDisk_1@)를 생성한다.

  • VM에 연결된 디스크 확인하기
# lsblk -o NAME,HCTL,SIZE,MOUNTPOINT | grep -i "sd"
sda     0:0:0:0      30G
├─sda1             29.9G /
├─sda14               4M
└─sda15             106M /boot/efi
sdb     0:0:0:1       4G
└─sdb1                4G /mnt
sdc     1:0:0:0       4G

 

② 디스크 포맷 및 검증

# sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100%
# sudo mkfs.xfs /dev/sdc1
# sudo partprobe /dev/sdc1

 

③ 디스크 마운트

# sudo mkdir /datadrive1
# sudo mount /dev/sdc1 /datadrive1
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  1.6G   28G   6% /
devtmpfs        449M     0  449M   0% /dev
tmpfs           454M     0  454M   0% /dev/shm
tmpfs            91M  964K   90M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           454M     0  454M   0% /sys/fs/cgroup
/dev/loop0       64M   64M     0 100% /snap/core20/1852
/dev/loop2       54M   54M     0 100% /snap/snapd/18933
/dev/loop1       92M   92M     0 100% /snap/lxd/24061
/dev/sda15      105M  6.1M   99M   6% /boot/efi
/dev/sdb1       3.9G   28K  3.7G   1% /mnt
tmpfs            91M     0   91M   0% /run/user/1000
/dev/sdc1       4.0G   61M  4.0G   2% /datadrive1

 

# cd /datadrive1/
# sudo touch test
# ls
test

 

④ 부팅 후 디스크 유지를 위해 @/etc/fstab@ 파일에 추가

[1] 새 드라이브의 UUID 확인

# sudo blkid
/dev/sdb1: UUID="6ee7f013-51f1-446d-80b2-bc4392bec460" TYPE="ext4" PARTUUID="92865292-01"
/dev/sda1: LABEL="cloudimg-rootfs" UUID="1937f012-ef27-469a-8f75-8d63a6a39aa0" TYPE="ext4" PARTUUID="73105be2-2d95-40d8-bb8a-5454f56ccc0b"
/dev/sda15: LABEL_FATBOOT="UEFI" LABEL="UEFI" UUID="B06C-6E89" TYPE="vfat" PARTUUID="fdd00ae2-94f3-4b6a-a9b6-6f6612f42a26"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/sda14: PARTUUID="dcc78ecf-19e8-4e28-83d4-53a9a38e3bcb"
/dev/sdc1: UUID="ad19689d-a77c-446e-988e-43f18682f625" TYPE="xfs" PARTLABEL="xfspart" PARTUUID="a17fdda0-4069-46e5-aa6d-38ddb675a4e3"

 

[2] 텍스트 편집기에서 @/etc/fstab@ 파일 열기

# sudo nano /etc/fstab

 

[3] @fstab@ 파일 마지막에 추가할 내용 예시

UUID=3333333-3b3b-3c3c-3d3d-3e3e3e3e3e3e      /datadrive    xfs    defaults,nofail     1     2

 

vi 편집기

 

NGINX 설치 및 샘플 페이지 생성하기

NGINX란?

  • 가벼우면서도 강력한 프로그램을 목표로 러시아에서 개발되어 현재는 미국에서 운영중인 오픈 소스 웹 서버 프로그램이다. 
  • '엔진엑스'라고 읽는다. 
  • HTTP와 리버스 프록시, IMAP/POP3 등의 서버 구동이 가능하다. 
  • Java 서블릿은 대개 Apache의 Tomcat을 연동해서 구동하고, PHP의 경우 PHP-FPM(FastCGI Process Manager)을 연동해서 구동한다.

 

NGINX - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

 

패키지 소스 업데이트

$ sudo apt-get -y update

 

NGINX 설치

$ sudo apt-get -y install nginx

 

  • NGINX를 설치한 후, 제대로 실행되고 있는지 확인하기 위해 다음의 명령을 실행한다.
$ ps -ef
root        2630       1  0 10:20 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process o
www-data    2633    2630  0 10:20 ?        00:00:00 nginx: worker process

 

  • 다음의 명령을 실행하여 nginx가 작동하고 있는지 확인해본다.
$ curl http://localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

 

  • Azure에서 배포한 리눅스 VM의 내부 IP 주소를 본인 PC의 브라우저 검색창에 입력하고 실행한다. 그러면 nginx 초기 화면이 뜨는 것을 확인할 수 있다.
$ ifconfig

 

@index.html@ 파일 만들기

  • 다음의 명령들을 차례로 실행한다.
$ fileName=/var/www/html/index.html
$ sudo sh -c "echo 'Running Sample Web from host $(hostname)'>${fileName}"

 

  • 그리고 개인 PC의 웹 브라우저의 검색창에 리눅스 VM 아이피 주소를 입력하고 실행한다. 수정한 내용이 반영 것을 확인할 수 있다.

수정한 내용이 반영된 모습

 

  • 다음 명령을 입력하면 nginx가 돌아가고 있는 프로세스가 몇 개인지 확인할 수 있다.
$ ps -ef | grep nginx

 

  • 다음 명령을 입력하면 nginx와 관련된 프로세스들 모두 종료시킬 수 있다.
$ sudo pkill nginx

 

  • nginx를 다시 실행하려면 다음과 같이 명령을 입력한다.
$ sudo nginx

 

VS Code로 원격 리눅스 VM에 SSH 연결 구성하기

① VS Code 설치

VS Code를 설치할 때 해당 옵션들을 모두 체크해준다.

 

② VS Code에서 Remote-SSH 확장 설치하기

Remote - SSH Extension을 설치해준다.

 

③ VS Code에서 원격 리눅스 VM 연결하기

  • Remote-SSH 설치 후, @[F1]@ (또는 @[Ctrl]@ + @[Shift]@ + @[P]@)을 누른다. 그리고 @ssh@를 입력한 후, @Remote-SSH: Connect to Host...@를 클릭한다.

 

  • @[Add New SSH Host...]@ 항목을 클릭한다.

 

  • Azure에서 배포한 리눅스 VM의 계정명(@name@)과 @IP주소@를 입력한 후, @[Enter]@ 버튼을 누른다.

 

  • 상단의 @C:\Users\계정명\.ssh\config@ 항목을 클릭해준다. 그러면 @C:\Users\계정명\.ssh@ 디렉터리에 @config@ 파일을 저장하게 된다.
    • @config@ 파일에는 원격으로 연결할 서버 정보가 들어가 있다.

 

  • 다시 @[F1]@(또는 @[Ctrl]@ + @[Shift]@ + @[P]@)을 누르고 @ssh@를 입력하여 @Remote-SSH: Connect to Host...@ 항목을 클릭한다.

 

  • 원격 리눅스 VM의 아이피 주소가 적힌 항목을 클릭한다.

 

  • 새로운 VS Code 창이 뜨고, 패스워드를 입력하라는 창이 뜬다. 원격 리눅스 VM의 사용자 계정 비밀번호를 입력한다.

 

  • 터미널을 열면(@[Ctrl]@ + @[Shift]@ + @[`]@) 자동으로 원격 리눅스 VM으로 연결이 되는 것을 확인할 수 있다.

 

④ 디렉터리 및 파일 생성해보기

  • VS Code에서 원격 리눅스 VM에 연결한 상태에서, 터미널을 통해 디렉터리와 파일을 생성해본다.

lab 디렉터리를 생성하고 hello.py 파일을 생성한 모습

 

  • 이와 같은 방법으로 VS Code를 사용하여 원격 저장소를 편하게 관리할 수 있다.

 

Azure CLI / PowerShell on Linux

  • 리눅스에서 Azure를 셸(Shell)로 관리하려면 Azure CLIAzure PowerShell이 설치되어 있어야 한다.
  • 대부분의 고수들은 Azure CLIAzure PowerShell을 이용하여 Azure를 다룬다.

 

① Azure CLI 설치 및 확인하기

  • Azure CLIBash 스타일로 Azure를 다룰 수 있다.
 

Linux에 Azure CLI 설치

Linux에서 Azure CLI를 수동으로 설치하고 실행하는 방법을 알아봅니다. 하나의 명령 또는 단계별 프로세스를 통해 Linux 컴퓨터에 Azure CLI를 설치할 수 있습니다.

learn.microsoft.com

 

  • 다음 명령을 입력하여 Azure CLI를 설치한다.
$ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

 

  • 설치가 완료되면 다음 명령을 입력해서 Azure CLI가 제대로 설치되어 있는지 확인한다.
$ az --version
azure-cli                         2.48.1

core                              2.48.1
telemetry                          1.0.8

Dependencies:
msal                              1.20.0
azure-mgmt-resource               22.0.0

Python location '/opt/az/bin/python3'
Extensions directory '/home/myuser/.azure/cliextensions'

Python (Linux) 3.10.10 (main, Apr 25 2023, 04:23:10) [GCC 11.3.0]

Legal docs and information: aka.ms/AzureCliLegal


Your CLI is up-to-date.

 

 

② Azure PowerShell 설치 및 확인하기

  • Azure PowerShellPowerShell 문법 스타일로 Azure를 다룰 수 있다.
 

Linux에 Azure PowerShell 설치

Linux에서 Azure PowerShell 설치하고 실행하는 방법을 알아봅니다. 하나의 명령으로 Linux에 Azure PowerShell 설치할 수 있습니다.

learn.microsoft.com

 

  • 다음 명령을 입력하여 Azure PowerShell을 설치한다.
// # Update the list of packages
$ sudo apt-get update       

// Install pre-requisite packages.
$ sudo apt-get install -y wget apt-transport-https software-properties-common    

// Download the Microsoft repository GPG keys
$ wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"

// # Register the Microsoft repository GPG keys
$ sudo dpkg -i packages-microsoft-prod.deb

// Delete the the Microsoft repository GPG keys file
$ rm packages-microsoft-prod.deb

// Update the list of packages after we added packages.microsoft.com
$ sudo apt-get update

// # Install PowerShell
$ sudo apt-get install -y powershell

// Start PowerShell
$ pwsh

// Install Azure PowerShell Module
$ Install-Module -Name Az -AllowClobber

 

  • @pwsh@ 명령을 입력하면 다음과 같이 Azure PowerShell로 진입하게 된다.
$ pwsh
PowerShell 7.3.4
PS /home/myuser>           // PowerShell 진입

 

  • 다음 명령을 입력하여 Azure PowerShell 모듈이 설치되었는지 확인한다.
$ get-module -ListAvailable Az*
    Directory: /home/myuser/.local/share/powershell/Modules

ModuleType Version    PreRelease Name                                PSEdition ExportedCommands
---------- -------    ---------- ----                                --------- ----------------
Script     9.7.1                 Az                                  Core,Desk 
Script     2.12.2                Az.Accounts                         Core,Desk {Disable-AzDataCollection, Disable-AzCon…
Script     2.0.0                 Az.Advisor                          Core,Desk {Disable-AzAdvisorRecommendation, Enable…
Script     5.4.0                 Az.Aks                              Core,Desk {Get-AzAksCluster, New-AzAksCluster, Rem…
Script     1.1.4                 Az.AnalysisServices                 Core,Desk {Resume-AzAnalysisServicesServer, Suspen…
Script     4.0.2                 Az.ApiManagement                    Core,Desk {Add-AzApiManagementApiToGateway, Add-Az…
Script     1.2.0                 Az.AppConfiguration                 Core,Desk {Get-AzAppConfigurationStore, Get-AzAppC…
Script     2.2.2                 Az.ApplicationInsights              Core,Desk {Get-AzApplicationInsights, Get-AzApplic…
Script     2.0.0                 Az.Attestation                      Core,Desk {Get-AzAttestationPolicy, Set-AzAttestat…
Script     1.0.0                 Az.Automanage                       Core,Desk {Get-AzAutomanageBestPractice, Get-AzAut…
Script     1.9.1                 Az.Automation                       Core,Desk {Set-AzAutomationPython3Package, New-AzA…
Script     3.4.0                 Az.Batch                            Core,Desk {Remove-AzBatchAccount, Get-AzBatchAccou…
Script     2.0.1                 Az.Billing                          Core,Desk {Get-AzBillingInvoice, Get-AzBillingPeri…
Script     2.1.0                 Az.Cdn                              Core,Desk {Clear-AzCdnEndpointContent, Clear-AzFro…
Script     1.2.0                 Az.CloudService                     Core,Desk {Get-AzCloudService, Get-AzCloudServiceI…
Script     1.13.1                Az.CognitiveServices                Core,Desk {Get-AzCognitiveServicesAccount, Get-AzC…
Script     5.7.1                 Az.Compute                          Core,Desk {Remove-AzAvailabilitySet, Get-AzAvailab…
Script     1.0.0                 Az.ConfidentialLedger               Core,Desk {Get-AzConfidentialLedger, New-AzConfide…
Script     3.2.0                 Az.ContainerInstance                Core,Desk {Add-AzContainerInstanceOutput, Get-AzCo…
Script     3.0.4                 Az.ContainerRegistry                Core,Desk {New-AzContainerRegistry, Get-AzContaine…
Script     1.10.1                Az.CosmosDB                         Core,Desk {Get-AzCosmosDBSqlContainer, Get-AzCosmo…
Script     1.1.0                 Az.DataBoxEdge                      Core,Desk {Get-AzDataBoxEdgeJob, Get-AzDataBoxEdge…
Script     1.5.0                 Az.Databricks                       Core,Desk {Get-AzDatabricksAccessConnector, Get-Az…
Script     1.16.13               Az.DataFactory                      Core,Desk {Set-AzDataFactoryV2, Update-AzDataFacto…
Script     1.0.2                 Az.DataLakeAnalytics                Core,Desk {Get-AzDataLakeAnalyticsDataSource, New-…
Script     1.3.0                 Az.DataLakeStore                    Core,Desk {Get-AzDataLakeStoreTrustedIdProvider, R…
Script     1.2.0                 Az.DataProtection                   Core,Desk {Backup-AzDataProtectionBackupInstanceAd…
Script     1.0.1                 Az.DataShare                        Core,Desk {New-AzDataShareAccount, Get-AzDataShare…

 

참고

  • 도커(Docker)쿠버네티스(Kubernetes) 작업을 할 때, Azure 포털이 아닌 Azure CLIAzure PowerShell을 이용하여 작업한다.
728x90
728x90