적용 대상: ✔️ Linux VM
이 문서에서는 Azure의 Ubuntu VM에 Apache 웹 서버, MySQL 및 PHP(LAMP 스택)를 배포하는 방법을 설명합니다. 작업에서 LAMP 서버를 보려면 필요에 따라 WordPress 사이트를 설치하고 구성할 수 있습니다. 이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- Ubuntu VM 만들기
- 웹 트래픽에 대해 포트 80 열기
- Apache, MySQL 및 PHP 설치
- 설치 및 구성 확인
- WordPress 설치
이 설치는 빠른 테스트 또는 개념 증명을 위한 것입니다. 프로덕션 환경에 대한 권장 사항을 비롯한 LAMP 스택에 대한 자세한 내용은 Ubuntu 설명서를 참조하세요.
이 자습서에서는 지속적으로 최신 버전으로 업데이트되는 Azure Cloud Shell 내의 CLI를 사용합니다. Cloud Shell을 열려면 코드 블록 상단에서 사용해 보세요를 선택합니다.
CLI를 로컬로 설치하여 사용하도록 선택하는 경우 이 자습서에서는 Azure CLI 버전 2.0.30 이상을 실행해야 합니다.
az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
리소스 그룹 만들기
az group create 명령을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.
다음 예제에서는 환경 변수를 사용하여 리소스 그룹을 만들고 임의 접미사를 추가하여 고유성을 보장합니다.
export REGION="eastus2"
export RANDOM_SUFFIX="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myResourceGroup${RANDOM_SUFFIX}"
az group create --name "${MY_RESOURCE_GROUP_NAME}" --location $REGION
결과:
{
"id": "/subscriptions/xxxxx-xxxxx-xxxxx-xxxxx/resourceGroups/myResourceGroupxxxxx",
"location": "eastus",
"name": "myResourceGroupxxxxx",
"properties": {
"provisioningState": "Succeeded"
}
}
가상 머신 만들기
az vm create 명령을 사용하여 VM을 만듭니다.
다음 예제에서는 환경 변수를 사용하여 VM을 만듭니다.
myVM이라는 VM을 만들고 기본 키 위치에 아직 없는 경우 SSH 키를 만듭니다. 특정 키 집합을 사용하려면 --ssh-key-value
옵션을 사용합니다. 또한 이 명령은 azureuser를 관리자 사용자 이름으로 설정합니다. 나중에 이 이름을 사용하여 VM에 연결합니다.
export MY_VM_NAME="myVM${RANDOM_SUFFIX}"
export IMAGE="Ubuntu2204"
export ADMIN_USERNAME="azureuser"
az vm create \
--resource-group "${MY_RESOURCE_GROUP_NAME}" \
--name $MY_VM_NAME \
--image $IMAGE \
--admin-username $ADMIN_USERNAME \
--generate-ssh-keys
VM을 만든 경우 Azure CLI는 다음 예제와 비슷한 정보를 표시합니다.
publicIpAddress
을 기록해 둡니다. 이 주소는 나중의 단계에서 VM에 액세스하는 데 사용됩니다.
{
"fqdns": "",
"id": "/subscriptions/<subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"location": "eastus",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.0.4",
"publicIpAddress": "40.68.254.142",
"resourceGroup": "myResourceGroup"
}
웹 트래픽에 대해 포트 80 열기
기본적으로 Azure에 배포된 Linux VM에는 SSH 연결만이 가능합니다. 이 VM이 웹 서버가 되기 때문에 인터넷에서 포트 80을 열어야 합니다. az vm open-port 명령을 사용하여 원하는 포트를 엽니다.
az vm open-port --port 80 --resource-group "${MY_RESOURCE_GROUP_NAME}" --name $MY_VM_NAME
VM에 포트를 여는 방법에 대한 자세한 내용은 포트 열기를 참조하세요.
VM에 SSH 수행
VM의 공용 IP 주소를 알고 있는 경우 az network public-ip list 명령을 실행합니다. 나중에 몇 단계에서 이 IP 주소가 필요합니다.
export PUBLIC_IP=$(az network public-ip list --resource-group "${MY_RESOURCE_GROUP_NAME}" --query [].ipAddress -o tsv)
명령을 ssh
사용하여 가상 머신에서 SSH 세션을 만듭니다. 가상 머신의 올바른 공용 IP 주소로 대체합니다.
Apache, MySQL 및 PHP 설치
다음 명령을 실행하여 Ubuntu 패키지 원본을 업데이트하고 Apache, MySQL 및 PHP를 설치합니다. 명령의 끝부분에 붙는 캐럿(^)은 lamp-server^
패키지 이름의 일부임에 주의합니다.
ssh -o StrictHostKeyChecking=no azureuser@$PUBLIC_IP "sudo apt-get update && sudo DEBIAN_FRONTEND=noninteractive apt-get -y install lamp-server^"
패키지 및 기타 종속성을 설치하라는 메시지가 표시됩니다. 이 프로세스에서는 PHP와 MySQL을 함께 사용하는 데 필요한 최소한의 PHP 확장을 설치합니다.
Apache 확인
다음 명령으로 Apache의 버전을 확인합니다.
ssh -o StrictHostKeyChecking=no azureuser@$PUBLIC_IP "apache2 -v"
Apache를 설치하고 VM에 포트 80을 열어서 인터넷에서 웹 서버에 액세스할 수 있습니다. Apache2 Ubuntu 기본 페이지를 보려면 웹 브라우저를 열고 VM의 공용 IP 주소를 입력합니다. VM에 SSH하는 데 사용한 공용 IP 주소를 사용합니다.
MySQL 확인 및 보호
다음 명령을 사용하여 MySQL의 버전을 확인합니다(대문자 V
매개 변수 주의).
ssh -o StrictHostKeyChecking=no azureuser@$PUBLIC_IP "mysql -V"
루트 암호 설정을 포함하여 MySQL 설치를 보호하기 위해 명령을 실행할 sudo mysql_secure_installation
수 있습니다. 이 명령은 MySQL 설치를 보호하는 데 도움이 되는 몇 가지 질문에 답하라는 메시지를 표시합니다.
필요에 따라 암호 유효성 검사 플러그인을 설치할 수 있습니다(권장). 그런 다음, MySQL 루트 사용자의 암호를 설정하고 사용자 환경에 대한 나머지 보안 설정을 구성합니다. 모든 질문에 "Y"(예)라고 대답하는 것이 좋습니다.
MySQL 기능(MySQL 데이터베이스를 만들거나, 사용자를 추가하거나 구성 설정을 변경함)을 시도해 보려면 MySQL에 로그인합니다. 이 단계는 이 자습서를 완료하는 데 필수는 아닙니다. 이렇게 하려면 VM에서 sudo mysql -u root -p
명령을 사용하고, 비밀번호를 입력하라는 메시지가 표시되면 루트 암호를 입력하십시오. 이 명령은 SSH를 통해 VM에 연결하고 MySQL 명령줄 클라이언트를 루트 사용자로 시작합니다.
완료한 후 \q
를 입력하여 mysql 프롬프트를 종료합니다.
PHP 확인
다음 명령으로 PHP의 버전을 확인합니다.
ssh -o StrictHostKeyChecking=no azureuser@$PUBLIC_IP "php -v"
더 자세히 테스트하려면 브라우저에서 볼 빠른 PHP 정보 페이지를 만들 수 있습니다. 다음 명령은 PHP 정보 페이지를 만듭니다. sudo sh -c 'echo \"<?php phpinfo\(\)\; ?>\" > /var/www/html/info.php
이제 만든 PHP 정보 페이지를 확인할 수 있습니다. 브라우저를 열고 http://yourPublicIPAddress/info.php
으로 이동합니다. VM의 공용 IP 주소를 대체합니다. 이 이미지와 유사하게 표시됩니다.
WordPress 설치
스택을 사용하려는 경우 샘플 앱을 설치합니다. 예를 들어, 다음 단계는 오픈 소스 WordPress 플랫폼을 설치하여 웹 사이트 및 블로그를 만듭니다. Drupal 및 Moodle을 포함하려는 다른 워크로드입니다.
이 WordPress 설정은 오직 개념 증명을 위한 것입니다. 권장되는 보안 설정으로 최신 WordPress를 프로덕션에 설치하려면 WordPress 설명서를 참조하세요.
WordPress 패키지 설치
다음 명령을 실행합니다.
sudo apt install wordpress
WordPress 구성
MySQL 및 PHP를 사용하도록 WordPress를 구성합니다.
작업 디렉터리에서 wordpress.sql
텍스트 파일을 만들어 WordPress용 MySQL 데이터베이스를 구성합니다.
sudo sensible-editor wordpress.sql
다음 명령을 추가하여 yourPassword에 대한 데이터베이스 암호를 원하는 암호로 바꿉니다(다른 값을 변경하지 않고 둠). 이전에 암호 강도의 유효성을 검사하는 MySQL 보안 정책을 설정한 경우 암호가 강도 요구 사항에 부합해야 합니다. 파일을 저장합니다.
CREATE DATABASE wordpress;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON wordpress.*
TO wordpress@localhost
IDENTIFIED BY 'yourPassword';
다음 명령을 실행하여 데이터베이스를 만듭니다.
cat wordpress.sql | sudo mysql --defaults-extra-file=/etc/mysql/debian.cnf
wordpress.sql
파일에는 데이터베이스 자격 증명이 있으므로 사용 후에 삭제합니다.
sudo rm wordpress.sql
PHP를 구성하려면 다음 명령을 실행하여 원하는 텍스트 편집기를 열고 /etc/wordpress/config-localhost.php
파일을 만듭니다.
sudo sensible-editor /etc/wordpress/config-localhost.php
파일에 다음 줄을 복사하여 yourPassword에 대한 WordPress 데이터베이스 암호를 대체합니다(다른 값을 변경하지 않고 둠). 그런 다음, 파일을 저장합니다.
<?php
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'yourPassword');
define('DB_HOST', 'localhost');
define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content');
?>
웹 서버 문서 루트로 WordPress 설치를 이동합니다.
sudo ln -s /usr/share/wordpress /var/www/html/wordpress
sudo mv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php
이제 WordPress 설정을 완료하고 플랫폼에 게시할 수 있습니다. 브라우저를 열고 http://yourPublicIPAddress/wordpress
으로 이동합니다. VM의 공용 IP 주소를 대체합니다. 이 이미지와 유사하게 표시됩니다.
다음 단계
이 자습서에서는 Azure에서 램프 서버를 배포했습니다. 다음 방법에 대해 알아보았습니다.
- Ubuntu VM 만들기
- 웹 트래픽에 대해 포트 80 열기
- Apache, MySQL 및 PHP 설치
- 설치 및 구성 확인
- LAMP 서버에 WordPress 설치
다음 자습서로 이동하여 TLS/SSL 인증서를 사용하여 웹 서버를 보호하는 방법에 대해 알아봅니다.